Autor Beitrag
DJ_Apfel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mo 09.12.02 16:12 
Poste doch mal den Sourcecode der den Fehler verursacht!

Gruß
TINO
DJ_Apfel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Mo 09.12.02 17:07 
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38



BeitragVerfasst: Mo 09.12.02 17:10 
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 09.12.02 20:33 
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 302
Erhaltene Danke: 1

WinXP home
D6 Prof
BeitragVerfasst: 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:
ausblenden volle Höhe 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:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 302
Erhaltene Danke: 1

WinXP home
D6 Prof
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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".