Ideen er der - men den er desværre ikke god nok i mit tilfælde.
Da mange af de oprettede labels er lavet på forskellige tidspunkter har de forskellige Index numre i Component objektet og dermed rammer jeg ikke præcis dem jeg har navngivet som Label_0, Label_1 osv. - Men mere tilfældigt. :(
k så sætter du tag propertie på de label du vil ændre til at være 1 og bruger denne kode var I : Integer; begin For I:=0 to ComponentCount -1 do if (Components[I] is TLabel) then if (Components[I] as TLabel).Tag = 1 then (Components[I] as TLabel).Caption := 'Hello World'; end;
ARGH!!!! Man har ikke 100 labels, og da slet ikke statisk!!! Lav dem dynamisk!!!
private Heste: array [1..100] of TLabel;
procedure TPonyForm.FormCreate(Sender: TObject); var I: Integer; begin Randomize; for I := Low(Heste) to High(Heste) do begin Heste[I] := TLabel.Create(Self); Heste[I].Parent := Self; Heste[I].Caption := 'Hest nr. ' + IntToStr(I); Heste[I].Top := Random(ClientHeight - Heste[I].Height); Heste[I].Left := Random(ClientWidth - Heste[I].Width);; Heste[I].Tag := I; end; end;
procedure TPonyForm.FormClose(Sender: TObject; var Action: TCloseAction); var I: Integer; begin for I := Low(Heste) to High(Heste) do Heste[I].Free; end;
Hvis det ikke virker, så tilføj flere heste! Et godt råd fra Borrisholt!!! ;)
Se - det er præcis hvad jeg efterlyste - men desværre kan jeg jo ikke lade være med at tænke på hvor let det var i VB.
OK 100 labels snakker vi heller ikke om - vi snakker om 3 x 20 Det jeg ville var at tage et array[0..20] og lave denne linie:
for I:= 0 to 20 do Label[I].Caption := Array1[I] for I:= 0 to 20 do Label[I+20].Caption := Array2[I]
Den store grund til at jeg godt kunne tænke mig at de forsat var statiske var mere for at jeg kunne i design mode, vælge hvor på formen de skulle placeres.
Det kan også godt være at jeg betragt det fra en forkert vinkel - for det er netop dette her jeg vil: if DBComboBox1.Text = BrancheKode[01] then VisPer.V_Branche01.State := cbChecked else VisPer.V_Branche01.State := cbGrayed; if DBComboBox1.Text = BrancheKode[02] then VisPer.V_Branche02.State := cbChecked else VisPer.V_Branche02.State := cbGrayed; osv. osv.
for I := 1 to 15 do if DBComboBox1.Text = BrancheKode[I] then VisPer.V_Branche[I].State := cbChecked else VisPer.V_Branche[I].State := cbGrayed;
Du kan også sortere på navnet nu du har oprettet det således (jeg vil dog også anbefale at oprette dem dynamisk)
var I,nr : Integer; begin For I:=0 to ComponentCount -1 do if (Components[I] is TLabel) then begin nr := inttostr(copy(Components[I] as TLabel).name,7,3)); {stryger Label_ og bruger resten af navnet} case nr of 1..10: (Components[I] as TLabel).caption := 'Hest'; 11..100: (Components[I] as TLabel).caption := 'Ko'; end; end; end;
for i:=1 to 100 do TLabel(FindComponent('Label_' + IntToStr(i))).Caption := 'Label_' + inttostr(i);
Synes godt om
Ny brugerNybegynder
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.