Autor Beitrag
hRb
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 271
Erhaltene Danke: 12



BeitragVerfasst: Mi 16.11.22 18:02 
Sorry, wenn ich schon wieder Fragen stelle und Euer Wissen anzapfe.
Habe eine Anwendung: auf zwei Panels liegen je ein Stringgrid und ein Listview. Damit am Bildschirm die Anwendung nicht so "blendet", möchte ich alle Hintergrundfarben der Objekte dunkler setzen. Dies gelingt bei allen Objekten, nur nicht beim Grid, d.h bei Stringgrid (Color-Standard = clWindows) bleibt das Setzen auf eine andere Farbe wirkungslos. Habe auch schon das Panel gefärbt und in Stringgrid ParentColor auf true gesetzt. Nutzt alles nichts.
Es geht also nicht ums Einfärben von Zeilen oder Zellen (das kann ich). Ich will den Hintergrund ändern. Warum funktioniert das nicht, bzw wie geht dies?
PS1: auch Stringgrid1.Brush.Color:= clSilver; läuft ins Leere
PS2: Fürs Mainmenu habe ich auch noch keine Lösung, da gibts den Parameter Color überhaupt nicht.
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8541
Erhaltene Danke: 475

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 16.11.22 18:48 
Im Zweifel alles selber Zeichnen. Das StringGrid nutze ich selbst nicht, aber da würde ich spontan auch im OnDrawCell ansetzen. Das scheint ja aber nicht auszureichen. Ist der Wechsel auf eine andere Komponente eine Option? Z.B. der VirtualStringTree?

Wenn du auch andere Komponenten nicht im Windows-Stil zeichnen lassen willst (MainMenu, Scrollbars, Buttons, ...), dann könntest du das ggf. mit VCL-Styles lösen - zumindest in den neueren Delphi-Versionen. In der aktuellen Community-Edition sind die schon recht brauchbar.

Oder halt OwnerDraw des Menüs auf True und die einzelnen MenuItems selber malen ...

_________________
We are, we were and will not be.
hRb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 271
Erhaltene Danke: 12



BeitragVerfasst: Do 17.11.22 14:11 
Upps, das ist jetzt alles ein wenig zu viel:
1. Blenden wir zunächst das Thema Menüleiste noch einmal aus. Das könnte man tatsächlich auch selbst zeichnen, es ist aber ja nur ein schmaler Streifen und kann akzeptiert werden.
2. Bleiben wir beim Stringgrid:
Zitat:
Das scheint ja aber nicht auszureichen. Ist der Wechsel auf eine andere Komponente eine Option? Z.B. der VirtualStringTree?

Dieses Objekt ist in VCL-Delphi 10.4 bei mir nicht zu finden - auch nicht in der Hilfe. Weiß also nicht, was es genau macht und ob es meine Aufgabe ersetzen kann. Meine Anwendung ist ein Tool zum Sortieren und Umbenennen von Dateien sowie zur Anzeige von Bildern als Diashow (screenfüllend, optional ohne Formrand und ohne Taskleiste). Im Stringgrid werden die Dateien angezeigt: lfd.Nr, Marke, DateiName-Alt, Suffix, Dateiname-Neu, Datum, Länge, Pfad. Zum Sortieren kann ich die Bilder entweder in der Stringlist verschieben oder in der Listview - die jeweils synchron gehalten werden. So weit so gut. Es geht also "nur" ums Einfärben. Würde ungern das gesamte Programm auf den Kopf stelllen, nur um Stringgrid gegen ein mir unbekanntes Objekt zu tauschen.
3.
Zitat:
da würde ich spontan auch im OnDrawCell ansetzen.
Das OnDrawCel-Ereignis erscheint mir ungeeignet. Spricht nur bei Klick auf eine Zelle an und liefert auch nur ACol und ARow (also die Zelle). Ich will das gesamte Objekt umfärben. Und da es standardmäßig ja eine Variable Color gibt, fehlt vielleicht nur noch irgendwo ein Häkchen.
4.
Zitat:
dann könntest du das ggf. mit VCL-Styles lösen
das klingt noch interessant.
Unter Projekt/Optionen/Erscheinungsbild finden sich zahlreiche Stiles. Probiere schon ne knappe Stunde. Ist nicht ganz einfach, weil alle Stile mit Namen besetzt sind. Man muss jedesmal neu compilieren, das Programm starten, um das Ergebniss zu sehen. Und es wirkt sich auf die Form, das Menü und auf die Objekte unterschiedlich aus. Vielleicht werde ich hier fündig, weil sich damit auch die Menüleiste umfärbt. Erste Erkenntniss allerdings: meine Stringgrid-Farbe wird entweder black oder clWindows eine "Zwischenfarbe" stellt sich nicht ein.

Na ja, vielleicht kommt ja noch etwas. Erstmals Danke.
mandras
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 430
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: Do 17.11.22 16:03 
Ich habe nur oberflächlich geschaut, Color wirkt sich standardmäßig anscheinend nicht aus, erst wenn man Drawing Style auf gdsClassic ändert wird der Wert verwendet (D11).

Moderiert von user profile iconTh69: Delphi-Tags hinzugefügt
hRb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 271
Erhaltene Danke: 12



BeitragVerfasst: Do 17.11.22 16:47 
Ja super, das ist es doch. Mandras vielen Dank.
Übrigens: Unter Erscheinungsbild Variable auf Windows10 State Gray setzen ist auch ganz pfiffig. Problem dabei ist nur, dass Grafiken in Speedbottens ggf neu gezeichnet werden müssen, weil Symbole sich natürlich nicht invers färben.