Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

События для динамических кнопок... [D2005, 2003]


FEV ©   (2009-10-16 16:34:00) 

Вот таким образом я считываю из файла количество кнопок, и создаю их...
Butt:=Ini.ReadInteger('Form','Buttons',1);
for i:=1 to butt do
begin
bt[i]:=tbutton.Create(self);
bt[i].Width:=Ini.ReadInteger('Button'+inttostr(i),'Width',100);
bt[i].Height:=Ini.ReadInteger('Button'+inttostr(i),'Height',100);
bt[i].Caption:=Ini.ReadString('Button'+inttostr(i),'Caption','Button'+inttostr(i));
bt[i].Left:=Ini.ReadInteger('Button'+inttostr(i),'Left',5);
bt[i].Top:=Ini.ReadInteger('Button'+inttostr(i),'Top',5);
bt[i].Font.Name:=Ini.ReadString('Button'+inttostr(i),'FontName','MS Sans Serif');
bt[i].Font.Size:=Ini.ReadInteger('Button'+inttostr(i),'FontSize',8);
if Ini.ReadInteger('Button'+inttostr(i),'ShowHint',0)<>0 then
begin
bt[i].ShowHint:=true;
bt[i].Hint:=Ini.ReadString('Button'+inttostr(i),'Hint','Hint');
end else bt[i].ShowHint:=false;
bt[i].OnClick:=BTNOnClick(i); пробовал еще просто BTNOnClick() и BTNOnClick(nil) и BTNOnClick(self)
bt[i].Parent:=form1;

Но я никак не могу настроить событие... Использую
bt[i].OnClick:=BTNOnClick(i); для запуска процедуры BTNOnClick(i)...
Есть сама процедура
procedure BTNOnClick(Sender: TObject); и пробовал BTNOnClick(i:integer) и BTNOnClick(Sender: TObject; i:integer)
var exec:string;
begin
exec:=Ini.ReadString('Button'+inttostr(i),'Exec','none');
if exec<>'none' then
if DirectoryExists(Disk+Exec) or fileexists(Disk+Exec) then
ShellExecute(bt[i].Handle, nil, pansichar(Disk+Exec), nil, nil, SW_SHOW);
end;

Не могу получить запуска. Параметр обязателен, без него запуститься не тот файл и причем с любой кнопки... хотя i:integer - глобальная переменная.
Вечно пишет For loop control variable must be simple local variable...


FEV   (2009-10-18 14:53:00) [1]

Спасибо!


Германн   (2009-10-16 17:00:00) [2]

bt[i].Tag:=i;

procedure TForm1.BTNOnClick(Sender: TObject);
begin
 case TButton(Sender).Taf of
    ...


RWolf   (2009-10-16 16:53:00) [3]


> глобальная переменная

а должна быть локальной, о чем Delphi и сообщает. Других в цикле FOR не положено.


clickmaker   (2009-10-16 16:51:00) [4]

bt[i].OnClick:=BTNOnClick;

procedure TForm1.BTNOnClick(Sender: TObject);


Наверх

Титульная страница Поиск, карта сайта Написать письмо