![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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_ будут вызываться твои обработчики |
|
#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; |
|
#5
|
|||
|
|||
|
Спасибо!!! Все работает!!! УРА!!!
![]() |