Пытаясь поймать создание формы - PullRequest
5 голосов
/ 07 марта 2012

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

Теперь в другой «версии» приложения необходимо изменить заголовки формы на другое имя приложения.Но это условно.

Я придумал связать

Screen.OnActiveFormChange := ScreenOnActiveFormChange;

в форме и создать для этого процедуру.

procedure TFormMAIN.ScreenOnActiveFormChange(Sender: TObject);
begin
  if Newversion then begin
    if assigned(screen.activeform) then begin
      Screen.ActiveForm.Caption := SwapFormCaption(Screen.ActiveForm.Caption);
    end;
  end;
end;

Это хорошо работаетв 95% случаев.Но в этих 5% форма показывается слишком быстро.Окно рисуется перед обновлением заголовка, и окна оставляют его там.Но заголовок уже имеет новое значение.То, что работало, это увеличивало и уменьшало высоту формы на 1 пиксель, и тогда оно показывалось бы правильно.form.repaint здесь не помог.Это довольно уродливый способ делать вещи.

Что я действительно хочу, так это перехватить создание субформы вместо активации.Я пытался найти ресурсы об этом, но безуспешно.

1 Ответ

0 голосов
/ 07 марта 2012

Вы пытались использовать окно api?

SetWindowText(Screen.ActiveForm.Handle,PChar(SwapFormCaption(Screen.ActiveForm.Caption));

Редактировать: еще 1 предложение: добавить вызов API DrawMenuBar для принудительной перерисовки строки меню окна

DrawMenuBar(Screen.ActiveForm.Handle);
...