![]() |
[NonVCL] PopupMenü - Auf das Anklicken eines Items reagieren
Irgendwie finde ich den Titel doof, aber es ging nicht besser. Ok, mein Problem ist Folgendes:
Ich habe mein Programm erst mit der VCL vorgeschrieben, bis der Kern der Anwendung lief. Jetzt portiere ich das Projekt nach NonVCL und habe in der VCL - Anwendung Folgendes:
Delphi-Quellcode:
Hintegrund: Beim Erstellen des Menüs wird eine unbekannte Anzahl an Menueinträgen erstellt. Der "OnClick" - Routine hatte ich die obige Prozedur zugewiesen. Klickt der Anwender jetzt auf ein Item, dann kann ich mir über den "Sender" den Text bzw. ein paar Werte holen. Die Frage ist jetzt, wie realisiere ich das NonVCL? Ich bin jetzt so weit:
Procedure TForm1.ProgressItemClicks(Sender: TObject);
var MenuItemEx: TMenuItem; begin if NOT (Sender is TMenuItemExtended) then begin ShowMessage('Unerwarteter Aufruf:' + #13#10 + #13#10 + Sender.ClassName); exit; end; MenuItemEx := TMenuItem(sender); MenuItemEx.Checked := True; Ardeo.DiscReadSpeed := MenuItem.Tag; end;
Delphi-Quellcode:
Meine Hoffnung war jetzt, dass wenn ich auf ein Item des Menüs hmSub[i] klicke, die Message "WM_MENUCOMMAND" gesendet wird. Wird sie aber irgendwie nicht. Was mache ich da Falsch? Oder gibt es eine andere Möglichkeit?
WM_TNAMSG:
case lp of WM_RBUTTONUP: begin hm := CreatePopupMenu; AppendMenu(hm,MF_OWNERDRAW or MF_GRAYED,IDM_INFO_TEXT,'Drive Tranquilizer 0.1 Beta'); AppendMenu(hm,MF_OWNERDRAW or MF_GRAYED,IDM_INFO_TEXT,'© 2006 by Daniel Gilbert'); AppendMenu(hm,MF_SEPARATOR,IDM_INFO_TEXT,''); AppendMenu(hm,MF_OWNERDRAW or MF_GRAYED,0,PChar(RES_ACTIVATE)); for i := 0 to DrivesArray.Count - 1 do begin hmSub[i] := CreatePopUpMenu; //Creates the Entry which displays the hmSub Menu AppendMenu(hm,MF_STRING or MF_POPUP,hmSub[i],PChar(DrivesArray.Drives[i].Name)); //Creates Submenu AppendMenu(hmSub[i],MF_STRING,0,PChar('MAX')); AppendMenu(hmSub[i],MF_SEPARATOR,0,nil); For n := 0 to DrivesArray.Drives[i].count - 1 do begin Temp := PChar(IntToStr(DrivesArray.Drives[i].Speeds[n]) + 'X [' + IntToStr(DrivesArray.Drives[i].Speeds[n]*176) + ' KB/s]'); TempS := IntToStr(DrivesArray.Drives[i].HAID) + IntToStr(DrivesArray.Drives[i].LUN) + IntToStr(DrivesArray.Drives[i].Target) + '9' + IntToStr(DrivesArray.Drives[i].Speeds[n]); Val(TempS,ID,cod); AppendMenu(hmSub[i],MF_STRING,n,Temp); end; MenuInf.cbSize := SizeOf(TMenuInfo); MenuInf.fMask := MiM_STYLE; MenuInf.dwStyle := MNS_NOTIFYBYPOS; SetMenuInfo(hmSub[i],MenuInf); end; AppendMenu(hm,MF_SEPARATOR,0,''); AppendMenu(hm,MF_STRING,IDM_HELP,PChar(RES_HELP)); AppendMenu(hm,MF_STRING,IDM_INFO,PChar(RES_INFO)); AppendMenu(hm,MF_SEPARATOR,0,''); AppendMenu(hm,MF_STRING,IDM_EXIT,PChar(RES_EXIT)); GetCursorPos(p); SetForegroundWindow(wnd); TrackPopupMenuEx(hm,TPM_RIGHTALIGN,p.X,p.Y,wnd,nil); for i := 0 to 23 do DestroyMenu(hmSub[i]); DestroyMenu(hm); end; Verzweifelte Grüße vom Daniel |
Re: [NonVCL] PopupMenü - Auf das Anklicken eines Items reagi
Stichwort: Luckies API-Tutorials -> Kapitel über Menüs und/oder TNA-Tools :stupid:
|
Re: [NonVCL] PopupMenü - Auf das Anklicken eines Items reagi
:wall:
Fehler: Ich hab' ![]() @Mathias: Ähh.. danke. :wink: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:30 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