Autor |
Beitrag |
DJ_Apfel
      
Beiträge: 31
|
Verfasst: Mo 09.12.02 16:03
Hi,
ich möchste Editfelder zur Laufzeit des Programmes erzeugen allerdings mit TEdit funzt das nicht so ganz :/. Ich erstelle eine Variable vom Typ TEdit aber das endet mit der Fehlermeldung. Bei den anderen Beiträgen wo Labels erzeugt werden geht es?!
_________________ Nur tote Fische schwimmen mit dem Strom!
IRC -> Server: east.gamesnet.com Port: 6667
Raum: #clan-babies
|
|
Udontknow
      
Beiträge: 2596
Win7
D2006 WIN32, .NET (C#)
|
Verfasst: Mo 09.12.02 16:10
Hi!
Drücke dich bitte deutlicher aus! Wenn du eine Fehlermeldung erhälst, wieso nennst du sie dann nicht?
Cu,
Udontknow
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Mo 09.12.02 16:12
Poste doch mal den Sourcecode der den Fehler verursacht!
Gruß
TINO
|
|
DJ_Apfel 
      
Beiträge: 31
|
Verfasst: Mo 09.12.02 17:07
Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| var textfeld: TEdit;
begin
textfeld.create...?
end; |
So nun hab ich erhofft das wie bei jedem Objekt ne schöne Programmierhilfe kommt  aber ich habe hier keine Anhaltspunkte...
Der Fehler besagt nur das TEdit nicht deklariert ist.
_________________ Nur tote Fische schwimmen mit dem Strom!
IRC -> Server: east.gamesnet.com Port: 6667
Raum: #clan-babies
|
|
Trialtom
      
Beiträge: 38
|
Verfasst: Mo 09.12.02 17:10
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var Editfeld : TEdit; begin Editfeld:= TEdit.Create(self); Editfeld.Parent := Self; Editfeld.Left := X; Editfeld.Top := Y; Editfeld.Width := Editfeld.Width + 50; Editfeld.Text :='Mhhh'; end; |
das ist sicher der quellcode den du auch hast.
bei mir bringt es den fehler, dass ich kein semikolon gesetzt hätte und wie du jetzt auch gesagt hast, TEdit nicht deklariert ist.
wird nie behoben, außer, wenn ich kurz auf dem formular ein editfenster aus der komponentenpalette erstelle geht es. Danach kann ich es auch löschen und es geht immernoch.
aber warum muss ich erst ein editfeld erstellen, was ich dann eh wieder löschen kann??
|
|
DJ_Apfel 
      
Beiträge: 31
|
Verfasst: Mo 09.12.02 18:00
Ich weiß (glaube ich) warum und zwar müssen wir beide TEdit gaanz oben deklarieren. Allerdings bin ich in Objekten deklarieren noch ein Noob  ,
deswegen plz eine Antowort von den Profs.
_________________ Nur tote Fische schwimmen mit dem Strom!
IRC -> Server: east.gamesnet.com Port: 6667
Raum: #clan-babies
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 09.12.02 18:02
Zitat: | aber warum muss ich erst ein editfeld erstellen, was ich dann eh wieder löschen kann?? |
Weil dann der Eintrag "StdCtrls" in der Uses-Klausel erscheint (bei mir erst, wenn ich das Programm einmal starte). Wenn Du diesen Eintrag manuell vornimmst, wird das Programm auch ohne das Erstellen des Edit-Feldes funktionieren.
MfG,
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
DJ_Apfel 
      
Beiträge: 31
|
Verfasst: Mo 09.12.02 19:18
Achso also man muss eine Unit einbinden.
Aber jetzt wo es funzt gibt es grad das nächste prob, wie kann man nun auf die Textfelder zugreifen? Solange sie nicht vorhanden sind Kompelliert Delphi den ganzen Ramsch nicht.
_________________ Nur tote Fische schwimmen mit dem Strom!
IRC -> Server: east.gamesnet.com Port: 6667
Raum: #clan-babies
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 09.12.02 20:33
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var Editfeld : TEdit; begin inc(i); Editfeld:= TEdit.Create(self); Editfeld.Parent := Self; Editfeld.Left := X; Editfeld.Top := Y; Editfeld.Width := Editfeld.Width + 50; Editfeld.Text :='Mhhh'; Editfeld.name:='feld'+IntToStr(i); end;
procedure TForm1.Button1Click(Sender: TObject); begin TEdit(Form1.FindComponent('feld1')).Text:='Hallo'; end; |
Dies wäre eine Möglichkeit: Du gibst den Feldern, wenn Du sie erstellst, einen eindeutigen Namen. Das habe ich hier mit der Laufvariable i gelöst, die ich bei Programmstart noch mit 0 initialisiert habe. Dann kannst Du ganz einfach über die Namen der Editfelder auf sie zugreifen.
Oder aber du deklarierst Deine Variablen für die Editfelder global, für Dich hier praktisch wäre ein Array of TEdit. Dann kannst Du beliebig viele Felder erstellen und über das Array ansprechen. Bei beiden musst Du vorher sicherstellen, dass die Editfelder, die Du ansprechen willst, auch vorher per TEdit.Create erstellt worden sind.
MfG,
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Wolff68
      
Beiträge: 302
Erhaltene Danke: 1
WinXP home
D6 Prof
|
Verfasst: Mo 09.12.02 23:04
Du kannst auf das Edit nachher ganz normal zugreifen.
Nur solltest Du es 1. unter public deklarieren und 2. vor dem Aufruf dann auch wirklich erzeugt haben, oder prüfen, ob es existiert.
Hier mal ein ausführliches Beispiel: 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33:
| type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } Edit2: TEdit; // Hier die deklaration von Edit2 vornehmen. end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); begin Edit2 := TEdit.Create(Self); Edit2.Parent := self; Edit2.Name := 'Edit2'; end;
procedure TForm1.Button2Click(Sender: TObject); begin IF Assigned(Edit2) then // prüft, ob Edit2 existiert Edit1.Text := Edit2.Text; end; |
_________________ "Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
|
|
DJ_Apfel 
      
Beiträge: 31
|
Verfasst: Di 10.12.02 14:36
@ wolff68 danke für das TUT aber das funzt nicht so ganz: Es wird kein Inhalt
von Edit2 nach Edit1 verschoben als ob er die Namen der beiden Textfelder ignoriert. Woran liegt das? (hast du dieses kleine Progra,, bei dir getestet?)
_________________ Nur tote Fische schwimmen mit dem Strom!
IRC -> Server: east.gamesnet.com Port: 6667
Raum: #clan-babies
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Di 10.12.02 15:54
@Wolff68: ich war davon ausgegangen, dass das ganze für beliebig viele Editfelder funktionieren soll, die bei jedem OnMouseDown-Ereignis erschaffen werden. Deswegen habe ich das ganze als Array of TEdit geplant. Ansonsten funktioniert es ja aber genauso.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Wolff68
      
Beiträge: 302
Erhaltene Danke: 1
WinXP home
D6 Prof
|
Verfasst: Mi 11.12.02 20:31
Hast recht Peter. Ich hab nicht daran gedacht, daß es mehrere sein sollen.
Aber um das Prinzip zu verstehen, ist es vielleicht besser erst mal mit einem anzufangen, und nicht gleich mit Findcomponent anzufangen.
@DJ:
Ja, der Code war getestet. Wundert mich, wenn er bei Dir nicht funktionieren sollte.
Das Edit2 wird angezeigt und dennoch nichts verschoben?
Dann kann es nur noch an dem IF Assigned liegen. Das Name := 'Edit2'; hast aber mit übernommen, oder?
Ansonsten kannst ja mal einen haltepunkt setzen, und nachsehen, ob das Assigned auf false steht obwohl das Edit2 erzeugt wurde.
_________________ "Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mi 11.12.02 20:36
Zitat: | Aber um das Prinzip zu verstehen, ist es vielleicht besser erst mal mit einem anzufangen, und nicht gleich mit Findcomponent anzufangen. |
Ja, auf jeden Fall!!
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|