Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi API fürs Zeichnen von Fenster-Button (BorderIcons) im Win Vista/7 Stil gesucht (https://www.delphipraxis.net/160457-api-fuers-zeichnen-von-fenster-button-bordericons-im-win-vista-7-stil-gesucht.html)

s.h.a.r.k 13. Mai 2011 22:07

API fürs Zeichnen von Fenster-Button (BorderIcons) im Win Vista/7 Stil gesucht
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,

ich bin nun schon mehrere Stunden auf der Suche nach einem passenden API-Aufruf bzw. Code, der mir einen Window-Button (oder BorderIcon), wie ihn Windows zeichnet, darstellt -- gerne auch automatisch mit Transparenz :stupid: Im Anhang findet ihr die aktuelle Version von Trillian, bei der ich das mal wieder gesehen habe, hab die verschiedenen Icons sogar extra durchnummeriert:
  1. ein zusätzliches Icon, nicht neben den BorderIcons.
  2. Hauptmenü -- dafür brauche ich nur den Rahmen
  3. und weitere zwei Buttons
Kennt jemand einen Weg über die Windows API?

PS: Über den ThemeService bekomme ich nur nicht-transparente Button und auch nur welche, die ein Icon besitzen. Es muss doch einen Weg über die API geben... Wäre doch verrückt, wenn nicht?! :gruebel:

ConnorMcLeod 14. Mai 2011 04:51

AW: API fürs Zeichnen von Fenster-Button (BorderIcons) im Win Vista/7 Stil gesucht
 
Hier bitte:
Delphi-Quellcode:
uses
    Themes
  ;

procedure PaintCloseButton(ACanvas: TCanvas; ARect: TRect);
var
  CloseBtnDrawDetails: TThemedElementDetails;
begin
        CloseBtnDrawDetails := ThemeServices.GetElementDetails(twCloseButtonNormal);
        ThemeServices.DrawElement(ACanvas.Handle, CloseBtnDrawDetails, ARect);
... oder normal ...
        Windows.DrawFrameControl(ACanvas.Handle, ARect, DFC_CAPTION, DFCS_CAPTIONCLOSE);
end;
Den Rest findest Du bestimmt selbst raus. HTH

s.h.a.r.k 14. Mai 2011 15:12

AW: API fürs Zeichnen von Fenster-Button (BorderIcons) im Win Vista/7 Stil gesucht
 
Genau der Code liefert mich aber einen Button, den ich nicht haben will :stupid: Der ist nämlich zum einen nicht transparent und zum anderen hat der ein Icon in der Mitte! Ich will eines ohne Icon und das gibts nicht. Habe schon alle twXXX-Optionen durchprobiert.

ConnorMcLeod 14. Mai 2011 18:13

AW: API fürs Zeichnen von Fenster-Button (BorderIcons) im Win Vista/7 Stil gesucht
 
Das hier zeichnet einen Buttonhintergrund, aber transparent ist er noch nicht. Vllt findest Du noch den richtigen Klassennamen für OpenThemeData raus. Die Klassen stehen in der Datei AeroStyle.xml, aber genauer habe ich nicht geforscht.
Delphi-Quellcode:
function OpenThemeData(hwnd: HWND; pszClassList: LPCWSTR): THandle; stdcall; external 'uxtheme.dll';
function CloseThemeData(hTheme: THandle): HRESULT; stdcall; external 'uxtheme.dll';
function DrawThemeBackground(hTheme: THandle; hdc: HDC; iPartId, iStateId:
  Integer; const pRect: TRect;
  pClipRect: PRECT): HRESULT; stdcall; external 'uxtheme.dll';

procedure TForm1.Button1Click(Sender: TObject);
var
  ltd: THandle;
begin
  ltd := OpenThemeData(Handle, PWideChar('button'));
  try
    DrawThemeBackground(ltd, Canvas.Handle, 1, 1, Rect(20, 20, 100, 50), 0);
  finally
    CloseThemeData(ltd);
  end;
end;

s.h.a.r.k 14. Mai 2011 18:28

AW: API fürs Zeichnen von Fenster-Button (BorderIcons) im Win Vista/7 Stil gesucht
 
Hm... Ich glaube ich habe die Antwort gefunden. Lass mich aber auch gerne vom Gegenteil überzeugen, sind ja immerhin schon fast fünf Jahre seit dem Post vergangen.
Zitat:

Zitat von http://social.msdn.microsoft.com/Forums/en-US/windowsuidevelopment/thread/05474b1f-d92b-4774-8ea5-751cda72ea7a
Hi devexpert,

Unfortunately, we do not expose the caption buttons though any API. The only way to get these is by letting the DWM draw the non-client area of your app.

Thanks,
Wale


GPRSNerd 18. Mai 2011 15:07

AW: API fürs Zeichnen von Fenster-Button (BorderIcons) im Win Vista/7 Stil gesucht
 
Ich habe von den Jedis den JvCaptionButton benutzt, aber die gleichen Probleme gehabt mit Style/Theme und fehlender Transparenz.:(
Erstaunlicherweise gibt es ein paar Programme, die da ganz ordentliche Buttons hinkriegen, wie z.B. UltraMon.:shock:

Wenn du dafür eine Lösung finden solltest, könntest du die ja hier posten...

s.h.a.r.k 18. Mai 2011 18:24

AW: API fürs Zeichnen von Fenster-Button (BorderIcons) im Win Vista/7 Stil gesucht
 
Ich muss mir mal ein Windows 7 in eine VM installieren und da ein Theme-Wechsel vornehmen, sodass die Button anders aussehen. Ich könnte wetten, dass es eine API für das ganze gibt oder vielleicht eine Beschreibung der Zeichenroutine. Ergebnisse folgen, sobald ich mal Zeit habe :)

s.h.a.r.k 18. Mai 2011 22:36

AW: API fürs Zeichnen von Fenster-Button (BorderIcons) im Win Vista/7 Stil gesucht
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hm, es ist scheinbar wirklich so, dass die Anwendungen die Buttons selbst zeichnen müssen und es keinerlei Windows API gibt, siehe dem Screenshot anbei. Leider habe ich es nicht geschafft in der letzten halben Stunde der VM beizubringen mehrere Monitore zu nutzen, daher kann ich im Moment noch keine Aussage bzgl. UltraMon treffen.

Nachtrag: Habe es jetzt geschafft meiner VM mehrere Monitore unterzujubeln und so UltraMon mal näher anzuschauen. Das Ergebnise ist das gleich wie bei Trillian, es wird echt alles selbst gezeichnet. Wundert mich zwar immer noch etwas, aber ich muss mich wohl damit abfinden,dass ich das nun echt selbst machen muss.

ConnorMcLeod 19. Mai 2011 18:02

AW: API fürs Zeichnen von Fenster-Button (BorderIcons) im Win Vista/7 Stil gesucht
 
hm, kranke Idee:
wenn man einen Button (z.B. 100 Pixel breit) zeichnen lässt, der 3mal so breit ist, als das echte Ziel, dann hat man schon mal eine Fläche mit den richtigen Farben (300 Pixel breit). Auf diese Art ist das Systemicon aus dem Weg. Dann die Ränder links und rechts in die gewünschte Fläche (100 Pixel) reinkopieren und danach auf diese 100 Pixel beschneiden. Damit ist der Button fertig und man kann das eigene Icon draufmalen.

s.h.a.r.k 19. Mai 2011 23:22

AW: API fürs Zeichnen von Fenster-Button (BorderIcons) im Win Vista/7 Stil gesucht
 
Genau die Idee hatte ich auch schon :mrgreen: wobei das wohl nur für das Standardskin von Windows funktionieren würde. Wobei das sicherlich feststellbar ist und wenn es mal nicht mehr das Standardskin sein sollte, dann würde ich den Hintergrund einfach weg lassen. Zumindest hat UltraMon bei einem geskinnten Windows kein Hintergrund für die Icons gesetzt und die Idee fand ich an sich ganz passend, da die Icons dann sehr neutral da oben sitzen und zumindest kein falscher Hintergrund sichtbar ist.

Nur muss man eben mal die Zeit dafür finden :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:14 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz