Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - TEdit(Sender)
colaka - Sa 13.10.12 12:35
Titel: TEdit(Sender)
Hallo,
ich habe viele Editfelder und möchte, dass man den Inhalt eines jeden Feldes in jedes andere einfügen kann. Dazu habe ich ein PopUpMenue und eine ActionList erstellt. In der ActionList gibt es die Aktion ANameKopieren und ANameEinfuegen. Doch der folgende Code erzeugt eine Zugriffsverletzung:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TFKunden.ANameKopierenExecute(Sender: TObject); begin TempText := TEdit(Sender).Text; end;
procedure TFKunden.ANameEinfuegenExecute(Sender: TObject); begin TEdit(Sender).Text := TempText; end; |
Was mache ich da wohl falsch?
bummi - Sa 13.10.12 12:59
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| var mi: TMenuItem; begin if TAction(Sender).ActionComponent is TMenuItem then begin mi := TMenuItem(TAction(Sender).ActionComponent); if mi.GetParentMenu is TPopupMenu then begin if TPopupMenu(mi.GetParentMenu).PopupComponent is TEdit then TempText := TEdit(TPopupMenu(mi.GetParentMenu).PopupComponent).Text;
end; end; Showmessage(TempText);
end; |
colaka - Sa 13.10.12 14:11
Vielen Dank für die schnelle Antwort. Leider ist der Code etwas zu hoch für mich, deshalb habe ich ihn einfach abkopiert. Jetzt kommt zwar keine Fehlermeldung mehr, aber den Text des Editfeldes erhalte ich auch nicht. Die Messagebox zeigt nichts an. Um dem Fehler näher zukommen, habe ich den Code noch etwas abgewandelt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TFKunden.ANameKopierenExecute(Sender: TObject); var mi: TMenuItem; begin if TAction(Sender).ActionComponent is TMenuItem then begin mi := TMenuItem(TAction(Sender).ActionComponent); if mi.GetParentMenu is TPopupMenu then begin if TPopupMenu(mi.GetParentMenu).PopupComponent is TEdit then begin ShowMessage('Text'); TempText := TEdit(TPopupMenu(mi.GetParentMenu).PopupComponent).Text; end else ShowMessage('kein Text'); end; end; Showmessage(TempText); end; |
Es ist egal, ob ich den Text im Editfeld markiere oder nicht, es erscheint immer die Message "kein Text".
bummi - Sa 13.10.12 16:44
Ich gehe von einem Popupmenu aus dem Actions zugewiesen worden, den Edits wurden das Popupmenu zugewiesen.
Ansonsten einen Brechpunkt setzen und durchsteppen, da wo es nicht mehr passt den Klassennamen anzeigen lassen.
colaka - Sa 13.10.12 17:54
Ja,
ich hatte das PopUpMenue dem ganzen Panel zugewiesen. Jetzt habe ich es den einzelnen Editfeldern zugewiesen, und es funktioniert wunderbar.
Vielen Dank
bummi - So 14.10.12 01:02
Zitat: |
Leider ist der Code etwas zu hoch für mich
|
Liest sich doch eigentlich recht einfach, die Frage ist ja nur "wer kennt wen"
Die Action weiß wer sie aufgerufen hat
Wenn es ein Menuitem eines Popupmenues war weiß dass Popupmenu wer es aufgerufen hat ....
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!