Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
Технофашист
228 / 216 / 11
Регистрация: 11.03.2009
Сообщений: 887
1

Программное создание событий для кнопок

06.04.2011, 12:16. Показов 3638. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
есть главная форма, есть дочерняя.
При запуске дочерней создаются программно кнопки и им приписываются события.
При закрытие дочерней формы кнопки удаляются, так что можно создавать и вновь удалять без ошибок.
Проблема в том, что если в процедуре кнопок приписать вызов закрытия формы Form.Close, (т.е. нажал на кнопку и дочерняя закрылась форма), то после этого при следующем запуске дочерней формы вылезает ошибка чтения памяти.
Но главное если просто закрывать форму через крестик, то всё ок.

Вот создание кнопок:
Pascal
1
2
3
4
5
6
7
8
9
10
11
procedure TForm2.CrateButton(BName, BCaption : String; l1 : integer);
begin
    Buttons[l1] := TButton.Create(Form2);
    Buttons[l1].Parent := Form2;
    Buttons[l1].Left:=100*l1 + 10;
    Buttons[l1].Top := 135;
    Buttons[l1].Visible := true;
    Buttons[l1].Name := 'Button'+ BName;
    Buttons[l1].Caption := BCaption;
    Buttons[l1].OnClick := bOK;                //А здесь приписываем события для кнопок
end;


Процедура для события выглядит элементарно:
Pascal
1
2
3
4
5
6
7
8
9
procedure TForm2.bOK(Sender: TObject);
begin
  with (Sender as TButton) do
  if Name = 'ButtonOK' then Form1.Label1.Caption := 'ÎÊ'
  else if Name = 'ButtonCancel' then Form1.Label1.Caption := 'Îòìåíà';
 // и т.д.
      
   Form2.Close;                //А здесь закрываем дочернюю форму после нажатии кнопки
end;


Закрытие формы происходит так:
Delphi
1
2
3
4
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   DeleteButton(l-1);                     //Процедура удаления кнопок
end;

//Собственно сама процедура удаления:
Delphi
1
2
3
4
5
6
7
8
procedure DeleteButton(l : integer);
          var i : integer;
begin
   for i := 0 to l do
   begin
       Buttons[i].Destroy;
   end;
end;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.04.2011, 12:16
Ответы с готовыми решениями:

Программное создание кнопок
Всем привет. В последнее время в "самодельных" калькуляторах программистов-новичков очень часто...

Обработчик событий для динамических кнопок
Всем доброго времени суток. Суть вопроса такая: Необходимо сделать настраиваемую систему АРМ. То...

Программное создание кнопок и обработка событий для каждой из созданных
Здравствуйте! Понадобилось создать несколько кнопок в зависимости от количества строк в результате...

Программное создание кнопок и событий
Имеется такой вод код создающий кнопки, как этим кнопкам, задать обработку клика по ним? void...

3
306 / 187 / 26
Регистрация: 14.02.2010
Сообщений: 544
07.04.2011, 17:48 2
Вы пытаетесь уничтожить объект из фактически его же свойства(метода). Странно только, что исключение не выскакивает сразу, а только при следующем обращении к форме.
Используйте вместо непосредственного вызова DeleteButtons отложенную обработку, скажем, послав форме сообщение WM_CLOSE
1
160 / 159 / 13
Регистрация: 14.01.2010
Сообщений: 1,497
07.04.2011, 18:21 3
В делфи 2007 это работает, хотя может лучше в место close использовать hide;

Добавлено через 1 минуту
А лучше выложи исходник а то кто знает может не там ищешь
0
Noоb
03.01.2012, 15:56 4
используй функцию freeandnil(<здесь указываешь имя объекта для удаления>)
03.01.2012, 15:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.01.2012, 15:56
Помогаю со студенческими работами здесь

Программное создание и получение событий от любых создаваемых контролов
Люди интересная задача, просмотрел по форуму есть 2 или 3 топика по этому вопросу, но приведены...

Создание кнопок из кода и событий к ним
Проблемка такая, нужно чтобы создавались кнопки, при нажатии которой она запускала метод или...

Программное определение событий для элементов управления (из Access в Excel)
Всем добрый день! Столкнулся со следующей проблемой: Моя программа (написанная в MS Access)...

Обработка событий для массива кнопок
Здравствуйте. У меня в программе создается массив из N ImageButton. и для каждой кнопки нужно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru