Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi TLabeledEdit.EditLabel als PopupComponent (https://www.delphipraxis.net/179259-tlabelededit-editlabel-als-popupcomponent.html)

ImpeDan 23. Feb 2014 12:06

TLabeledEdit.EditLabel als PopupComponent
 
Hallo zusammen,

ich habe auf meinem Formular einen Button, der im OnClick Event ein neues TLabeledEdit erstellt und unter anderem dem entsprechendem EditLabel ein PopupMenu zuordnet. Nun will ich über dieses PopupMenu die Caption des TLabeledEdit.EditLabel ändern. Die einzelnen MenuItems rufen dabei alle die selbe Prozedur auf. Ich hab jetzt schon ne Weile gesucht und einige Varianten an Code ausprobiert, allerdings ohne Erfolg. Im Prinzip suche ich so etwas in der Art:
Delphi-Quellcode:
(PopupMenu1.PopupComponent as TLabeledEdit.EditLabel).Caption := (Sender as TMenuItem).Caption + ':';


Die Variante
Delphi-Quellcode:
(PopupMenu1.PopupComponent as TLabeledEdit).EditLabel.Caption := (Sender as TMenuItem).Caption + ':';
funktioniert auch nicht.

Vielen Dank schon im voraus...

Aviator 23. Feb 2014 12:12

AW: TLabeledEdit.EditLabel als PopupComponent
 
Versuchs mal so:
Delphi-Quellcode:
  TLabeledEdit(TPopupMenu(TMenuItem(Sender).GetParentComponent).PopupComponent).EditLabel.Caption := 'Test';

ImpeDan 23. Feb 2014 12:22

AW: TLabeledEdit.EditLabel als PopupComponent
 
...Das funktioniert leider auch nicht. Ich denke das Problem besteht darin, dass die PopupMenu.PopupComponent eben nicht ein TLabeledEdit sondern nur "ein Teil davon" ist, nämlich das entsprechende EditLabel...

Aviator 23. Feb 2014 12:26

AW: TLabeledEdit.EditLabel als PopupComponent
 
Ich habs bei mir ausprobiert und es funktioniert. Was genau funktioniert nicht? Wird nur nichts zugewiesen, schmiert das Programm ab oder wie äußert sich das "es funktioniert nicht"?

Führ die Schritte nochmals einzeln aus und benutz mal den Debugger und kuck, was nicht funktioniert.

Tipp: Dazu brauchst du einige lokale Variablen, denen du die zurückgelieferten Komponenten zuweisen kannst.

ImpeDan 23. Feb 2014 12:46

AW: TLabeledEdit.EditLabel als PopupComponent
 
ich hab das jetzt so getestet:
Delphi-Quellcode:
procedure TForm1.PopupMenu1ItemSelected(Sender: TObject);
var
  MyLabeledEdit: TLabeledEdit;
  MyMenuItem: TMenuItem;
  MyPopupMenu: TPopupMenu;
begin
  MyMenuItem := TMenuItem(Sender);
  MyPopupMenu := TPopupMenu(MyMenuItem.GetParentComponent);
  MyLabeledEdit := TLabeledEdit(MyPopupMenu.PopupComponent);
  MyLabeledEdit.EditLabel.Caption := 'test';
end;
Das Kompilieren funktioniert auch schon wie in vorherigen Versuchen, der Fehler wird jetzt für "control.inc" in Zeile 3246 angezeigt:
Delphi-Quellcode:
GetTextMethod := TMethod(@Self.GetTextBuf);
und tritt beim erreichen der Zeile
Delphi-Quellcode:
MyLabeledEdit.EditLabel.Caption := 'test';
auf.

(edit)
Wenn ich der Variable manuell eine bestehende Komponente zuweise, gibt es komischerweise keinen Fehler:
Delphi-Quellcode:
MyLabeledEdit := LblEdt01;
  MyLabeledEdit.EditLabel.Caption := 'test';

Aviator 23. Feb 2014 13:34

AW: TLabeledEdit.EditLabel als PopupComponent
 
Lad doch mal bitte das Projekt hoch. Dann kann man es besser nachvollziehen.

Btw. hinterleg doch mal pls. deine Delphi Version in deinem Profil.

ImpeDan 23. Feb 2014 13:45

AW: TLabeledEdit.EditLabel als PopupComponent
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier einmal den Source-Code sowie das Formular... Ist an sich Bestandteil eines deutlich größeren Projekts, wobei die Verknüpfungen zu den anderen Units eh noch nicht bestehen, da es sich gerade bei diesem Unit noch um eine sehr einfache Version handelt, die ich ersteinmal für sich genommen zum laufen kriegen möchte...

Aviator 23. Feb 2014 14:11

AW: TLabeledEdit.EditLabel als PopupComponent
 
Du hättest erwähnen sollen, dass es sich hierbei um ein Lazarus Projekt handelt. So wie ich das sehe (und gelesen habe), wird die Eigenschaft PopupComponent bei Lazarus nicht bzw. falsch gesetzt. Dann ist es nicht verwunderlich, dass eine Exception ausgelöst wird.

Du könntest das mit einem Workaround lösen, indem du dir beim OnMouseDown selbst die entsprechende Komponente merkst und dann darauf zugreifst. Das sollte dann funktionieren.

ImpeDan 23. Feb 2014 14:43

AW: TLabeledEdit.EditLabel als PopupComponent
 
Okay, gut zu wissen. Ich teste das in den nächsten Tagen dann mal, hab jetzt gerade keine Zeit mehr...
Vielen Dank für die Hilfe :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:54 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