Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2009, 13:32   #1
Zo0M
Пользователь
 
Регистрация: 09.07.2009
Сообщений: 42
По умолчанию Обращение к формам одного типа

Имеются 2 формы. Одна из них MDI-parent, вторая MDI Child
При создании второй формы на ToolBar`е первой формы появляется SpeedButton
Код:
CountBut:=CountBut+1;
TBut:=TSpeedButton.Create(nil);
TBut.Caption:=CountBut;
TBut.Parent:=Form1.ToolBar1;
TBut.Tag:=CountBut;
И появляется вторая форма

Код:
Form2:=TForm2.Create(nil);
Form2.Caption:='Окно #  '+IntToStr(CountBut);
Form2.Tag:=CountBut;
И так нужное количество мне форм.

Потом при закрытии одной из вторых форм делаем поиск соответствующей ей кпопки по tag`у

Код:
For temp1:=0 to Unit1.CountBut-1 do
 If Form1.TB.Buttons[temp1].Tag = TForm2(Sender).Tag then
 begin
 Form1.TB.Buttons[0].Destroy;
 end;
И удаляем форму и уменьшаем количество кнопок на 1
Код:
CountBut:=CountBut-1;
Action:=caFree;
Но выдаёт ошибку List Out Index Of Bounds()

Что я делаю не так?
Zo0M вне форума Ответить с цитированием
Старый 26.11.2009, 13:51   #2
MadReason
Ищу работу
Форумчанин
 
Аватар для MadReason
 
Регистрация: 16.02.2007
Сообщений: 269
По умолчанию

Цитата:
For temp1:=0 to Unit1.CountBut-1 do
If Form1.TB.Buttons[temp1].Tag = TForm2(Sender).Tag then
begin
Form1.TB.Buttons[0].Destroy;
end;

Form1.TB.Buttons[0].Destroy;
может таки не 0?
Пишу на Delphi все что угодно, недорого, красиво, с комментариями
###icq 107335###
MadReason вне форума Ответить с цитированием
Старый 26.11.2009, 14:02   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Не знаю у меня
Код:
 for i:=0 to ToolBar1.ButtonCount-1 do
  ToolBar1.Buttons[0].Free;
отрабатывает как положено.
Тебе вот это условие
Цитата:
If Form1.TB.Buttons[temp1].Tag = TForm2(Sender).Tag then
Мешает.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.11.2009, 22:23   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,528
По умолчанию

For temp1:=0 to Unit1.CountBut-1 //вычисляется ОДИН раз при входе в цикл
Form1.TB.Buttons[0].Destroy//уменьшает данное значение на 1
If Form1.TB.Buttons[temp1].Tag//при tem1= СТАРОЕ значение CountBut-1 дает List Out Index Of Bounds()

чтобы такого не было переверните цикл
for temp1:=Unit1.CountBut-1 downto 0
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 27.11.2009, 12:02   #5
Zo0M
Пользователь
 
Регистрация: 09.07.2009
Сообщений: 42
По умолчанию

Цитата:
Сообщение от MadReason Посмотреть сообщение
Form1.TB.Buttons[0].Destroy;
может таки не 0?
Да конечно)
Там Button[temp1]

Цитата:
Сообщение от Stilet Посмотреть сообщение
Не знаю у меня
Код:
 for i:=0 to ToolBar1.ButtonCount-1 do
  ToolBar1.Buttons[0].Free;
отрабатывает как положено.
Тебе вот это условие
Мешает.
А как это условие переработать?То есть вы как делаете?

з.ы Ща попробую перевернуть цикл

Кстати да, у меня почему то кнопки добавляются не в конец тулбара, а в начало.
Видимо у вас в конец, поэтому работает такая версия.
А как сделать, чтобы добавлялось в конец?
Zo0M вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
переход из одного типа в другой Лонли-Локли Общие вопросы Delphi 8 27.08.2009 12:39
Вопрос по формам Armatus Общие вопросы C/C++ 11 18.05.2009 17:44
Вопрос по формам max38934 Общие вопросы Delphi 4 18.05.2009 13:41
Переменные одного типа Xeon332 PHP 3 01.03.2009 13:59
Вопрос по формам UserOK Общие вопросы Delphi 6 13.05.2008 21:25