Avatar billede hclarsen Nybegynder
12. april 2006 - 22:36 Der er 15 kommentarer og
1 løsning

Integer og boolean

Hvis jeg har følgende kode

  TLabel(findcomponent('label' + inttostr((z)))).caption := 'hello';

som finder de labels på min form, med captionen "hello" - hvorledes omregner jeg disse labels til et antal? Altså så jeg finder antallet af labels med den søgte caption
Avatar billede hclarsen Nybegynder
12. april 2006 - 22:42 #1
Jeg kan lige præcisere spørgsmålet - det skal helst også være navnene på labelsne. Nu er de kaldt label0, label1, label2... label9, så hvis det kan være det sidste bogstaver(tal), så ville det være lækkert
Avatar billede kroning Nybegynder
12. april 2006 - 22:49 #2
Du indsætter en tæller:

var
c : integer;
.
.
c:=0;
her finder du alle labels og efter hver fundne skriver du
inc(c);
.
.
til sidst har du antallet i c
ShowMessage('Antallet af fundne labels:'+inttostr(c));
Avatar billede kroning Nybegynder
12. april 2006 - 22:49 #3
Nå, så ikke lige din tilføjelse, den tænker jeg lige over :)
Avatar billede kroning Nybegynder
12. april 2006 - 22:50 #4
Hvad med at vise hele koden du bruger?
Avatar billede hclarsen Nybegynder
12. april 2006 - 22:58 #5
for i := 1 to 3 do
  begin
    for j := 1 To 3 do
      begin
        z := (j - 1)*3 + i - 1;
  TLabel(findcomponent('felt' + inttostr((z)))).caption := 'X';
Avatar billede kroning Nybegynder
12. april 2006 - 23:04 #6
Skal dine labels hedde felt1 til felt8? Var det ikke bedre at kalde dem noget mere sigende?
Avatar billede hclarsen Nybegynder
12. april 2006 - 23:05 #7
hmm, jeg tænkte, at det ville være smart at kalde dem noget meget generelt, og bare tilføje nogle flere numre - så er det nemmere at hive det sidste tal ud. Men jeg kan vel kalde dem "cell" så
Avatar billede kroning Nybegynder
12. april 2006 - 23:06 #8
Men ellers forstår jeg ikke helt spørgsmålet, den sidste labels du finder vil jo hedde felt8
Avatar billede hclarsen Nybegynder
12. april 2006 - 23:16 #9
jeg vil finde de labels, som har captionen 'goddag'. Dette kan eksempelvis være cell1, cell3 og cell8. Så vil jeg blot have tallet 1, 3 og 8
Avatar billede kroning Nybegynder
12. april 2006 - 23:20 #10
Du vil altså have en function som kan returnere et array af tal som viser hvilke labels der indeholder goddag?
Avatar billede hclarsen Nybegynder
12. april 2006 - 23:20 #11
Ja, lige præcis! Det lyder blot bedre når du siger det :-)
Avatar billede kroning Nybegynder
12. april 2006 - 23:22 #12
Det laver jeg lige, man kan også lave en function der giver dig et array som indeholder selve labelsene hvis det er bedre?
Avatar billede hclarsen Nybegynder
12. april 2006 - 23:23 #13
Nej, synes hellere jeg vil se på tallene. Så vidt jeg ved skal man bruge noget med Rightstr?
Avatar billede kroning Nybegynder
12. april 2006 - 23:44 #14
Start med at definere denne type:

type
  Tai = array of string;

Tilføj StrUtils til din uses, RightStr befinder sig i denne unit.

Her er selve funktionen:
procedure FindLabels(C : TComponent;Tekst : string;var ai : Tai);
var
    i : integer;
begin
    for i:=0 to C.ComponentCount-1 do
      if (C.Components[i] is tlabel) and ((C.Components[i] as tlabel).Caption=Tekst) then
      begin
          SetLength(ai,Length(ai)+1);
        ai[Length(ai)-1]:=RightStr(C.Components[i].Name,1);
      end;
end;

---------

Hvis du vil finde alle labels på din form der indeholder 'goddag' kan du bruge den sådan:

procedure TForm1.Button2Click(Sender: TObject);
var
    ai : Tai;
  i : integer;
begin
    FindLabels(Self,'goddag',ai);
  for i:=0 to Length(ai)-1 do
      showmessage(ai[i]);
end;
Avatar billede hclarsen Nybegynder
13. april 2006 - 11:59 #15
det ser rigtig fint ud - læg gerne et svar Kroning.
Avatar billede kroning Nybegynder
13. april 2006 - 12:01 #16
ok
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