/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Knapper i array (Delphi 5.0)
Fra : Svenno


Dato : 18-08-01 15:25

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

 
 
Bear (18-08-2001)
Kommentar
Fra : Bear


Dato : 18-08-01 23:56

procedure TForm1.Button1Click(Sender: TObject);
var
buttons : array [0..11] of TButton;
i,top : Integer;
begin
top := 20;

for i := 0 to 11 do
begin
buttons[i] := TButton.Create(self);
buttons[i].Parent := self;
buttons[i].left := 10;
buttons[i].top := top;
buttons[i].Width := 50;
buttons[i].Caption := 'Button'+IntToStr(i);
top := top + 50;
end;
end;


--
mvh

Bear

ICQ: 2745075
"Svenno" <nospam@nowhere.dk> wrote in message
news:s2usnt874op656rm3k79hmi0ir2thtohvj@4ax.com...
> 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



Svenno (19-08-2001)
Kommentar
Fra : Svenno


Dato : 19-08-01 14:40

On Sun, 19 Aug 2001 00:55:40 +0200, "Bear" <bdr@NOSPAMsol.dk> wrote:

> procedure TForm1.Button1Click(Sender: TObject);
> var
> buttons : array [0..11] of TButton;
> i,top : Integer;
> begin
> top := 20;
>
> for i := 0 to 11 do
> begin
> buttons[i] := TButton.Create(self);
> buttons[i].Parent := self;
> buttons[i].left := 10;
> buttons[i].top := top;
> buttons[i].Width := 50;
> buttons[i].Caption := 'Button'+IntToStr(i);
> top := top + 50;
> end;
> end;

Mange tak for hjælpen!

Michael X (10-11-2001)
Kommentar
Fra : Michael X


Dato : 10-11-01 11:12


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


Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408526
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste