Autor Beitrag
Ruditschka
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: Mi 21.04.04 10:40 
Hallo!

Ich habe ein Fenster, dessen Hintergrundfarbe der Benutzer selbst wählen darf. Wenn dabei die Labels immer grau hinterlegt bleiben sieht das einfach ziemlich komisch aus. Daher meine Frage:

Wie kann ich die Hintergrundfarbe eines Labels (STATIC) ändern?

Christoph
iGoA
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 103

Alle Win´s
D5 Prof
BeitragVerfasst: Mi 21.04.04 10:49 
Nehme TLabel statt TStaticText. TLabel hat ne Eigenschaft Transparent womit Du Dein Problem löst.
Ruditschka Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: Mi 21.04.04 10:58 
Ich bin im Moment dabei mich ein bischen mit der Win-API bzw. non-VCL Programmierung zu beschäftigen. Da gibt es weder TLabel noch TStaticText.

Die Fensterklasse, in der die Labels drinstecken heißt dabei STATIC.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 21.04.04 11:24 
Ich verweise mal auf Luckies Programme. Er hat in einigen davon im oberen Teil einen weißen Header, den er wie folgt färbt:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
var
  whitebrush   : HBRUSH = 0;
  WhiteLB      : TLogBrush = (
    lbStyle:BS_SOLID;
    lbColor:$00FFFFFF;
    lbHatch:0; );

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
    WM_CTLCOLORSTATIC:
      if(GetDlgCtrlId(lp) = IDC_STCTITLE1) then begin
        whitebrush := CreateBrushIndirect(WhiteLB);
        SetBkColor(wp, WhiteLB.lbColor);
        Result     := BOOL(whitebrush);
      end;

Musst mal schauen was du damit anfangen kannst. ;)
Ruditschka Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: Mi 21.04.04 17:13 
So wie ich das sehe müsste es mit folgendem Code funktionieren:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
hProfileBtn[i] := CreateWindow('STATIC', PChar(@s[1]),
                    WS_VISIBLE or WS_CHILD or SS_NOTIFY or SS_CENTER,
                    (GetSystemMetrics(SM_CXSCREEN) div 2) + x - (ButtonWidth div 2),
                    (GetSystemMetrics(SM_CYSCREEN) div 2) + y - (ButtonHeight div 2),
                    ButtonWidth, ButtonHeight, hWnd, (10 * i) + IDC_BTN_PROFILE,
                    hInstance, nil);
SetBkColor(GetDC(hProfileBtn[i]), RGB(00255));

Macht er aber nicht...

Wenn ich den letzten Aufruf (SetBkColor...) aufschlüssele und mir die Rückgabewerte ausgeben lasse, sind alles "normale" Werte (keine Fehlerangaben). Das einzige was mich stutzig macht, ist die Rückgabe von SetBkColor. Laut PSDK wird die alte Farbe zurückgegeben. Als Rückgabe kommt immer dezimal 16.777.215 (hex $00.FF.FF.FF). Das entspricht aber in keinster Weise dem Farbcode für das schnöde Windows-Grau (Standardhintergrund).

Muss ich dem STATIC-Window vorher noch etwas mitteilen?
Ach ja, BackgroundMode ist OPAQUE. Mit TRANSPARENT klappt's auch nicht.