![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как присвоить событие, только что созданному объекту? [D6, WinXP]
OP © (2007-11-07 21:26:00)Доброе время суток, у меня такой вопрос:
Мне нужно чтобы на форме было K*K кнопок, при нажатии на которые обрабатывалось бы событие, в зависимости от номера кнопки(Принцип как в Сапере, при нажатии на кнопку нужно знать какая она по вертикали и какая по горизонтали...).
- Я создал массив: Button:array of TButton;
- Потом onFormCreate прописал создание кнопок:
теперь у меня есть раполпженные как в Сапере кнопки, с именами Button[1], Button[2] и тд...
- Создал процедуру ButtonClick и назначил её свойством кнопок onclick: Button[число меняющееся в цикле при создании].OnClick := ButtonClick;
- Теперь при нажатии на любую из созданных кнопок у меня выполняется действие ButtonClick.
Все бы хорошо, но действия должны зависеть от имени кнопки. Вот собственно вопрос:
Как в этой ситуации узнать имя Кнопки, для которой выполняется это событие?
OP (2007-11-08 16:47:00) [1]Спасибо всем, "проблему"(в кавычках пишу, потому что проблемой это назвать, язык не поворачивается) решилась - использовал (Sender As TButton).Tag
Amoeba (2007-11-08 16:46:00) [2]Если делать "Сапера", то использовать DrawGrid, состояние ячеек хранить в массиве и соответственно ему отрисовывать ячейки битмапами из ресурса или ImageList. Кнопки тогда нафиг нужны. Единственно придется сделать эти битмапы.
OP (2007-11-08 16:41:00) [3]
> 1. Если массив двумерный (K*K), то почему:
> Button: array of TButton
> вместо
> Button: array of array of TButton
> ?
Замечание по существу - исправлю:)
>
> 2. Если К известно заранее, то проще сделать ли массив статическим.
>
К становится известно только в процессе выполнения программы(размеры поля настраиваемы).
OP (2007-11-08 16:37:00) [4]
> Теоретически, делать "Сапёра" кнопками - это ужжос что такое!
> !! Лучше возьми массив из чисел, и прорисовывай его на форме
> самостоятельно! Функционал кнопок тут абсолютно не нужен,
> и будет только добавлять тормозов. Посмотри как "Сапёр"
> реализован у Н.Культина в книжке "Delphi в задачах и примерах".
>
Кнопки нужны только для эмулирования "нажатия", больше от них ничего не нужно, остальное и будет происходить в массиве и отображаться на форме без помощи кнопок. То есть кнопки после нажатия, будут просто исчезать:)
palva (2007-11-08 10:33:00) [5]
> Как в этой ситуации узнать имя Кнопки, для которой выполняется
> это событие?
>
(Sender As TButton).Name
Denis__ (2007-11-08 10:24:00) [6]
> то проще сделать ли массив статическим.
ИМХО проще забить на сапер:)
Юрий Зотов (2007-11-08 01:13:00) [7]> OP (07.11.07 21:26)
1. Если массив двумерный (K*K), то почему:
Button: array of TButton
вместо
Button: array of array of TButton
?
2. Если К известно заранее, то проще сделать ли массив статическим.
Германн (2007-11-08 00:44:00) [8]
> OP (07.11.07 21:26)
См. [1]
Только забудь про имена компонент и научись пользоваться свойством Tag.
Dib@zol (2007-11-07 22:09:00) [9]Теоретически, делать "Сапёра" кнопками - это ужжос что такое!!! Лучше возьми массив из чисел, и прорисовывай его на форме самостоятельно! Функционал кнопок тут абсолютно не нужен, и будет только добавлять тормозов. Посмотри как "Сапёр" реализован у Н.Культина в книжке "Delphi в задачах и примерах".
Servelat (2007-11-07 21:29:00) [10]Sender и есть твоя кнопка. Проверяй, что хочешь.