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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.12.2008, 12:27   #1
Fruit
Пользователь
 
Регистрация: 16.01.2008
Сообщений: 21
Вопрос Процедуры для динамических объектов

Здраствуйте.
Есть небольшая проблема по поводу вызова процедуры для динамически созданного массива кнопок типа TBitbtn.
сам код:
Цитата:
procedure Tosnova.FormCreate(Sender: TObject);
var i:integer;
begin
for i:=1 to 46 do
begin
cmdPict[i] := TBitBtn.Create(osnova);
cmdPict[i].Parent := osnova;
cmdPict[i].Visible:=false;
end;
Т.о. создаются на форме 46 кнопок.
Пользователь последовательно щелкает на любые три из них - и они исчезают.
Но не могу найти, как на такие динамически созданные массивы кнопок сделать вызов процедуры OnClick()..
Fruit вне форума Ответить с цитированием
Старый 30.12.2008, 12:32   #2
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Цитата:
Сообщение от Fruit Посмотреть сообщение
Здраствуйте.
Есть небольшая проблема по поводу вызова процедуры для динамически созданного массива кнопок типа TBitbtn.
сам код:

Т.о. создаются на форме 46 кнопок.
Пользователь последовательно щелкает на любые три из них - и они исчезают.
Но не могу найти, как на такие динамически созданные массивы кнопок сделать вызов процедуры OnClick()..
Нажатую кнопку уничтожаешь так: tButton(sender).free;
Это внутри обработчика.
Altera вне форума Ответить с цитированием
Старый 30.12.2008, 13:32   #3
Fruit
Пользователь
 
Регистрация: 16.01.2008
Сообщений: 21
По умолчанию

уку.. а можно просто cmdPict.visible:=false..
мне нужно вызвать процедуру OnClick у этой кнопки..
что-нить вроде
procedure Tosnova.cmdPictClick() - только для массива динамически созданных кнопок
Fruit вне форума Ответить с цитированием
Старый 30.12.2008, 13:44   #4
Deight
Бредовый
Форумчанин
 
Аватар для Deight
 
Регистрация: 15.11.2008
Сообщений: 285
По умолчанию

Я тоже на счет этого сейчас думаю, единственная мысль это создать класс от tbutton в классе обработать нажатие, а в массив добавлять этот класс.
Чем точнее и проще задан вопрос, тем проще на него получить точный ответ.
Deight вне форума Ответить с цитированием
Старый 30.12.2008, 14:11   #5
Манжосов Денис :)
Участник клуба
 
Регистрация: 29.01.2008
Сообщений: 1,039
По умолчанию

Код:
procedure Tosnova.FormCreate(Sender: TObject);
var i:integer;
begin
for i:=1 to 46 do
begin
 cmdPict[i] := TBitBtn.Create(osnova);
 cmdPict[i].Parent := osnova;
 cmdPict[i].Visible:=false;
 cmdPict[i].OnClick := cmpPictClick;
end;
cmdPictClick - это процедура, объявляется где угодно...
Цитата:
procedure cmdPictClick(Sender: TObject);
begin
tButton(sender).free;
end;
Этот пример не пробовал, но надеюсь, что он будет работать...
Манжосов Денис :) вне форума Ответить с цитированием
Старый 30.12.2008, 15:38   #6
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Не будет. Обработчик события должен быть методом класса. В остальном все правильно.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 30.12.2008, 16:34   #7
Fruit
Пользователь
 
Регистрация: 16.01.2008
Сообщений: 21
По умолчанию

Спасибо, все получилось))
Немного поэкспериментировали- и все заработало)

Немного не по теме, но как из кнопки типа TBitBtn извлечь адрес рисунка?
cmdPict[n[1]].Glyph.GetNamePath() ?
Fruit вне форума Ответить с цитированием
Старый 30.12.2008, 17:35   #8
Роман Радер
Форумчанин
 
Аватар для Роман Радер
 
Регистрация: 16.12.2006
Сообщений: 859
По умолчанию

Нет, не так. По-поему никак-оно загружает файл, а путь не сохраняет. Я вижу такое решение: если перед загрузкой загнать в какую-то переменную/массив строк.
Роман Радер вне форума Ответить с цитированием
Старый 30.12.2008, 21:10   #9
Fruit
Пользователь
 
Регистрация: 16.01.2008
Сообщений: 21
По умолчанию

уку.. Спасибо, так и сделаем)
Тему можно закрыть
Fruit вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление динамических объектов / полная очистка формы 095 Общие вопросы Delphi 3 23.04.2012 16:09
Одна функция для нескольких объектов Salomon Помощь студентам 2 25.11.2008 16:32
добавление процедуры для формулы Lenivec** Общие вопросы C/C++ 1 07.09.2008 08:54
Создание и использование динамических структур Oksana11 Помощь студентам 5 09.01.2008 19:39