Вопрос
1. Всегда ли при вызове метода фрмы Show у нее возникает событие OnShow?(Пишу прогу, которая сидит в трее и што-то делает, а по DoubleClick-у вызывается метод Show, который выводит форму с настройками. Так вот после старта первый DoubleClick все делает нормально, а после Закрытия формы
begin
Action := caNone;
ShowWindow (Handle, sw_Hide);
end;
и повторного DoubleClick-а события OnShow не происходит ( У меня там обновление отображаемых данных) и в результате все Label-ы, Edit-ы, ListBox-ы и ComboBox-ы получаются чиствми-пречистыми. По моему что-то тут не в порядке. Это я конечно вылечил — перед Show я вызываю свою процедуру, в которой все, что было в OnShow, но это наверное не совсем правильно. Подскажите, в чем тут дело?
Ответ
На новой форме написал такую штуку
procedure TForm1.FormClick(Sender: TObject); begin ShowWindow(Handle, SW_HIDE); ShowMessage('Visible: '+BoolToStr(Visible)); end;
Так вот она выдает, что Visible=true. Поэтому и не генерится OnShow — форма-то думает, что она видима! Решение простое:
Используйте либо только ShowWindow, либо только пару Show/Hide. Например, вместо ShowWindow(Handle, SW_HIDE) вызывайте Hide. Или вместо Show вызывайте ShowWindow(Handle, SW_SHOW). Использование Show/Hide, по-моему, предпочтительнее, т.к. будут вызываться OnShow/OnHide, да и Visible будет иметь правильное значение. Иначе придется использовать IsWindowVisible…
Из конференции Expert_FAQ
Copyright 2000-2004 Сообщество Чайников
Контактная информация