![]() |
X-Button malen
Hallo,
ich suche eine Möglichkeit den Windows-standardmäßigen Schließen-Knopf (den Roten mit dem weißen Kreuz drauf) von Hand zu zeichnen. Und zwar nicht in die Titelleiste sondern direkt auf meinem Formular. Hab schon die Delphi-Hilfe und hier das Forum durchforstet, aber nichts gefunden. Aber war die Frage nicht erst vor kurzem schon mal da? Egal, find ich nicht wieder. Gibt es da nicht vielleicht eine hochgeheime und undokumentierte API-Funktion für, die nur einer Handvoll Verschworener bekannt ist? :wink: Wäre für entweder direkte Hilfe oder Link dankbar. :) Schönen Samstag noch! Christian |
Re: X-Button malen
Vermutlich hilft dir die "hochgeheime"
![]() |
Re: X-Button malen
Hmm,
nein, die hilft mir leider nicht weiter. Ich will ja nicht rauskriegen, wann die Titelleiste sich neu malen muss, sondern den Button irgendwo auf meinem Formular anzeigen lassen. So wie im Firefox der Knopf um die Tabs zu schließen, oder beim Balloontip (da sitzt dieser Button ja auch "einfach so" auf dem gelben Hintergrund). |
Re: X-Button malen
Hi :hi:,
mach doch davon einen Screenshot. Einmal mit MouseOver und einmal ohne Maus. Die beiden Bilder packst du in 2 Images auf der Form, machst sie genau deckungsgleich. Wenn die Maus nun rübergeht über das Image, machst du das Image sichtbar mit dem MOuseOver und wenn nicht, das andere. Habe ich jetzt wahrscheinlich ein bisschen umständlich erklärt. Wenn du es nicht verstehen solltest, versuche ich es dir nochmal zu erklären. :zwinker: |
Re: X-Button malen
Chrissi91: Was passiert, wenn der User ein anderes Design einstellt?
|
Re: X-Button malen
Zitat:
so hatte ich aber bei meinen programmen einen xp style hinbekommen, auch auf vorgängern von xp, den recht viele 98er nutzer mochten. |
Re: X-Button malen
Vielen Dank, aber das tut's nicht so ganz. Weder elegant noch flexibel, wie tubos schon gesagt hatte. Irgendwo muss Windows sich doch zumindest merken wie die Dinger aussehen? Dann könnte man das auslesen und auf die Form blitten. Obwohl--auch nicht so übermäßig elegant...
|
Re: X-Button malen
Zitat:
![]() Zitat:
|
Re: X-Button malen
Hallo,
ein kleines Beispiel für einen CloseButton:
Delphi-Quellcode:
Sind noch die ersten Versuche, für Verbesserungen bin ich offen.
uses
..., Themes; TrwCloseButton = class(TSpeedButton) private FHotTrack: Boolean; protected procedure Paint; override; public constructor Create(AOwner: TComponent); override; property HotTrack: Boolean read FHotTrack write FHotTrack default True; end; constructor TrwCloseButton.Create(AOwner: TComponent); begin inherited; FHotTrack := True; Width := 16; Height := 16; Flat := True; end; procedure TrwCloseButton.Paint; var uType: Integer; uState: Integer; Details: TThemedElementDetails; // Win: TThemedWindow; // bei normalem CloseButton Win: TThemedExplorerBar; begin if ThemeServices.ThemesEnabled then begin // bei norm. CloseButton // twCloseButtonNormal, twCloseButtonHot, twCloseButtonPushed, twCloseButtonDisabled // bei kleinem CloseButton // twSmallCloseButtonNormal, twSmallCloseButtonHot, twSmallCloseButtonPushed, // twSmallCloseButtonDisabled if Enabled then begin if (Down) or (FState = bsDown) then Win := tebHeaderClosePressed else if MouseInControl then Win := tebHeaderCloseHot else Win := tebHeaderCloseNormal; end else Win := tebHeaderCloseNormal; Details := ThemeServices.GetElementDetails(Win); // Größe des Buttons optimieren // evtll. Prop ThemeAutoSize { DC := GetDC(0); try GetThemePartSize(ThemeServices.Theme[teButton], DC, Details.Part, CBS_NORMAL, nil, TS_TRUE, ASize); finally ReleaseDC(0, DC); end; if (ASize.cx <> Width) then begin Width := ASize.cx; Height := ASize.cy; end; } ThemeServices.DrawElement(Canvas.Handle, Details, ClientRect); end else begin uType := DFC_CAPTION; uState := DFCS_CAPTIONCLOSE; if Enabled then begin if (Down) or (FState = bsDown) then uState := uState or DFCS_PUSHED else if MouseInControl then begin if FHotTrack then uState := uState or DFCS_MONO else uState := uState or DFCS_FLAT; end else uState := uState or DFCS_FLAT; end else uState := uState or DFCS_INACTIVE; DrawFrameControl(Canvas.Handle, ClientRect, uType, uState); end; end; Bei D7 ist noch ein Bug in den Themes. Da liefert ThemesEnabled immer False. Sollte bei dir aber nicht mehr auftreten. Cu, Frank |
Re: X-Button malen
Hi,
danke, das macht ja schon mal ziemlich genau das, was ich will. :thumb: Werd ich jetzt noch ein bisschen dran herumdoktorn, und wenn ich selbst nicht weiterkommen sollte melde ich mich nochmal. Schönen Sonntag noch (warum ist eigentlich das Wochenende schon wieder vorbei?! :stupid: ) Christian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:23 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