Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Узнать когда окончилась отрисовка? 
:(
    Опции темы
Grol
Дата 13.1.2007, 06:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 5.5.2005
Где: Россия

Репутация: нет
Всего: нет



Уважаемые модераторы, ответьте пожалуйста на вопрос: как узнать что DBGrid отрисовался? Т.е. на форме есть DBGrid, когда форма на экране отобразилась на ней отобразился DBGrid. И нужно выдать сообщение в момент окончания отрисовки DBGrid'a.... как это сделать я не знаю.... может знает кто другой.... За любую помощь буду очень благодарен!
--------------------
Живи так, как будто тебе предстоит умереть завтра...Учись так, как будто тебе предстоит жить вечно.........
PM MAIL ICQ   Вверх
aktuba
Дата 13.1.2007, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 16
Всего: 38



Не сталкивался, но первая мысль, пришедшая в голову - проверять отрисовалась ли последняя ячейка (нижняя правая)...
Еще, как вариант, проверять, что программа простаивает...


--------------------
user posted image
PM MAIL WWW Skype   Вверх
Alexeis
Дата 13.1.2007, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Grol, обработчик onPaint как раз и вызывается после окончания отрисовки.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Sunvas
Дата 13.1.2007, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Цитата(Grol @  13.1.2007,  06:55 Найти цитируемый пост)
И нужно выдать сообщение в момент окончания отрисовки DBGrid'a

Вот этого не совутую делать. Если ты будешь мессаги выдавать когда произошла отрисовка, то пользователь будет только то и делать что кликать "ОК".


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Grol
Дата 13.1.2007, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 5.5.2005
Где: Россия

Репутация: нет
Всего: нет



Спасибо всем тем кто принимает обсуждение в вопросе smile Alexeis я конечно же воспользовался бы обработчиком onPaint, но в DBGrid'e нет такого события.... Что тогда делать?

Добавлено @ 20:25 
А может я просто слеп как крот  smile  подскажите тогда как и где его найти.....
--------------------
Живи так, как будто тебе предстоит умереть завтра...Учись так, как будто тебе предстоит жить вечно.........
PM MAIL ICQ   Вверх
Sunvas
Дата 13.1.2007, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Цитата(Grol @  13.1.2007,  20:24 Найти цитируемый пост)
но в DBGrid'e нет такого события.... Что тогда делать?

Самостоятельно ловить это сообщение и что-то делать.

Добавлено @ 20:31 
Ща. Набросаю.


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Sunvas
Дата 13.1.2007, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids;

type
  TForm1 = class(TForm)
    s: TStringGrid;
    procedure FormCreate(Sender: TObject);
  private
  procedure Newwnd(var Msg:TMessage);
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
var
  Oldwnd : TWndMethod;
procedure TForm1.FormCreate(Sender: TObject);
begin
oldwnd:=s.WindowProc;
s.WindowProc:=newwnd;
end;

procedure TForm1.Newwnd(var Msg: TMessage);
begin
  case msg.Msg of
    wm_paint: //твое действие
   end;
   Oldwnd(Msg);
end;

end.


Это сообщение отредактировал(а) Sunvas - 13.1.2007, 20:47


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Grol
Дата 13.1.2007, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 5.5.2005
Где: Россия

Репутация: нет
Всего: нет



Ага спасибо сейчас попробую!
--------------------
Живи так, как будто тебе предстоит умереть завтра...Учись так, как будто тебе предстоит жить вечно.........
PM MAIL ICQ   Вверх
Sunvas
Дата 13.1.2007, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Отпишись, когда все сделаешь.


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
bems
Дата 14.1.2007, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



Цитата(Sunvas @  13.1.2007,  12:28 Найти цитируемый пост)
будет только то и делать что кликать "ОК". 
Вроде да, ожидать этого было бы логично...



--------------------
Обижено школьников: 8
PM MAIL   Вверх
Grol
Дата 15.1.2007, 07:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 5.5.2005
Где: Россия

Репутация: нет
Всего: нет



Sunvas все получилось что я хотел! Спасибо! А как в этом коде 
Код

procedure TForm1.Newwnd(var Msg: TMessage);
begin
  case msg.Msg of
    wm_paint: //твое действие
   end;
   Oldwnd(Msg);
end;

узнать от какого компонента поступило сообщение?

То есть на форме у меня несколько StringGridov. И мне нужно узнать какой компонент сейчас отрисовывается? Если бы у msg было такое свойство бы parent или owner, а то ничего же нет. Извините за мои глупые вопросы!
--------------------
Живи так, как будто тебе предстоит умереть завтра...Учись так, как будто тебе предстоит жить вечно.........
PM MAIL ICQ   Вверх
Alexeis
Дата 15.1.2007, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



  Если действия разные, то логично делать разные обработчики для каждого из компонентов. Иначе прийдется искать нужный компонент в списке, а это лишнее процессорное время.

  Одно замечание. После замены функции обработки сообщений, нельзя будет уже производить определенных действий с самим StringGrid ом. Я имею ввиду те действия которые приводят к пересозданию его окна, потому что пересозданное окно будет иметь уже старый обработчик, а новый попросту не будет вызываться.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
MetalFan
Дата 15.1.2007, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Цитата(Alexeis @  15.1.2007,  10:41 Найти цитируемый пост)
После замены функции обработки сообщений, нельзя будет уже производить определенных действий с самим StringGrid ом. Я имею ввиду те действия которые приводят к пересозданию его окна, потому что пересозданное окно будет иметь уже старый обработчик, а новый попросту не будет вызываться

судя по генетическому коду пересозадние окна в случае наследника от TControl никак не повлияет на вызов WindowProc.
ибо она вызывается в коде 
procedure TWinControl.MainWndProc(var Message: TMessage);

видимо путаешь с SetWindowLong?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Sunvas
Дата 15.1.2007, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Цитата(Grol @  15.1.2007,  07:54 Найти цитируемый пост)
узнать от какого компонента поступило сообщение?

А что проверять-то? От какому компоненту присвоил - тому и пренадлежит.
Цитата(Sunvas @  13.1.2007,  20:46 Найти цитируемый пост)
s.WindowProc:=newwnd;

Если же хочется сделать универсальную процедуру для всех - то WindowProc не выход. Надо либо экспериментировать с SetWindowLong, или писать наследника.


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Alexeis
Дата 15.1.2007, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(MetalFan @  15.1.2007,  12:22 Найти цитируемый пост)
судя по генетическому коду пересозадние окна в случае наследника от TControl никак не повлияет на вызов WindowProc.
ибо она вызывается в коде 


Гм... сам не лазил, но где-то читал, сейчас никак не могу найти где  smile . Разве при пересоздании окна метод обработки сообщений не назначается заново?


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0616 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.