AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi [NonVCL] PopupMenü - Auf das Anklicken eines Items reagieren
Thema durchsuchen
Ansicht
Themen-Optionen

[NonVCL] PopupMenü - Auf das Anklicken eines Items reagieren

Ein Thema von Daniel G · begonnen am 5. Jun 2006 · letzter Beitrag vom 5. Jun 2006
Antwort Antwort
Daniel G
(Gast)

n/a Beiträge
 
#1

[NonVCL] PopupMenü - Auf das Anklicken eines Items reagieren

  Alt 5. Jun 2006, 16:46
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:
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;
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:

Delphi-Quellcode:
 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;
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?

Verzweifelte Grüße vom
Daniel
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#2

Re: [NonVCL] PopupMenü - Auf das Anklicken eines Items reagi

  Alt 5. Jun 2006, 17:30
Stichwort: Luckies API-Tutorials -> Kapitel über Menüs und/oder TNA-Tools
  Mit Zitat antworten Zitat
Daniel G
(Gast)

n/a Beiträge
 
#3

Re: [NonVCL] PopupMenü - Auf das Anklicken eines Items reagi

  Alt 5. Jun 2006, 17:32


Fehler:
Ich hab' Delphi-Referenz durchsuchenSetMenuInfo auf das Untermenü angewandt. Richtig ist es, diese Funktion auf das Hauptmenü anzuwenden. Falls jemand das Problem in Zukunft haben sollte.

@Mathias: Ähh.. danke.
  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 14:17 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