AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi API fürs Zeichnen von Fenster-Button (BorderIcons) im Win Vista/7 Stil gesucht
Thema durchsuchen
Ansicht
Themen-Optionen

API fürs Zeichnen von Fenster-Button (BorderIcons) im Win Vista/7 Stil gesucht

Ein Thema von s.h.a.r.k · begonnen am 13. Mai 2011 · letzter Beitrag vom 25. Mai 2011
Antwort Antwort
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#1

API fürs Zeichnen von Fenster-Button (BorderIcons) im Win Vista/7 Stil gesucht

  Alt 13. Mai 2011, 22:07
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 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?!
Angehängte Grafiken
Dateityp: jpg trillian5-desktop.jpg (90,6 KB, 230x aufgerufen)
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: API fürs Zeichnen von Fenster-Button (BorderIcons) im Win Vista/7 Stil gesucht

  Alt 14. Mai 2011, 04:51
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
Nr.1 Delphi-Tool: [F7]

Geändert von ConnorMcLeod (14. Mai 2011 um 08:59 Uhr) Grund: überflüssiger Code
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#3

AW: API fürs Zeichnen von Fenster-Button (BorderIcons) im Win Vista/7 Stil gesucht

  Alt 14. Mai 2011, 15:12
Genau der Code liefert mich aber einen Button, den ich nicht haben will 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.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: API fürs Zeichnen von Fenster-Button (BorderIcons) im Win Vista/7 Stil gesucht

  Alt 14. Mai 2011, 18:13
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;
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#5

AW: API fürs Zeichnen von Fenster-Button (BorderIcons) im Win Vista/7 Stil gesucht

  Alt 14. Mai 2011, 18:28
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 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
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von GPRSNerd
GPRSNerd

Registriert seit: 30. Dez 2004
Ort: Ruhrpott
239 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: API fürs Zeichnen von Fenster-Button (BorderIcons) im Win Vista/7 Stil gesucht

  Alt 18. Mai 2011, 15:07
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.

Wenn du dafür eine Lösung finden solltest, könntest du die ja hier posten...
Stefan
  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 18:47 Uhr.
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