Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как присвоить событие, только что созданному объекту? [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 и есть твоя кнопка. Проверяй, что хочешь.


Наверх

Титульная страница Поиск, карта сайта Написать письмо