Avatar billede itognet Nybegynder
07. marts 2003 - 00:04 Der er 13 kommentarer

Ændre værdi på 100 Labels.

Hej,

Hvordan ændrer jeg programmeringsmæssigt en værdi for 100 labels. Label_0 til  Label_100  ?

jeg havde forstillet mig noget lignende:

for i := 0 to 100 do
  Label[i].caption := 'Hello World';

Hvordan får jeg tilgang til en label på denne måde ?
Avatar billede megabyte_ Nybegynder
07. marts 2003 - 00:25 #1
Hey itognet

Her er et forslag.
håber det er det du søger

var
I : Integer;
begin
For I:=0 to ComponentCount -1 do
  if (Components[I] is TLabel) then
    (Components[I] as TLabel).Caption := 'Hello World';
end;

/MB
Avatar billede itognet Nybegynder
07. marts 2003 - 00:36 #2
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. :(
Avatar billede megabyte_ Nybegynder
07. marts 2003 - 00:42 #3
det vil sige at navnet på et label skal være lable_XXX og ellers skal den ikke sætte en caption ?
Avatar billede itognet Nybegynder
07. marts 2003 - 00:47 #4
nemlig - men dog behøver den ikke at tjekke om det er en label - for det ved jeg at det er.
Avatar billede itognet Nybegynder
07. marts 2003 - 00:48 #5
Hvis man har prøvet visual basic ville mit eksempel virke - men VB ser også anderledes på tingene.
Avatar billede megabyte_ Nybegynder
07. marts 2003 - 00:49 #6
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;
Avatar billede megabyte_ Nybegynder
07. marts 2003 - 00:55 #7
Well jeg er off til i morn engang hygge.
Avatar billede hermandsen Juniormester
07. marts 2003 - 01:09 #8
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!!! ;)

//hermandsen
Avatar billede itognet Nybegynder
07. marts 2003 - 02:05 #9
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.
Avatar billede hermandsen Juniormester
07. marts 2003 - 02:13 #10
Det er da bare noget man lige skal beslutte sig for! :)

Lav evt dit array todimentionalt!

private
  Heste: array [1..3, 1..20] of TLabel;

Så får du 3*20 pladser! ;)

Du kan selvfølgelig også skrive det op som:

private
  Ponyer: array [1..3] of array [1..20] of TLabel;

Men det bestemmer du selv! ;)

//hermandsen
Avatar billede itognet Nybegynder
07. marts 2003 - 03:09 #11
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;
Avatar billede hreiff Nybegynder
07. marts 2003 - 11:35 #12
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;
Avatar billede clscableguy Praktikant
07. marts 2003 - 22:49 #13
for i:=1 to 100 do
  TLabel(FindComponent('Label_' + IntToStr(i))).Caption := 'Label_' + inttostr(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