Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Text eines zur Laufzeit erstellten Editfeldes (https://www.delphipraxis.net/146888-text-eines-zur-laufzeit-erstellten-editfeldes.html)

Delphi-Narr 28. Jan 2010 20:43


Text eines zur Laufzeit erstellten Editfeldes
 
Hallo, ich habe folgendes Problem:

Ich habe mehrere Editfelder, die zur Laufzeit erstellt werden. Diesen möchte ich sowohl ein OnChange zuweisen, in dem ich die Texte auswerten kann und in andere zur Laufzeit erstellten Objekten den Text ändern kann.


Delphi-Quellcode:

var Eingabe:TEdit;

procedure TForm1.Erstellen;
begin
     Eingabe:=Tedit.create(Self);
     Eingabe.parent:=TForm1;
     Eingabe.OnChange:=EditsChange;
end;


procedure TForm1.EditsChange(Sender:TObject);
var text, neu:string;
begin
     //Ich komme zwar hier an, doch ich kann nichts auslesen, da es sich um ein TObject handelt.
     text:=Sender.text;

     neu:=text+'asd';
     
     //Hier möchte ich den Text der anderen Objekte ändern (Namen, Typ, Position etc. habe ich alles und lässt sich
     //aus den Werten von Sender errechnen

     AnderesEdit.text:=neu;
     AnderesEdit2.text:=neu+text;
     
     //usw.    
end;

Wie kann ich es verwirklichen, ein TObject in ein TEdit "umzuwandeln" und ein Objekt nur über einen in einer Variable gespeicherten Namen anzusprechen?

Liebe Grüße!

Luckie 28. Jan 2010 20:46

Re: Text eines zur Laufzeit erstellten Editfeldes
 
Delphi-Quellcode:
text:=(Sender as TEdit).text;

Delphi-Narr 29. Jan 2010 10:16

Re: Text eines zur Laufzeit erstellten Editfeldes
 
Ok, vielen Dank.
Wenn ich jetzt noch bei zur Laufzeit erstellten Objekten des Text auslesen will, kann ich das dann auch auf diese Weise machen?

Delphi-Quellcode:

//Setzt den Inhalt der Prozedur oben vorraus
procedure TForm1.EditChange(Sender:TObject);
var nr,name, anderername:string;
begin
     //Name der Edits setzt sich wie folgt zusammen: 'Name'+IntToStr(Nummer), wobei es 4 verschiedene Namen gibt
     //Also Nummer des Senders auslesen
     nr:=name;
     delete(Nr,0,Length(NR)-1);

     //Und jetzt das Edit mit dem Namen 'XYZ'+nr
     
     anderername:='Feld'+nr;
     
    //Das gewünschte Feld wieder in die TEdit Variable Feld laden???   
    Feld:=(Anderername as TEdit);
end;

Liebe Grüße!

mkinzler 29. Jan 2010 10:24

Re: Text eines zur Laufzeit erstellten Editfeldes
 
Nein. Ich sehe aber auch keinen Sinn darin. Was hast du genau vor?

Vielleicht
Feld:=(FindComponent( Anderername) as TEdit);

Delphi-Narr 29. Jan 2010 10:31

Re: Text eines zur Laufzeit erstellten Editfeldes
 
Ich möchte den Namen von Sender ermitteln (Kein Problem) und dann je nachdem welcher Name es ist, in einem anderen Feld eine Ausgabe machen. Da aber alle diese Felder noch nicht beim Programmstart vorhanden sind, hab ich halt so meine Probleme damit.

Wenn ich bei deiner Methode dann schreibe

showmessage(Feld.name);

dann kommt eine Fehlermeldung, eine Zugriffsverletzung. Ohne diese Zeile scheint es aber soweit zuklappen...

Edit:
Wenn ich schreibe Feld.text dann klappt es... Doch ich kann diesen Wert nicht verändern. Ich habe eingegeben

Feld.text:='Hallo';

doch es geschieht nichts...

Bbommel 29. Jan 2010 10:33

Re: Text eines zur Laufzeit erstellten Editfeldes
 
Dass du wahrscheinlich mit "FindComponent" weiterkommst, hat dir ja mkinzler schon geschrieben. Aber dein Codeschnipsel ist ansonsten auch sehr komisch:

Delphi-Quellcode:
var nr,name, anderername:string;
begin
     nr:=name;
Du fängst damit an, dass du der lokalen Variable "nr" den Wert der lokalen Variable "name" zuweist, die übrigens nicht initialisiert ist. Also erzeugst du eigentlich ziemliches Chaos...? :)

Danach löschst du, glaube ich, alles bis auf das letzte Zeichen...

Meinst du vielleicht eigentlich sowas hier:
Delphi-Quellcode:
nr:=(sender as TEdit).name[length((sender as TEdit).name)];
Das sollte dir das letzte Zeichen des Namens der Edit-Komponente in die Variable "nr" schreiben.

Bis denn
Bommel

mkinzler 29. Jan 2010 10:33

Re: Text eines zur Laufzeit erstellten Editfeldes
 
Was für einen Typ hat Feld?

Bbommel 29. Jan 2010 10:36

Re: Text eines zur Laufzeit erstellten Editfeldes
 
Zitat:

Zitat von Delphi-Narr
Wenn ich bei deiner Methode dann schreibe
showmessage(Feld.name);
dann kommt eine Fehlermeldung, eine Zugriffsverletzung. Ohne diese Zeile scheint es aber soweit zuklappen...

Die Zugriffsverletzung wirst du wahrscheinlich bekommen, weil FindComponent die Komponente nicht finden kann und deswegen "nil" zurcükliefert. Und das wird - wahrscheinlich! - der Fall sein, weil du den Namen der Edit-Komponente etwas eigenwillig ermittelst. ;) Siehe mein voriger Beitrag.

Bis denn
Bommel

Delphi-Narr 29. Jan 2010 10:44

Re: Text eines zur Laufzeit erstellten Editfeldes
 
Oh: Feld=Eingabe

Ich möchte sowohl den Teil "Name" haben, als auch den Teil 'Nummer'. Die ermittel ich dann, indem ich den Namen des Edits zweimal speicher und dann den nicht erwünschten Teil lösche. Ich kann auch versuchen, den Namen einmal festzulegen, sodass das Feld zu 100% existiert.
Die Ermittlung des Namens habe ich auch noch nicht fertig (Zweistellige Zahlen werden z.B. nicht berücksichtigt...)
Wenn ich den Namen richtig ermitteln kann, klappt es auch.

Ich denke damit wäre das Problem gelöst,
danke! :thumb:


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