AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

PopUpMenu OwnerDraw feuert zu spät... :)

Ein Thema von NeoXan · begonnen am 28. Dez 2005 · letzter Beitrag vom 4. Jan 2006
Antwort Antwort
NeoXan
(Gast)

n/a Beiträge
 
#1

PopUpMenu OwnerDraw feuert zu spät... :)

  Alt 28. Dez 2005, 02:01
Also ich habe unter anderem folgenden Code in meiner OwnerDraw Procedure
Delphi-Quellcode:
  // 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;
Das Problem ist nur, dass mein PopUpMenu erst umrandet wird, wenn ich über einen Eintrag fahre. Nicht aber wenn es aufgeht :/

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 );
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#2

Re: PopUpMenu OwnerDraw feuert zu spät... :)

  Alt 30. Dez 2005, 07:40
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:

cTemp.Handle := GetDC(0); 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 ...
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
NeoXan
(Gast)

n/a Beiträge
 
#3

Re: PopUpMenu OwnerDraw feuert zu spät... :)

  Alt 30. Dez 2005, 10:31
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
DrawEdge( ACanvas.Handle, ARect, BDR_SUNKEN,BF_FLAT or BF_LEFT or BF_RIGHT ); etc.
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...
Miniaturansicht angehängter Grafiken
menu2_866.jpg   menu1_140.jpg  
  Mit Zitat antworten Zitat
NeoXan
(Gast)

n/a Beiträge
 
#4

Re: PopUpMenu OwnerDraw feuert zu spät... :)

  Alt 4. Jan 2006, 01:48
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
  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 16:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz