Avatar billede frossen Nybegynder
10. december 2003 - 00:36 Der er 8 kommentarer og
3 løsninger

Loops / masse ændringer? (igen)

jeg har et array på [0..6] og jeg vil lave en løkke noget i stil med dette:

for i:=0 to 6 do
array[i] := Array[i] + var*strtoint(edit[i].text);

men man kan jo ikke bare skrive edit[i].text
er der en måde hvor jeg kan gå ind og gøre dette..??
Avatar billede frossen Nybegynder
10. december 2003 - 00:40 #1
memo1.Lines.Add(L[i].Caption + inttostr((varname[i] / edit[i].text)*100));

kan man også bruge det her i en label for eksempel eller hvis man har flere variabler med navne som var1,var2,var3 osv.. håber i forstår spørgsmålet..
Avatar billede dkn Nybegynder
10. december 2003 - 03:04 #2
har du 6 edit felter eller hvad?
Avatar billede Slettet bruger
10. december 2003 - 07:22 #3
Du kan bruge FindComponent:

for I:=Low(array) to High(array) do
array[I] := array[I] + StrToInt(TEdit(FindComponent('Edit'+IntToStr(I))).Text);
Avatar billede hrc Mester
11. december 2003 - 12:35 #4
Du kan også bruge Components array'en som er en del af TComponent:

var
  i : integer;
  Edit : Tedit;
begin
  MyArray[0] := 0;
  for i := 0 to Panel1.ComponentCount - 1 do
    if (Panel1.Components[i] is TEdit) then begin
      Edit := (Panel1.Components[i] as TEdit);
      MyArray[Edit.Tag] := MyArray[Edit.Tag] + aVar * StrToInt(Edit.Text);
    end; // if
end;

Jeg bruger den Tag-property, som alle komponenter har, til at angive hvilket indeks værdien skal smækkes i. I ovenstående virker det dog kun hvis komponenterne læses i rette rækkefølge.
Avatar billede hrc Mester
11. december 2003 - 12:37 #5
I eksemplet er der n komponenter på et TPanel, men løkken tager kun TEdit'erne
Avatar billede leifj Nybegynder
11. december 2003 - 20:50 #6
Du kan oprette et array of TEdit:
var
  MineEdits: Array[0..6] of TEdit;

I programkoden skal MineEdits creates:

for i:=0 to 6 do begin
  MineEdits[i]:=TEdit.Create(Self);
  etc;
  etc;
end;

Jeg tror, det kan løse dit problem.
Avatar billede hrc Mester
12. december 2003 - 09:40 #7
Den med en array af TEdits kom jeg også på lidt senere. Jeg tænkte dog på en TList / TObjectList i stedet (elsker når det er dynamisk). Det minder meget om Components-listen, men rækkefølgen ville være sikker.

Jeg er blevet lidt interesseret i at høre hvad du har gang i. Umiddelbart så kunne jeg tro, at et gennemløb af tallene, placeret i en TListBox, ville være smukkere - men jeg kender som sagt ikke dit projekt...
Avatar billede leifj Nybegynder
12. december 2003 - 11:59 #8
Jeg glemte at oplyse, at du skal huske at nedlægge MineEdits[i] efter brug for at undgå memoryleaks.

Det gør du med følgende kode, der udføres når du er færdig med at bruge MineEdits:

for i:=0 to 6 do begin
  MineEdits[i].Destroy;
end;
Avatar billede hrc Mester
12. december 2003 - 12:41 #9
Ang. LeifJs' sidste kommentar. Delphi anbefaler at man bruger 'Free' i stedet for at kalde 'Destroy' direkte. Der er ikke den store forskel, men 'Free' kontrollerer om objektet der frigives, overhovedet er oprettet (self <> nil).

Brug 'Free' i stedet.
Avatar billede hrc Mester
12. december 2003 - 12:46 #10
Rettelse til mit eksempel: Man skal vist bruge Controls-listen istedet for Components. Bytter altid rundt på dem.
Avatar billede nilla Nybegynder
01. januar 2004 - 14:16 #11
Opret en textvariabel f.eks dummy:string.

dummy:=edit1.text;
for i:=0 to 6 do
array[i] := Array[i] + var*strtoint(dummy([i]);
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester