![]() |
PopUpMenu OwnerDraw feuert zu spät... :)
Also ich habe unter anderem folgenden Code in meiner OwnerDraw Procedure
Delphi-Quellcode:
Das Problem ist nur, dass mein PopUpMenu erst umrandet wird, wenn ich über einen Eintrag fahre. Nicht aber wenn es aufgeht :/
// Draw menu border
mWnd := WindowFromDC(ACanvas.Handle); if mWnd <> Self.Handle then begin cTemp := TCanvas.Create(); cTemp.Handle := GetDC(0); Windows.GetWindowRect(mWnd, rMenu); cTemp.Brush.Color := $00DF967A; cTemp.FrameRect(rMenu); InflateRect(rMenu, -1, -1); cTemp.Brush.Color := $00FFFFFF; cTemp.FrameRect(rMenu); InflateRect(rMenu, -1, -1); cTemp.FrameRect(rMenu); ReleaseDC(0, cTemp.Handle); cTemp.Free(); end; EDIT: ach ja, wenn ich z.B. jetzt eine ShowMessage einfüge, und die Box mit enter bestätige, dann klappt es?!
Delphi-Quellcode:
procedure TfrmMain.btnMenuMouseEnter(Sender: TObject);
x := (Sender as TButton).Left + frmMain.Left; y := (Sender as TButton).Top + frmMain.Top + (Sender as TButton).Height; ShowMessage('H'); pop.Popup( x , y ); |
Re: PopUpMenu OwnerDraw feuert zu spät... :)
Mmh. Du bekommst doch in OwnerDraw ein Canvas mit, bzw. kannst du dir direkt vom Menü holen.
Merkwürdig finde ich aber auf jeden Fall:
Delphi-Quellcode:
Du zeichnest ja dann irgendwie direkt auf den Desktop, was sicherlich nicht so gut ist. Du musst dir doch vermutlich den DeviceContext des Menüs holen ...
cTemp.Handle := GetDC(0);
|
Re: PopUpMenu OwnerDraw feuert zu spät... :)
Liste der Anhänge anzeigen (Anzahl: 2)
hmmm, das Problem mit Canvas war, dass die Zeichenfläche nicht das Menu war, sondern immer ein Rand geblieben ist.
Menu1.jpg --------------------------------------- Hier ist ACanvas die Weiße Fläche und der graue Rand stört. Habe leider kein "none" gefunden...nur Dinge wie
Delphi-Quellcode:
etc.
DrawEdge( ACanvas.Handle, ARect, BDR_SUNKEN,BF_FLAT or BF_LEFT or BF_RIGHT );
Aus diesem Grund habe ich versucht, das irgendwie zu umgehen (anscheinen nicht sehr elegant) Menu2.jpg --------------------------------------- So schaut es aus, wenn ich mit der Maus drüber fahre...also cTemp darübergelegt. Leider wird cTemp erst darübergelegt, wenn ich mit der Maus über ein Item fahre bzw. wie oben erwähnt, z.B. ein ShowMessage aufrufe... |
Re: PopUpMenu OwnerDraw feuert zu spät... :)
Hat denn niemand eine Idee? Ich bin leider immernoch nicht weiter... :/
Ich brauche ein Flat PopUpMenu... Hab sogar schon die TListBox missbraucht, da war 'nur' das Problem das beim MouseOver neben meiner Markierung auch eine (anscheinend) Standard-Windows-Umrahmung gezogen wurde (kleinen Punkte um das Item). Gibt es da eine Möglichkeit das ausszuschalten? Wenn gar nichts mehr geht habe ich mir überlegt eine eigene Komponente zu schreiben, dann dürfte es ja kein Problem sein mit Canvas z.B. eine einzelne Umrahmung vorzunehmen. Vielen Dank Florian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:11 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