Projekt, nad którym pracuję składa się z kilku 100 formularzy. Są one najczęściej wywoływane z formuły głównej. Nazwa aplikacji znajduje się we wszystkich formcaptions.Próbujesz złapać powstanie formularza
Teraz inna "wersja" aplikacji musi mieć podpisy formularza zmienione na inną nazwę aplikacji. Ale to jest warunkowe.
Co wymyśliłem było związanie
Screen.OnActiveFormChange := ScreenOnActiveFormChange;
w formcreate i czyni procedurę tym.
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;
Działa to dobrze w 95% przypadków. Ale w tych 5% forma jest pokazywana zbyt szybko. Okno zostanie narysowane przed aktualizacją napisu, a okna pozostaną tam. Ale podpis ma już nową wartość. Co pracowało remedium zwiększało się i zmniejszało wysokość formularza o 1 piksel, a następnie wyświetlało się poprawnie. form.repaint nie pomogło tutaj. To jest dość brzydki sposób robienia rzeczy.
Tym, czego naprawdę chcę, jest przechwycenie utworzenia podformularza zamiast aktywacji. Próbowałem znaleźć informacje na ten temat, ale nie udało mi się.
Najlepszym sposobem, aby to zrobić jest, aby wszystkie formy wywodzą się ze wspólnej podstawy klasa. Następnie możesz kontrolować ustawienia wspólne dla wszystkich formularzy z jednego miejsca. –
Po dalszych badaniach uważam, że jest to jakaś awaria robota wideo. Kiedy przeciągam okno, podpis nie zmienia się i pozostaje nie tak. Chyba że go przeciągnę, żeby zsunąć się z pulpitu. Kiedy przeciągnę to z powrotem, część, która nie została pokazana w dekstop, zmieni się na prawidłowy napis, podczas gdy część, która pozostała widoczna, pozostanie błędna. –