Avatar billede cr2000 Nybegynder
05. maj 2003 - 01:38 Der er 11 kommentarer og
1 løsning

Ændre label1,label2...3...4...5 på en nem måde,

Jeg har 24 Label hvor caption skal fødes med data fra en TStringList.

Gider godt at skrive:
Label1.caption := StringList1.Strings[0];
Label2.caption := StringList1.Strings[1];
Label3.caption := StringList1.Strings[2];
...osv
...osv....

Men jeg vil da lige høre om der ikke er en nemmere måde?
F.eks noget lignende:

For N1 := 0 to StringList1.Count-1 do
TLabel(Label(N1)).Caption := StringList1.Strings[N1];

Håber i forstår.

Mvh Christian Reinholdt
Avatar billede roenving Novice
05. maj 2003 - 01:41 #1
Du må da godt lægge labels i et array, så hvad er problemet?
Avatar billede cr2000 Nybegynder
05. maj 2003 - 01:42 #2
Hvordan gør man det med labels der er synlige?
Avatar billede roenving Novice
05. maj 2003 - 01:50 #3
Såvidt jeg husker skal (kiggede på Delphi for mange år siden) skal dine labels oprettes som array -- altså have samme navn, når du indsætter dem på din form.

Men som sagt er det nogle år siden ...
Avatar billede cr2000 Nybegynder
05. maj 2003 - 01:54 #4
Øhm... Så skal jeg igen sidde og sætte alle label'sne ind i et array. Så er jeg jo lige langt :)
Avatar billede roenving Novice
05. maj 2003 - 02:05 #5
Men vent bare til der kommer et par hajer på besøg -- er sikker på at der findes metoder til at indsætte eksisterende elementer ind i nye arrays ;-)
Avatar billede cr2000 Nybegynder
05. maj 2003 - 02:06 #6
Håber ihvertfald der er en smart måde at gøre det på. Det ser så grimt ud med 24 linjer med Label1.Caption := balallgl..osv
Avatar billede hermandsen Juniormester
05. maj 2003 - 02:07 #7
if Controls[I] is TLabel then
  (Controls[I] as TLabel).Caption := StringList1.Strings[I];
Avatar billede cr2000 Nybegynder
05. maj 2003 - 02:11 #8
Du må lige forklare hvordan det virker :)

Jeg har prøvet bare at sætte det ind. Der sker intet. Ingen fejl ingen action :)
Avatar billede hermandsen Juniormester
05. maj 2003 - 02:12 #9
Hvis dine labels er arrangerede rimelig logisk er det klart lettest at smide dem ind i et array... Det gøres således:

private
  Labels: array [1..15{eller hvor mange du nu vil ha}] of TLabel;

procedure TForm1.FormCreate(Sender: TObject);
var
  I: Integer;
begin
  for I := Low(Labels) to High(Labels) do
  begin
    Labels[I] := TLabel.Create(Self);
    with Labels[I] do
    begin
      Parent := Self;
      Left := 17;
      Top := I*20;
      Caption := 'Hest';
      Tag := I;
      //Sæt diverse andre værdier for dine labels her
    end;
  end;
end;

Når dit program så er færdigt, så er det selvfølgelig en god ide at fjerne dine labels fra hukommelsen igen, efter som du selv har oprettet dem...

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
  I: Integer;
begin
  for I := Low(Labels) to High(Labels) do
    Labels[I].Free;
end;

God førnøjelse, nu vil jeg snart i seng!! :)

//hermandsen
Avatar billede hermandsen Juniormester
05. maj 2003 - 02:14 #10
Hmmm... Det er mig der sover... Prøv lige at bruge Components i stedet for Controls...

Smutter i seng nu... Prøv dig lidt frem og spørg videre i morgen hvis der er problemer... ;)

//hermandsen
Avatar billede cr2000 Nybegynder
05. maj 2003 - 02:15 #11
Tak tak :)
Avatar billede hreiff Nybegynder
05. maj 2003 - 08:05 #12
Du kan også finde nummeret ud fra labelnavnet. Eks.

procedure TForm1.Button1Click(Sender: TObject);
var
  i,temp: integer;
begin
  for i := 0 to componentCount-1 do
  if Controls[i] is TLabel then
  begin
    Temp := StrToInt(copy(controls[i].name,6,255));  {label nr. }
    (Controls[i] as TLabel).Caption := 'Label nr. '+InttoStr(temp);
  end;
end;
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