![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Создаю компоненты в Run-time. Они сохраняются в массив записи V.
При клике на какой-то он должен менять цвет. Нашел такой Event... Код:
V.Form_.OnMouseDown; // Form_ :TShape; ![]() И в FAQ нашел статью "Жизнь и смерть в Run-time". Там многое написано... но у меня ничего не получается! ![]() |
#2
|
||||
|
||||
![]() В раздел public описания формы добавляешь нужную процедуру обработки
а потом присваиваешь её событию: Код:
type TForm1 = class(TForm) ... public procedure MClick(Sender: TObject); procedure MMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); end; ... procedure TForm1.MClick(Sender: TObject); begin (Sender as TForm).Color := clBlack; // Если это форма, то TForm // Если нет - ставь другой тип end; procedure TForm1.MMouseDown(Sender: TObject); begin ... end; procedure TForm1.FormCreate(Sender: TObject); begin V.Form_.OnClick := MClick; V.Form_.OnMouseDown := MMouseDown; end; В итоге при наступлении событий OnClick и OnMouseDown у объекта Form_ будут вызываться твои обработчики Велик и могуч наш Object Pascal ! ICQ: 357-591-887 |
#3
|
|||
|
|||
![]() Большое Спасибо, это работает
![]() Но есть пару вещей, которые теперь я преодолеть не могу... 1) уточнение по V Код:
type vtype = record form_:TShape; name_:TLabel; end; var v:array of vtype; Так вот... У меня выходит так... Код:
procedure TForm1.FormCreate(Sender: TObject); var i:word; begin for i:=0 to now-1 do // now - количество вершин begin v[i].Form_.OnMouseDown:=MMouseDown; end; end; procedure TForm1.MMouseDown(Sender: TObject); begin v[abc].Form_.Brush.Color:=clGreen; // abc - номер вершины, но неясно end; // как этот номер получить... Вот... и что с этим делать не знаю... |
#4
|
||||
|
||||
![]() Есть 2 варианта.
1: Используй свойство Tag у компонента TShape при его создании и занесении в массив записывай туда индекс массива. Код:
var V : array [1..10] of vtype; // для примера взял статический массив procedure TForm1.FormCreate(Sender: TObject); var i:word; begin for i:=0 to now-1 do // now - количество вершин begin v[i].Form_.OnMouseDown:=MMouseDown; v[i].Form_.Tag := i; end; end; procedure TForm1.MMouseDown(Sender: TObject); var abc:integer; begin abc := (Sender as TShape).Tag; v[abc].Form_.Brush.Color:=clGreen; // abc - номер вершины end; 2: Если тебе в принципе индекс объекта в массиве больше ни для чего не нужен, а только чтобы изменить цвет, то можно сделать проще: Код:
procedure TForm1.MMouseDown(Sender: TObject); begin (Sender as TShape).Brush.Color:=clGreen; // номер вершины нам не нужен, мы можем сразу изменять // свойства объекта Sender , для которого было вызвано событие end; Велик и могуч наш Object Pascal ! ICQ: 357-591-887 |
#5
|
|||
|
|||
![]() Спасибо!!! Все работает!!! УРА!!!
![]() ![]() ![]() |