Autor Beitrag
Henneberg
Hält's aus hier
Beiträge: 10



BeitragVerfasst: So 11.03.12 20:17 
Ausgangssituation ich habe 4 Edits in denen jeweils 4 zahlen stehen. Nun sollen siese Zahlen an ihren stellen in ein 16 Felder langes Array kommen
dafür ich will zwei for-Schleifen ineinandergeschachtelt durchlaufen lassen. Die erste von i=1 zu 4 und die andere ii=1 zu 4. Jetzt will ich in der zweiten prozedur nun erst ein Edit abklappern. dann das nächste usw. Ich hatte mir das so gedacht:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
for I := 1 to 4 do
  begin
   for ii := 1 to 16 do
     begin
        Edit(I).Text
     end;
  end;


Also es soll immer das Edit genommen werden mit dem Wert der ersten Zählvariable. So wie es oben steht funktioniert es nicht. Hat jemand eine Idee?

PS: Das ist mein erster Post hier also bitte seid gnädig mit mir^^

Moderiert von user profile iconMartok: Delphi-Tags hinzugefügt
Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am So 11.03.2012 um 19:36
haentschman
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 285
Erhaltene Danke: 33


DX10 Berlin Professional
BeitragVerfasst: So 11.03.12 20:24 
Hallo...

Stichworte:
- FindComponent
- Edits in einer ObjectList ablegen und über den Index abarbeiten

:wave:
Henneberg Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: So 11.03.12 20:39 
:S bin leider noch ein neuling. Könnten sie das bitte etwas genauer erklären?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19340
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 11.03.12 20:45 
Erstens: Wir duzen uns hier im Forum ;-)

Zweitens: FindComponent eingeben, F1 drücken ;-)
In der Dokumentation gibt es sogar ein Beispiel, das ziemlich exakt das macht was du vorhast...
docwiki.embarcadero....ndComponent_(Delphi)
Wobei du dir das with dort nicht abschauen solltest, das macht alles nur unübersichtlich. Aber du siehst dort wie FindComponent benutzt wird.
Henneberg Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: So 11.03.12 21:02 
ok :)

also ich bin derzeit soweiz und habe nur noch das als Kommentar abgegebene Problem:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TForm1.Button1Click(Sender: TObject);
var Feld:Array[1..16of Integer;
  I,ii: Integer;
  edittext:string;
  const  NamePrefix = 'MyEdit';
begin
for I := 1 to 4 do
  begin
   for ii := 1 to 4 do
     begin
       TEdit.Create(Self).Name := NamePrefix + IntToStr(i);
       edittext:=TEdit(FindComponent(NamePrefix + IntToStr(i))); // Hier sagt er jetzt "inkompatible Typen string und TEdit
       Feld[i*ii]:=strtoint(edittext[5]);
     end;
  end;

  for ii := 1 to 16 do
  Listbox1.Items.Add(IntToStr(Feld[iii]));


end;


Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19340
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 11.03.12 21:36 
Die Meldung sagt doch schon was das Problem ist. Die Variable edittext ist ein String. Deshalb kannst du da nicht ein ganzes Editfeld hineinlegen.

Das ist als ob du eine Tiefkühltruhe hast und eine Lieferung per LKW bekommst. Du versuchst nun den ganzen LKW in die Kühltruhe zu legen. Stattdessen musst du den Inhalt herausnehmen und in die Kühltruhe legen.

Analog musst du den Text aus dem Editfeld herausnehmen und diesen in die Variable legen.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
// also nicht (MyEdit ist einfach mal als Beispiel ein Editfeld):
edittext := MyEdit;
// sondern:
edittext := MyEdit.Text;

Davon abgesehen scheint dir nicht wirklich klar zu sein was du da tust. In der Zeile mit TEdit.Create wird ein neues Editfeld erzeugt. Das willst du ja wohl kaum, oder? Heißt: Diese Zeile brauchst du nicht.
Henneberg Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: So 11.03.12 21:51 
Tut mir leid ich habe eben nur mein bisheriges Schul Delphi und diese Aufgabe war eine zusatzaufgabe. Deswegen arbeite ich derzeit nach dem Motto: Einfugen testen verstehen. ;)
Tut mit Leid ich vestehe deine Antwort immer noch nicht. Blicke da noch nicht so durch :S
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19340
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 11.03.12 22:42 
Leg doch einfach mal in einem neuen Projekt nur ein Editfeld und einen Button auf das Formular und probiere nur FindComponent aus. In den Buttonklick kannst du schreiben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.Button1Click(Sender: TObject);
var
  FoundEditField: TEdit;
begin
  FoundEditField := FindComponent('Edit1'as TEdit;
  FoundEditField.Text := 'Ein Text';
end;
Damit suchst du das Editfeld mit dem Namen Edit1, legst das in FoundEditField und setzt dann den Text darin.
Henneberg Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Di 13.03.12 21:10 
Aber wie mach ich das nun das er das editfeld nimmt mit dem index der schleifenvariablen?
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Di 13.03.12 23:22 
ausblenden Delphi-Quelltext
1:
FoundEditField := FindComponent('Edit' + IntToStr(i)) as TEdit;					

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Mi 14.03.12 01:57 
Ich möchte mal anmerken, dass ich mit FindComponent immer ziemlich unzufrieden war, da das ziemlich langsam ist.

Da man ja ohnehin keine x Edits platzieren will, mache ich das meist durch Erstellung zur Laufzeit (wie oben schon angedeuted):

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
var Edits: array of TEdit;
[...]
procedure TForm1.CreateEdits;
var E: integer;
begin
  SetLength(Edits, 1000); //ganz viele Edits
  for E:= 0 to High(Edits) do
    begin
      Edits[E]:=TEdit.Create(Form1);
      Edits[E].Parent:=Form1;
      Edits[E].Text:=inttostr(E);
      Eidts[E].Top:=42*E;
    end;
end;


Genau wie die Schleife zeigt kannst du natürlich auch weitere Schleifen nutzen.

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)