tags:

views:

54

answers:

1

Hello,

I'm sorry if the question looks stupid,but It seems I can't use my head properly in the last hours.

I have a record,

type
  TMain = record
    Sub:Array of TSubMain; //another record
    Button:TsSpeedButton; //this is what we need!
  end;

a variable

 Main:Array of TMain;

and function:

procedure TFrameSkilLView.CreateButtons(MainBtns,SubMainBtns:byte;title:Array of    string);
var i,t,l,w,h:word;
section:string;
begin
  l := 41; t:= 57; w := 58; h := 25;
  section := 'TOOLBTN_SKILLS_MAIN';
  for i := 0 to MainBtns + subMainBtns - 1 do
  with TsSpeedButton.Create(nil) do begin
    Width := w; Height := h; Top := t; Left := l;
    if(i = 0) then SkinData.SkinSection := section + '_C' else skindata.SkinSection := section;
    caption := title[i];
    Parent := Self;
    inc(l,w+4);
    if(i = MainBtns - 1) then begin
      l := 52; t := 83; w := 64; h := 28;
      section := 'TOOLBTN_SKILLS_SUBMAIN';
    end;
  end;
end;

Lets focus on the loop 'for i := 0 to MainBtns + subMainBtns - 1'.I'd like to add the button created below to the array created above named 'Main:Array of Tmain'.

It should look like this:

for i:=0 to X do
with TsSpeedButton.Create(nil) do begin
Main[i] := this; //where this is the created sSpeedButton.

Howeve,this code can't even be compiled,so I'm asking for a doable way to accomplish what I'm trying to do.

Thank you.

+3  A: 

First off, "this" is C++, not Pascal. The Delphi version is "Self". Second, you can't refer to the with-ed object by name. You're better off not using with at all. Try something like this:

for i:=0 to X do
begin
  tempButton := TsSpeedButton.Create(nil);
  Main[i] := tempButton;
  //whatever else
end;
Mason Wheeler
Hmm I found a much more efficient way to accomplish this,but I appreciate your answer.Accepted. :)
John
OK. So what's your better way, just out of curiosity?
Mason Wheeler