Показать сообщение отдельно
  #20  
Старый 10.07.2011, 21:37
UFO 007 UFO 007 вне форума
Новичок
 
Регистрация: 28.11.2010
Сообщения: 54
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Либо объявляейте массив кнопок глобально, либо через перебор компонентов родителя кнопок
и действительно, без массива - никак, т. к. поутру оказалось, что все кнопки (хоть и с разными .Caption) являются клонами одного экземпляра... Добрался я и до .Caption, и до .Name (стоило лишь декларацию Sbutton1 : TSoundButton; сделать не локальной [в процедуре], а глобальной [перед implementation]), но ListBox1 отображал: Sbutton3(Наме) и Util(Кэпшн) на какую кнопку не ткни.... Хорошо - объявляю
Код:
var
  Form1: TForm1;
  But: Array of TSoundButton;
  ....
локально объявлять бессмысленно - исчезнет по end процедуры, но
Код:
Procedure CreateButtons(DirName: string);
begin
  Sbutton1:= TSoundButton.Create(Form1);//ñîçäà¸ì êíîïêó íà ôîðìå
  with Sbutton1 do
  begin
    Name:= 'SButton' + inttostr(ButCount);
    .....
    parent:=form1.ScrollBox1;
    Sbutton1.OnClick := Form1.SButtonClick;
  But[ButCount]:= Sbutton1;
//form1.ListBox1.Items.Add(Sbutton1.Name);
  end;
  Top_:= Top_ + 30;
  Inc (ButCount);
end;
при компилировании вызывает ошибку EAccessViolation...

И в чём тут соль???

З. Ы. А если не секрет: как перебираются компоненты родителя кнопок?
спапибо
Ответить с цитированием