Autor Beitrag
delphijanka
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 151

WinXP
D 2009 Arc., Java, C
BeitragVerfasst: 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



BeitragVerfasst: Fr 04.09.09 11:25 
So vielleicht?
ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: Fr 04.09.09 13:23 
user profile iconDeddyH hat folgendes geschrieben Zum zitierten Posting springen:
So vielleicht?
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 151

WinXP
D 2009 Arc., Java, C
BeitragVerfasst: Fr 04.09.09 13:54 
user profile iconAndreas L. hat folgendes geschrieben Zum zitierten Posting springen:
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 user profile iconNarses: Zitat kenntlich gemacht.
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 04.09.09 14:32 
Ich habe die Funktion unter Vista geschrieben, da war von einem Farbverlauf aber nichts zu entdecken.
Andreas L.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: 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



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 151

WinXP
D 2009 Arc., Java, C
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: Fr 04.09.09 16:55 
user profile icondelphijanka hat folgendes geschrieben Zum zitierten Posting springen:
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:
ausblenden Delphi-Quelltext
1:
aCanvas.Pixels[5,5];					
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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



BeitragVerfasst: Fr 04.09.09 19:21 
Auch GetSysColor dürfte keine Farbverläufe zurückgeben.
delphijanka Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 151

WinXP
D 2009 Arc., Java, C
BeitragVerfasst: 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



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 151

WinXP
D 2009 Arc., Java, C
BeitragVerfasst: 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



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 151

WinXP
D 2009 Arc., Java, C
BeitragVerfasst: 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.