Delphi: возможно ли в событии OnFormShow указать, чтобы форма не отображалась даже в течение миллисекунды? - PullRequest
0 голосов
/ 22 августа 2011

В событии OnFormShow мне нужно (для определенного набора условий) не показывать форму.

Что-то вроде "если счетчик> 15 не показывает форму".

Конечно, я мог бы реорганизовать и перенести многие вещи в создание форм, но это большая работа, потому что это обычная форма и слишком много изменений.

Теперь я закрываю форму в конце OnFormShow, но в любом случае вижу, что форма появляется на несколько миллисекунд.

К сожалению, условие, которое говорит мне не показывать форму, определяется внутри OnFormShow. Есть ли хитрость, чтобы избежать показа формы?

Ответы [ 3 ]

9 голосов
/ 22 августа 2011

Измените код, чтобы он вообще не отображался, пока вы не будете готовы.Либо воздержитесь от вызова Show, либо установите Visible в False, если вы еще этого не сделали.

Я подозреваю, что к тому времени, когда вы достигнете OnShow, будет слишком поздно, но даже если это будет сделано, это будет указывать на плохой дизайн.Перемещение кода из OnShow в другой метод на самом деле не должно вызывать особых затруднений.

6 голосов
/ 22 августа 2011

+ 1 при рефакторинге, но в то же время попробуйте это:

AlphaBlend: = true;

AlphaBlendValue: = 0;

Это должно сделатьФорма невидима и, похоже, работает в моем тестовом приложении OnShow (D2010 / XP).Я полагаю, вам нужно добавить код для закрытия формы, возможно, таймер?

4 голосов
/ 22 августа 2011

Очень плохое решение сделать

procedure TForm1.FormShow(Sender: TObject);
begin
  inc(n);
  if n > 15 then
  begin
    Left := Screen.DesktopWidth + 32;
    Top := Screen.DesktopHeight + 32;
    PostMessage(Handle, WM_CLOSE, 0, 0);
  end;
end;
...