Hej Svenno !
De følgende kodesnipper er skrevet ind som email direkte
og er ikke blevet test-compilet .. Der kan derfor godt være
syntax-fejl, men metoderne jeg demonstrerer skulle være gode nok.
Du har flere muligheder.
En måde er :
var
loop: integer;
begin
for loop:=0 to Form.ComponentCount - 1 do
begin
if Form.Components[loop] is TButton then
TButton(Form.Components[loop]).Caption:='Halløjsa';
end;
end;
Ovenstående vil sætte caption på ALLE kanpper på en given form.
Er du kun ude på at ramme et specifikt antal knapper ud af mange, kan
du f.eks sætte deres Tags til en eller anden værdi og så medtage det
som betingelse .. Således :
var
loop: integer;
begin
for loop:=0 to Form.ComponentCount - 1 do
begin
if (Form.Components[loop] is TButton) then
if TButton(Form.Components[loop]).Tag = 17 then
TButton(Form.Components[loop]).Caption:='Halløjsa';
end;
end;
Bemærk at formuleringen med to IF-sætninger istedet for en AND af
betingelserne fjerner en evt. short-circuit boolean evaluation
problematik.
Du kan også tage de lidt tungere værktøjer i brug ... Dynamisk
oprettelse af knapperne i Create-proceduren. Efterhånden som
du opretter knapperne gemmer du deres handle på en liste.
Denne liste kan senere itereres efter forgodtbefindende.
var
ButtonList: TList;
procedure TForm.Create;
var
loop: integer;
Button: TButton;
begin
ButtonList:=TList.Create;
for loop:=0 to 99 do
begin
Button:=TButton.Create(self);
PlaceButtonOnForm(Button);
Button.Caption:='Knap #'+IntToStr(loop);
ButtonList.Add(Button)
end;
end;
procedure TForm.SetCaptionForIndex(const Caption: string; ButtonIndex:
integer);
begin
ButtonList[ButtonIndex]).Caption:=Caption;
ButtonList[ButtonIndex]).ReFresh;
end;
procedure TForm.Destroy;
var
loop: integer;
begin
for loop:=0 to ButtonList.Count - 1 do
TButton(ButtonList[loop]).Free
end;
Samme metode kan fint anvendes sammen med statiske komponenter
(knapper), idet vi blot modificerer Create-proceduren således :
procedure TForm.Create;
var
loop: integer;
Button: TButton;
begin
ButtonList:=TList.Create;
ButtonList.Add(Button200);
ButtonList.Add(Button201);
ButtonList.Add(Button202);
ButtonList.Add(Button203);
ButtonList.Add(Button204);
ButtonList.Add(Button205);
for loop:=0 to 99 do
begin
Button:=TButton.Create(self);
PlaceButtonOnForm(Button);
Button.Caption:='Knap #'+IntToStr(loop);
ButtonList.Add(Button)
end;
end;
Der er syvhunredeogsyv andre måder ... Specificer dit problem lidt
nøjere ...
Mvh.
Michael X
On Sat, 18 Aug 2001 16:24:51 +0200, Svenno <nospam@nowhere.dk> wrote:
>Hej!
>
>Jeg står med et lille problem, som jeg håber I kan hjælpe mig med. Jeg
>er ved at skrive et program i Inprise Borland Delphi 5.0, og jeg ville
>så spørge om det er muligt at lave fx. 12 knapper i min form, således
>at de er sat i et array.
>
>det jeg fx. gerne ville kunne gøre:
>
>var
> i: integer;
>begin
> for i := 1 to 12 do MineKnapper[i].Caption := 'Halløjsa';
>end;
>
>kan det overhovedet lade sig gøre i Delphi?
>
>/Svenno