Entwickler-Ecke
Windows API - PageControl: Color aus Windows
delphijanka - Fr 04.09.09 10:56
Titel: PageControl: Color aus Windows
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.
Delete - 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. - Fr 04.09.09 13:23
DeddyH hat folgendes geschrieben : |
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; | |
Aber unter XP/Vista/7 mit aktivierten Themes ist auf dem PageControl ein Farbverlauf zu sehen. Je nachdem für was der Code gebraucht wird, reicht diese eine Farbe evtl. nicht aus. Was genau will du (delphijanka) denn mit der Farbe machen?
delphijanka - Fr 04.09.09 13:54
Andreas L. hat folgendes geschrieben : |
| Aber unter XP/Vista/7 mit aktivierten Themes ist auf dem PageControl ein Farbverlauf zu sehen. Je nachdem für was der Code gebraucht wird, reicht diese eine Farbe evtl. nicht aus. Was genau will du (delphijanka) denn mit der Farbe machen? |
Ich habe leider kein Vista, kannst du bitte ein Screenshot machen, wie es mit dem Farbverlauf aussieht? Ich wäre echt dankbar. Denn dadurch würden sich vlcht die Anforderungen an mich ändern bzw ich einen anderen Lösungsweg nehmen würde.
Moderiert von
Narses: Zitat kenntlich gemacht.
Delete - Fr 04.09.09 14:32
Ich habe die Funktion unter Vista geschrieben, da war von einem Farbverlauf aber nichts zu entdecken.
Delete - 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 - 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. - Fr 04.09.09 16:55
delphijanka hat folgendes geschrieben : |
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? |
Sollte mit DeddyHs Code klappen, evtl. die Koordinaten noch ein bisschen anpassen:
Delete - Fr 04.09.09 19:21
Auch GetSysColor dürfte keine Farbverläufe zurückgeben.
delphijanka - 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.
Delete - 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 - Mi 09.09.09 14:45
@Deddy:
Warum bekomme ich mit deiner Funktion die schwarze Farbe, obwohl meine Tabs grau-blau sind?
Delete - 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 - 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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!