Autor |
Beitrag |
delphijanka
      
Beiträge: 151
WinXP
D 2009 Arc., Java, C
|
Verfasst: Fr 04.09.09 10:56
Hello.
Bei PageControl wird standartmäßig eine Farbe benutzt, die man so direkt in der Farben-Palette von Delphi nicht auswählen kann. Die Farbe erhalt auch die aktive Tab des Pagecontrols. Diese Farbe ist je nach style anders - und die muss ich irgendwie auslesen. Weiss jemand die entsprechende API-Funktion dafür?
Danke.
Zuletzt bearbeitet von delphijanka am Fr 04.09.09 16:25, insgesamt 1-mal bearbeitet
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 04.09.09 11:25
So vielleicht?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| function GetPageControlColor(const pg: TPageControl): TColor; var aDC: hDC; aCanvas: TCanvas; begin Result := clBlack; aDC := GetWindowDC(pg.Handle); if aDC <> 0 then try aCanvas := TCanvas.Create; try aCanvas.Handle := aDC; Result := aCanvas.Pixels[5,5]; finally aCanvas.Free; end; finally ReleaseDC(pg.Handle,aDC); end; end; |
|
|
Andreas L.
      
Beiträge: 1703
Erhaltene Danke: 25
Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
|
Verfasst: Fr 04.09.09 13:23
|
|
delphijanka 
      
Beiträge: 151
WinXP
D 2009 Arc., Java, C
|
Verfasst: Fr 04.09.09 13:54
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 04.09.09 14:32
Ich habe die Funktion unter Vista geschrieben, da war von einem Farbverlauf aber nichts zu entdecken.
|
|
Andreas L.
      
Beiträge: 1703
Erhaltene Danke: 25
Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
|
Verfasst: Fr 04.09.09 14:42
Ja, hab mich getäuscht, unter Vista gibts keinen Verlauf. Aber unter XP: www.bychoice.com/windows_xp_theme.jpg RGB(252,252,254) > RGB(244,243,238)
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 04.09.09 14:50
Na gut, aber besonders extrem ist der nicht. Es kommt halt darauf an, wozu man die Farbe braucht, vielleicht kann man ja auch den Bereich, auf den es ankommt, aus dem Canvas herauskopieren. Aber ohne den Zweck der Übung zu kennen, kann man da nicht viel dazu sagen.
|
|
delphijanka 
      
Beiträge: 151
WinXP
D 2009 Arc., Java, C
|
Verfasst: Fr 04.09.09 16:30
Schaut mal das Bild von Andreas L.:
Die Panel, auf der sich der Pfeil ist bzw der Text "A theme is a background..." - genau diese Farbe brauche ist - also etwas denkler als weiß. Wie kann ich diese ermitteln?
|
|
Andreas L.
      
Beiträge: 1703
Erhaltene Danke: 25
Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
|
Verfasst: Fr 04.09.09 16:55
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 04.09.09 19:14
Ich nehme einmal an der vorgesehene Weg über GetSysColor funktioniert auch, auch wenn ich jetzt die Liste nicht näher angeschaut habe:
msdn.microsoft.com/e...ibrary/ms724371.aspx
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 04.09.09 19:21
Auch GetSysColor dürfte keine Farbverläufe zurückgeben.
|
|
delphijanka 
      
Beiträge: 151
WinXP
D 2009 Arc., Java, C
|
Verfasst: Di 08.09.09 13:58
Ich habe alle Konstanten dort ausprobiert, und keine Farbe passt.
Ich verdeutliche noch mal: ich brauche die Farbe der Fläche des aktiven Tabs im PageControl.
Danke, dass ihr mir hilft.
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 08.09.09 14:24
Und was passt Dir an meinem Code nicht? Du kannst die Koordinaten ja noch anpassen (z.B. auf die Mitte des Tabsheets).
|
|
delphijanka 
      
Beiträge: 151
WinXP
D 2009 Arc., Java, C
|
Verfasst: Mi 09.09.09 14:45
@Deddy:
Warum bekomme ich mit deiner Funktion die schwarze Farbe, obwohl meine Tabs grau-blau sind?
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 09.09.09 14:52
Das kann ich Dir aus der Ferne auch nicht sagen. Bist Du einmal durchgesteppt, um zu sehen, wo die Funktion evtl. aussteigt? Übrigens kannst Du den Funktionskopf von TPageControl auf TTabSheet ändern und dann das aktive Tabsheet übergeben.
|
|
delphijanka 
      
Beiträge: 151
WinXP
D 2009 Arc., Java, C
|
Verfasst: Mo 28.09.09 15:32
Ich habe das Problem hinbekommen:
Das Ablesen der Farbe soll frühestens bei OnActivate stattfinden, weil die Farbe der PageControl-Componente von schwarz zu weiss/hellblau erst nach OnShow aktualisiert wird. Ich habe bei OnActivate sogar noch "Refresh" vor dem Ablesen der Farbe aufgerufen, weil sonst die Farbe falsch ist.
|
|