AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Theming / CommonControls - Geht es auch teilweise?
Thema durchsuchen
Ansicht
Themen-Optionen

Theming / CommonControls - Geht es auch teilweise?

Ein Thema von Der schöne Günther · begonnen am 25. Feb 2016 · letzter Beitrag vom 26. Feb 2016
Antwort Antwort
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Theming / CommonControls - Geht es auch teilweise?

  Alt 25. Feb 2016, 19:00
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 OnPaint -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.

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?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.001 Beiträge
 
Delphi 12 Athens
 
#2

AW: Theming / CommonControls - Geht es auch teilweise?

  Alt 25. Feb 2016, 19:05
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Theming / CommonControls - Geht es auch teilweise?

  Alt 25. Feb 2016, 19:36
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.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Theming / CommonControls - Geht es auch teilweise?

  Alt 25. Feb 2016, 19:39
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

Noch bin ich nicht verzweifelt genug die neuen Formulare in eine gesonderte DLL auszulagern. Das geht bestimmt...
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Theming / CommonControls - Geht es auch teilweise?

  Alt 25. Feb 2016, 20:14
Kannst du nicht sowas machen?

Delphi-Quellcode:
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;
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
Delphi-Quellcode:
procedure TBaseForm.DoPaint;
begin
  if not FRepaintDisabled then
  begin
    DisableRepaints;
    inherited DoPaint;
    EnableRepaints;
  end;
end;
versuchen. Könnte natürlich ungewollte Seiteneffekt haben.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.121 Beiträge
 
Delphi 12 Athens
 
#6

AW: Theming / CommonControls - Geht es auch teilweise?

  Alt 26. Feb 2016, 01:43
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (26. Feb 2016 um 01:50 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Theming / CommonControls - Geht es auch teilweise?

  Alt 26. Feb 2016, 06:07
Ich mache das nicht- Als der Code geschrieben wurde bin ich (ernsthaft) noch in die Grundschule gegangen.
Und? Jeder hat mal angefangen und weiß es nach Jahren besser.
Wem das nicht so geht hat vermutlich in den Jahren nix gelernt.

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
Vieleicht wurde es die letzten Male nix mit Urlaub nehmen weil du versuchst immer was billig dranzustricken statt es mal richtig umzuschreiben.[/QUOTE]

Noch bin ich nicht verzweifelt genug die neuen Formulare in eine gesonderte DLL auszulagern. Das geht bestimmt...
Wieso sollte es das sein?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#8

AW: Theming / CommonControls - Geht es auch teilweise?

  Alt 26. Feb 2016, 07:05
Vielleicht mit MSDN-Library durchsuchenSetWindowTheme?
http://www.delphipraxis.net/287158-post8.html
Uli Gerhardt
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Theming / CommonControls - Geht es auch teilweise?

  Alt 26. Feb 2016, 09:20
Danke, sehr hilfreich.

Damit sieht zwar alles wieder "alt" aus, aber aufhängen tut es sich leider immer noch

Geändert von Der schöne Günther (26. Feb 2016 um 09:25 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz