[BCB] TBitBtn im Windows XP Style

mumpitz89

Cadet 4th Year
Registriert
Mai 2004
Beiträge
109
Hi!

Ich habe eine Windows XP Style Resourcen Datei
in mein Projekt eingebunden.
Ich verwende die Komponenten TBitBtn und TSpeedBtn in meinen Projekten. Komischerweise zeigt er diese zwei Steuerelemente aber nicht im Windows XP Style an, den normalen Button aber doch? Warum? Und was kann ich da machen?
(Ich verwende Borland C++Builder 6 Personal)

Übrigens: Bei der GroupBox Komponente ist das genau so!
 
^^TSpeedButton und TBitButton sind keine Windowseigenen Buttons, sondern sind eine Eigenschöpfung der VCL.

Deswegen gibt es dafür auch kein XP-Style.
 
Schön und gut! Aber wie kann man dagegen angehen? Ich habe selbst schon versucht eine Komponente selbst zu erstellen, aber ich kann das nicht!
Kann mir jemand helfen? Kennt jemand einen Ersatz?
 
Dass die Buttons anders aussehen liegt daran, dass sie nicht von Windows gezeichnet werden, sondern sich selbst zeichen. (OwnerDraw) Das ist zwar praktisch, wenn Windows nicht alles kann was man will, allerdings gehen dadurch wie Du siehst z.B. XP-Styles verloren. Was kann man dagegen machen... mit VCL-Hausmitteln meine ich nicht viel. Ich weiß nicht, inwiefern Windows von sich aus schon Buttons mit Grafik und Text unterstützt. Gehen tut es bestimmt irgendwie, allerdings wird das bestimmt viel Gefrickel mit der Windows-API.
 
mumpitz89 schrieb:
Schön und gut! Aber wie kann man dagegen angehen? Ich habe selbst schon versucht eine Komponente selbst zu erstellen, aber ich kann das nicht!
Kann mir jemand helfen? Kennt jemand einen Ersatz?

^^du kannst ja die Styledaten von Windows auslesen und dir mit den Ressourcen und lauter TImages etc selber nen Button basteln.

Wie genau du das anstellst, kann ich dir allerdings ned sagen.

Aber wenns dir hilft kannste die Delphi-Funktion haben, mit der du das aktuell eingestellte Theme ermitteln kannst.

Code:
uses ComObj, SyncObjs; 

var 
  GetCurrentThemeName: function (pszThemeFileName: LPWSTR; cchMaxNameChars: Integer; 
    pszColorBuff: LPWSTR; cchMaxColorChars: Integer; pszSizeBuff: LPWSTR; 
    cchMaxSizeChars: Integer): HRESULT; stdcall; 

procedure TForm1.Button1Click(Sender: TObject); 
var 
  FileName, ColorScheme, SizeName: WideString; 
  hThemeLib: THandle; 
begin 
  try 
    hThemeLib := LoadLibrary('uxtheme.dll'); 
    if hThemeLib > 0 then 
      GetCurrentThemeName := GetProcAddress(hThemeLib, 'GetCurrentThemeName'); 
    if Assigned(GetCurrentThemeName) then 
    begin 
      SetLength(FileName, 255); 
      SetLength(ColorScheme, 255); 
      SetLength(SizeName, 255); 
      OleCheck(GetCurrentThemeName(PWideChar(FileName), 255, 
        PWideChar(ColorScheme), 255, PWideChar(SizeName), 255)); 
      // show the the theme path and file name. 
      ShowMessage(PWideChar(FileName)); 
      // show the color scheme name 
      ShowMessage(PWideChar(ColorScheme)); 
      // show the size name 
      ShowMessage(PWideChar(SizeName)); 
    end; 
  finally 
    FreeLibrary(hThemeLib); 
  end; 
end;
 
Zurück
Oben