私が取り組んでいるプロジェクトは、数百のフォームで構成されています。 これらは主にメインフォームから呼び出されます。アプリケーション名はformcaptionsのすべてにあります。フォームの作成をキャッチしよう
アプリケーションの別のバージョンでは、フォームキャプションを別のアプリケーション名に変更する必要があります。しかしこれは条件付きです。私はformcreateで
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はここで助けなかった。 これはやっかいなやり方です。
私が本当に望むのは、アクティブ化の代わりにサブフォームの作成を傍受することです。私はそれについてのリソースを見つけようとしましたが、成功しませんでした。
の再描画を強制的にDrawMenuBar API呼び出しを追加します。クラス。次に、すべてのフォームに共通の設定を1つの場所から制御できます –
詳しい調査の後、私はそれが何とかビデオバッファのバグだと思っています。ウィンドウをドラッグすると、キャプションは変わらず、間違ったままになります。それをドラッグしてデスクトップから脱落させない限り。それを元に戻すと、デクトップに表示されなかった部分が正しいキャプションに変更され、表示されている部分が間違ったままになります。 –