![]() |
Theming / CommonControls - Geht es auch teilweise?
Es ist etwas verrückt, ich gebe es zu.
Ich habe eine VCL-Anwendung die sehr mutig ist. Sie verschiebt beispielsweise Komponenten (wie Labels und Buttons) im
Delphi-Quellcode:
-Handler des Formulars. Das ist nicht richtig so, ich weiß. Damit das alles funktioniert, muss man in den Delphi-Projektoptionen unter "Laufzeit-Themes" "Keine" anwählen. Damit hat man diese Windows 2000-Optik, aber das ist ok.
OnPaint
Schaltet man die Themes ein, funktioniert gar nichts mehr: Das Verschieben von Komponenten löst den OnPaint-Handler wieder aus und die gesamte Anwendung hängt oder zeichnet sich sehr komisch. Soweit, so gut. Ich möchte nun allerdings ein neues Formular hinzufügen. Eins mit Themes, wo alles toll aussehen soll. Geht das, ohne generell Themes einzuschalten? Ich finde nur, wie man Themes für einzelne Controls wieder deaktivieren kann. Aber das hilft mir nicht, da stapeln sich die OnPaint-Handler weiterhin. Die Anwendung läuft nurwenn kein Common Controls 6-Eintrag im Manifest ist. Also man in den Projektoptionen "Keine Themes" angewählt hat. Was kann ich jetzt noch tun? |
AW: Theming / CommonControls - Geht es auch teilweise?
Du kannst im Programm nur eine COMCTL32.DLL verwenden. Durch das Manifest bestimmst du, welche es sein soll. Meines Wissens kann man das nicht mischen.
|
AW: Theming / CommonControls - Geht es auch teilweise?
Warum machst Du so was komisches?
Willst Du Labels anhand eines Bitmaps positionieren oder so? Vielleicht finden wir ja einen besseren Ansatz? Ein Problem, das ich früher hatte: Panel.Left := Panel.Left; hat eine Neuzeichnung ausgelöst. Also habe ich vorher auf Gleichheit geprüft und nur bei Ungleichheit neu zugewiesen. Vielleicht bringt Dich das ja irgendwie weiter. |
AW: Theming / CommonControls - Geht es auch teilweise?
Ich mache das nicht- Als der Code geschrieben wurde bin ich (ernsthaft) noch in die Grundschule gegangen.
Ich suche nur verzweifelt nach einer Möglichkeit noch etwas billig dranzustricken ohne die OnPaint-Handler von Dutzenden Formularen entwirren zu müssen. Denn sonst wird das schon wieder nichts mit Urlaub nehmen :pale: Noch bin ich nicht verzweifelt genug die neuen Formulare in eine gesonderte DLL auszulagern. Das geht bestimmt... |
AW: Theming / CommonControls - Geht es auch teilweise?
Kannst du nicht sowas machen?
Delphi-Quellcode:
Soll jetzt eher Pseudocode sein, habe lange nichts mit Delphi gemacht. Wenn es sehr viele Stellen sind und man nicht alle einzeln ändern will, könnte man auch
TBaseForm = class(TForm)
protected FRepaintDisabled: Boolean; procedure DoPaint; override; public procedure DisableRepaints; procedure EnableRepaints; end; procedure TBaseForm.DisableRepaints; begin FRepaintDisabled := True; end; procedure TBaseForm.EnableRepaints; begin FRepaintDisabled := True; end; procedure TBaseForm.DoPaint; begin if not FRepaintDisabled then inherited DoPaint; end; --------------------------------------------- procedure TMyForm.FormPaint(Sender: TObject); begin // bla bla bla ... DisableRepaints; Button1.Left := Button1.Left + 1; EnableRepaints; // bla bla bla ... end;
Delphi-Quellcode:
versuchen. Könnte natürlich ungewollte Seiteneffekt haben.
procedure TBaseForm.DoPaint;
begin if not FRepaintDisabled then begin DisableRepaints; inherited DoPaint; EnableRepaints; end; end; |
AW: Theming / CommonControls - Geht es auch teilweise?
Man kann die neuen CC verwenden, aber das Theming für alle/einzelne Controls deaktivieren.
Grundantwort: Im OnPaint darf niemals die "Anzeige", bzw. Komponenteneigenschaften verändert werden, vorallem nichts permanent immer wieder. Außer indem man selber das Zeichnen übernimmt und nur im Gezeichneten variiert. |
AW: Theming / CommonControls - Geht es auch teilweise?
Zitat:
Wem das nicht so geht hat vermutlich in den Jahren nix gelernt. Zitat:
Zitat:
|
AW: Theming / CommonControls - Geht es auch teilweise?
|
AW: Theming / CommonControls - Geht es auch teilweise?
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz