Habe im Forum gestöbert und meinem PopUp-Menü die Zeilen einer Textdatei als
Menüpunkte zugeordnet. (Item[0]=Die Datei Editieren, Item[1]=Trennlinie)
Habe die Lösung selbst gefunden. Alle roten Texte sind die Verbesserungen !
einige Auszüge:
in Form1:
Delphi-Quelltext
1: 2: 3:
| private procedure MyPopupHandler(Sender: TObject); |
procedure MyPopupHandler(Sender: TObject); muß public sein !
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.MyPopupHandler(Sender: TObject); begin if(Sender is TMenuItem) then StringGrid1.Cells[17,Row1]:=(Sender as TMenuItem).Caption; end; |
In einer weiteren Unit:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| procedure addMenu(m:TPopupMenu;fname:string); var sl:TStringList; i:integer; t:TMenuItem; begin if fileexists(fname) then begin sl:=TStringList.Create; sl.LoadFromFile(fname); try for i := 2 to m.Items.Count-1 do begin t := m.Items[2]; m.Items.Delete(2); FreeAndNil(t); end; for i:=0 to sl.Count-1 do if Trim(sl[i])<>'' then begin t := TMenuItem.Create(m); t.Caption := sl[i]; t.OnClick := Form1.MyPopupHandler; m.Items.Add(t); end; finally sl.free; end; end; end; |
Habe also die t.OnClick-Zeile ergänzt.
In Form1 :
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var p:TPoint; i:integer; begin stringgrid1.MouseToCell(x, y, Col1, Row1); GetCursorPos(P); if Col1=17 then begin addMenu(PopupMenu6,pdir+'BemerkungenTB.txt'); PopupMenu6.Popup(P.X, P.Y); end; end; |
Das Ganze arbeitet erstmal recht gut bis auf die Zuweisung des OnClick-Ereignisses.
Korrigiert wie oben beschrieben!
Wie kann ich in der anderen Unit bereits OnClick zuweisen?
siehe oben !Ich bekomme dort immer Fehlermeldungen. (siehe Procedure addMenu)
Bei schrittweisen Abarbeiten gelange ich nicht in die Procedure MyPopupHandler,
nehme also an, das die Zuweisung (trotz ohne Fehlermeldung) nicht geklappt hat.
Also jetzt funktioniert alles, danke für die zahlreiche Hilfe
Gruss Jürgen