Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

Re[3]: Работа с ToolBar

Конкретнее

Если не использовать массив but: array[0..100] of ttoolbutton то все
работает...
а если использовать вылетает ошибка..

procedure kill();
var
i:integer;
begin
for i:= 0 to (form3.tool.ControlCount -1) do
form3.tool.Buttons[0].Destroy;
end;

procedure TForm3.mainf(Sender: TObject);
var
arr:string;
tmpstr:string;
tmpint:integer;
exitb:ttoolbutton;
back:integer;
i:integer;
but: array[0..100] of ttoolbutton;
begin
inc(level);
index:=strtoint(ttoolbutton(sender).hint);
arr:=ttoolbutton(sender).Caption;
//Переход на товар+++++++++++++++++++++++++
if level=5 then begin
start.keyoftov:=index;
form3.hide;
form4.show;
form4.datatab.Active:=false;
form4.datatab.TableName:='base/tovar.db';
form4.datatab.Active:=true;
exit;
end;
//++++++++++++++++++++++++++++++++++++++++
kill();
//+++++++++++++++++Exit button++++++++++++
exitb:=ttoolbutton.Create(self);
exitb.Parent :=tool;
exitb.Caption :='Назад';
exitb.ImageIndex:=83;
if level=2 then exitb.OnClick :=formcreate else
exitb.OnClick :=backf;
//++++++++++++++++++++++++++++++++++++++++

//Выбираем базу для работы
if level=2 then begin
p1.Visible :=true;

while Pos(' ', arr) > 0 do
arr[Pos(' ', arr)] := #0;
p1.Caption :=arr;

start.t2.Active :=false;
start.t2.TableName :='base/level2.db';
start.t2.Active :=true;
end;
if level=3 then begin
p2.Visible :=true;
while Pos(' ', arr) > 0 do
arr[Pos(' ', arr)] := #0;
p2.Caption :=arr;
pp1.Visible :=true;
start.t2.Active :=false;
start.t2.TableName :='base/level3.db';
start.t2.Active :=true;
end;
if level=4 then begin
p3.Visible :=true;

while Pos(' ', arr) > 0 do
arr[Pos(' ', arr)] := #0;

p3.Caption :=arr;
pp2.Visible :=true;
start.t2.Active :=false;
start.t2.TableName :='base/raz.db';
start.t2.Active :=true;
end;
//выбрали

form3.backar[level]:=index;
for i:=0 to start.t2.recordcount-1 do begin
if start.t2.fieldbyname('Keystart').AsInteger=index then begin
but[i]:=ttoolbutton.Create(self);
but[i].Parent :=tool;
but[i].ImageIndex:=22;
but[i].Wrap:=true;
//Удлинним имя менюшки пробелами чиста для эстетики
tmpstr:='';
tmpstr:=start.t2.fieldbyname('name').AsString;
for tmpint:=1 to (30-length(start.t2.fieldbyname('name').AsString))
do tmpstr:=tmpstr+' ';
but[i].Caption:=tmpstr;
//Удлиннили++++++++++++++++++
but[i].Hint:=start.t2.fieldbyname('key').Asstring ;
but[i].OnClick:=mainf ;
end;
start.t2.Next;
end;
end;

Sad Spirit
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   "Sad Spirit" Thu, 8 Jan 2004 12:00:11 +0500 (#49087)

 

Ответы:

В сообщении от Четверг 08 Январь 2004 09:00 Sad Spirit написал:

Не стал разбираться с этим исходником... Мрак... Как Вы сам в этом плаваете?

Не даром отступы программисты придумали :)
Но я думаю проблему можно решить другим способом:
1. если надо очистить тулбар от кнопок, то можно пересоздать сам тулбар.
2. Если надо удалить только некоторые кнопки, которые перечислены в массиве
but, то уж следует следовать :) золотым правилам программирования, например,

удалять эти кнопки используя тот же массив, в котором их и создавали
3. Потом зачем вообще масив? не проще бы использовать TList или TStringList (с

использованеием Objects[])?
4. Извиняюсь за наезд - я никого лично не имею в виду, но есть еще одно
золотое правило: коряво написанная программа и работает коряво.

Дима Федотов.
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Dima Fedotov Thu, 8 Jan 2004 10:11:51 +0200 (#49158)