AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) nonVCL TabControl Hintergrundfarbe ändern
Thema durchsuchen
Ansicht
Themen-Optionen

nonVCL TabControl Hintergrundfarbe ändern

Ein Thema von lbccaleb · begonnen am 23. Feb 2011 · letzter Beitrag vom 24. Feb 2011
Antwort Antwort
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#1

AW: nonVCL TabControl Hintergrundfarbe ändern

  Alt 23. Feb 2011, 20:38
Habe das Programm auch so nochmal getestet. Der weiße Hintergrund kommt erst nach dem Einfügen eines XP-Manifestes. Das kann man durch die Unit UxThemes unterbinden? Kenne mich mit der Unit leider gar nicht aus.
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: nonVCL TabControl Hintergrundfarbe ändern

  Alt 23. Feb 2011, 20:41
Habe das Programm auch so nochmal getestet. Der weiße Hintergrund kommt erst nach dem Einfügen eines XP-Manifestes. Das kann man durch die Unit UxThemes unterbinden? Kenne mich mit der Unit leider gar nicht aus.
Ja indem du das Handle des Tabs übergibst und NUR dafür die Theme ausschaltest.
So wie im Code gezeigt.

Da muss man sich nicht auskennen.
Initialisieren und das bißchen Code einfügen an der stelle wo du beim erstellen des Tabs die Farbe übergibst.
Nicht in der WinProc.

Hier mein Sample der Tooltips da hatte ich das gleiche Problem.
Dann kannst sehen wie ich das meine.


Delphi-Quellcode:
function CreateToolTip(hObj: HWND; Text: PChar): Integer;
var
  hTooltip: HWND;
  hParent: HWND;
  ti: TToolInfo;
  S_OK: HResult;
begin

  with SkinEngine do
  begin
    hParent := GetParent(hObj);
    hTooltip := ToolTipData(0, 0);

    ZeroMemory(@ti, SizeOf(TToolInfo));
    if hTooltip = 0 then
    begin
      InitComControls;
      StyleEx := 0;
      hTooltip := CreateWindowEx(StyleEx, TOOLTIPS_CLASS,
        nil, WS_POPUP or
        TTS_ALWAYSTIP, integer(CW_USEDEFAULT),
        integer(CW_USEDEFAULT), integer(CW_USEDEFAULT),
        integer(CW_USEDEFAULT),
        hParent, 0,
        skInstance, nil);
      if hTooltip <> 0 then
      begin
        // Ohne dem lassen sich die Farben der Tooltips
        // bei aktivierter Theme mit Manifest nicht verändern.
        S_OK := SetWindowTheme(hTooltip, '' , ''); // <<< Theme auschalten .. nur gültig für das übergebene Handle
        if S_OK = 0 then
        begin
          ToolTipData(hTooltip, 1);
          SplitColorARGB(SK_ACTIVECAPTION, Alpha, Red, Green, Blue); // <<< Neue Farbe
          SendMessage(hTooltip, TTM_SETTIPTEXTCOLOR, RGB(Red, Green, Blue), 0);
          SplitColorARGB(SK_INACTIVECAPTION, Alpha, Red, Green, Blue); // <<< Neue Farbe
          SendMessage(hTooltip, TTM_SETTIPBKCOLOR, RGB(Red, Green, Blue), 0);
          SendMessage(hTooltip, TTM_SETMAXTIPWIDTH, 0, 400);
        end;
      end;
    end;
    // Addiere den ToolTipText
    if hTooltip <> 0 then
    begin
      ti.cbSize := sizeof(ti);
      ti.hinst := skInstance;
      ti.uFlags := TTF_IDISHWND or TTF_SUBCLASS;
      ti.hWnd := hParent;
      ti.uId := hObj;
      SendMessage(hTooltip, TTM_ADDTOOL, 0, LParam(@ti));
      SetToolTipText(hObj, Text)
    end;
  end;
  Result := hTooltip;

end;
gruss

Geändert von EWeiss (23. Feb 2011 um 20:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: nonVCL TabControl Hintergrundfarbe ändern

  Alt 23. Feb 2011, 20:56
OK, Danke. Werde das mal ausprobieren.
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: nonVCL TabControl Hintergrundfarbe ändern

  Alt 23. Feb 2011, 22:11
OK, Danke. Werde das mal ausprobieren.
Ich hoffe du hast die GWL_STYLE auf TCS_OWNERDRAWFIXED gesetzt?
Das viel mir gerade noch ein.

gruss

Geändert von EWeiss (24. Feb 2011 um 03:13 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: nonVCL TabControl Hintergrundfarbe ändern

  Alt 24. Feb 2011, 03:30
Noch was gefunden
So ändern Sie die Hintergrundfarbe von einem Registerkarten-Steuerelement

Hier mal ein kleines Sample (ohne Quelltext)
Allerdings nur die TextFarbe im Tab geändert.
Und auf die schnelle in PB geschrieben.

Das Problem in Delphi es fehlen zu viele API's
Zum Beispiel!

TabCtrl_GetItem
könnte man so ermitteln
SendMessage(hwnd, TCM_GETITEM, iItem, @pItem)
War mir aber jetzt zu umständlich.



Delphi-Quellcode:
        CASE %WM_DRAWITEM
           LOCAL lDISPtr AS DRAWITEMSTRUCT PTR, zCap AS ASCIIZ * 50
           LOCAL ti AS TC_ITEM, TextDrawFlag AS LONG
 
           IF CBWPARAM = %ID_TAB THEN
              lDisPtr = CBLPARAM
 
              FillRect @lDisptr.hDc, @lDisptr.rcItem, GetSysColorBrush(%COLOR_3DFACE)
              @lDisptr.rcItem.nTop = @lDisptr.rcItem.nTop + 3
              IF @lDisPtr.ItemState = %ODS_SELECTED THEN
                 SetTextColor @lDisPtr.hDc, %BLUE
              ELSE
                 SetTextColor @lDisPtr.hDc, %BLACK
              END IF
              SetBkColor @lDisPtr.hDc, GetSysColor(%COLOR_3DFACE)
 
              ti.mask = %TCIF_TEXT
              ti.pszText = VARPTR(zCap)
              ti.cchTextMax = SIZEOF(zCap)
              CALL TabCtrl_GetItem(GetDlgItem(CBHNDL, %ID_TAB), @lDisptr.itemID, ti)
              DrawText @lDisptr.hDc, zCap, LEN(zCap), @lDisptr.rcItem, %DT_SINGLELINE OR %DT_CENTER
 
          END IF

gruss

Geändert von EWeiss ( 9. Jul 2019 um 08:32 Uhr)
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#6

AW: nonVCL TabControl Hintergrundfarbe ändern

  Alt 24. Feb 2011, 07:11
In der ganzen Diskussion vermisse ich die boolsche Eigenschaft "highlighted".
Beispiel:

Delphi-Quellcode:
constructor TTabSheet.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Align := alClient;
  ControlStyle := ControlStyle + [csAcceptsControls, csNoDesignVisible,
    csParentBackground, csPannable];
  Visible := False;
  FTabVisible := True;
  FHighlighted := False;
end;
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: nonVCL TabControl Hintergrundfarbe ändern

  Alt 24. Feb 2011, 07:12
In der ganzen Diskussion vermisse ich die boolsche Eigenschaft "highlighted".
Beispiel:

Delphi-Quellcode:
constructor TTabSheet.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Align := alClient;
  ControlStyle := ControlStyle + [csAcceptsControls, csNoDesignVisible,
    csParentBackground, csPannable];
  Visible := False;
  FTabVisible := True;
  FHighlighted := False;
end;
was für ein FHighlighted
Das ist nonvcl und nicht von einer TComponente abgeleitet..
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz