Erstellen eines popup-Menüs zur Laufzeit

Ich versuche, einfach erstellen Sie ein popup-Menü (oder Kontext Menü), einige Elemente hinzu, und zeigen Sie an der Mausposition. Alle Beispiele die ich gefunden habe, tun dies mit dem designer. Ich bin dabei aus einem DLL-plugin, so gibt es keine form/designer. Klickt der Benutzer eine Schaltfläche aus der Haupt-Anwendung, die ruft die execute Verfahren unter. Ich möchte nur so etwas wie ein rechts-Klick-Menü angezeigt.

Mein code offensichtlich nicht funktioniert, aber ich hatte gehofft, ein Beispiel für das erstellen eines popup-Menüs während der Laufzeit statt der design-Zeit.

procedure TPlugIn.Execute(AParameters : WideString);
var
  pnt: TPoint;
  PopupMenu1: TPopupMenu;
  PopupMenuItem : TMenuItem;
begin
  GetCursorPos(pnt);
  PopupMenuItem.Caption := 'MenuItem1';
  PopupMenu1.Items.Add(PopupMenuItem);
  PopupMenuItem.Caption := 'MenuItem2';
  PopupMenu1.Items.Add(PopupMenuItem);
  PopupMenu1.Popup(pnt.X, pnt.Y);

end;
es gibt statisch typisierte Sprachen, die für die Deklaration einer Variablen ist genug, um zu initialisieren. C++ ist ein offensichtliches Beispiel.
erwarten Probleme mit dem GUI-code in den plugin-DLLs.
-1 für "Mein code" offensichtlich nicht funktioniert". Immer beschreiben Sie den Fehler mit Fehlermeldung wörtlich wiedergegeben
"Mein code" offensichtlich nicht funktioniert". Warum, oh warum? Scheint, wie Sie dó wissen, die Antwort! Warum Fragen Sie dann?
Es ist der Grund, warum Pakete vorhanden sind.Verwendung einer DLL-statt einem Paket für Ihr plugin bedeutet, dass die DLL verfügt über eine separate Instanz von VCL an die host-Anwendung. Klassische Symptome sind, die Typ-Identität funktioniert nicht wie erwartet. Zum Beispiel, im code oben TPopupMenu ist ein anderer Typ in der DLL von der exakt gleichen namens geben Sie den host, da gibt es verschiedene VCL-Instanzen. Aber es gibt viele weitere Probleme. Wenn Pakete nicht realisierbare option ist, dann müssen Sie ein wenig mehr Arbeit zu ermöglichen plugins.

InformationsquelleAutor ikathegreat | 2013-08-31

Schreibe einen Kommentar