Il progetto su cui lavoro consiste di diverse 100 forme. Sono principalmente chiamati dalla mainform. Il nome dell'applicazione è in tutte le formcaptions.Tentativo di catturare il oncreate di un modulo
Ora una diversa "versione" dell'applicazione deve avere le didascalie del modulo modificate in un altro nome applicazione. Ma questo è condizionale.
Quello che mi è venuta è stata vincolante il
Screen.OnActiveFormChange := ScreenOnActiveFormChange;
nel FormCreate e fare una procedura per questo.
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;
Questo funziona bene nel 95% dei casi. Ma in quei 5% la forma è mostrata troppo veloce. La finestra viene disegnata prima che la didascalia venga aggiornata e Windows la lascia lì. Ma la didascalia ha già un nuovo valore. Quale rimedio funzionante stava aumentando e diminuendo l'altezza del modulo di 1 pixel e poi si sarebbe mostrato giusto. form.repaint non ha aiutato qui. Questo è un modo piuttosto brutto di fare le cose.
Quello che voglio veramente è intercettare la creazione della sotto-form invece dell'attivazione. Ho cercato di trovare risorse in merito, ma non ha avuto successo.
Il modo migliore per farlo è quello di rendere tutti i vostri moduli derivano da una base comune classe. Quindi puoi controllare le impostazioni comuni a tutti i moduli da una singola posizione –
Dopo ulteriori indagini, penso che sia in qualche modo un bug di videobuffer. Quando trascino la finestra, la didascalia non cambia e rimane errata. A meno che non lo trascino per scivolare fuori dal desktop. Quando lo trascino indietro, la parte che non è stata mostrata sul dekstop viene modificata nella didascalia corretta mentre la parte rimasta visibile rimane errata. –