Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.02.2009, 19:19
4EJIOBEK 4EJIOBEK вне форума
Прохожий
 
Регистрация: 13.12.2007
Адрес: Днепропетровск
Сообщения: 19
Репутация: 10
Восклицание Помогите с Events компонентов, созданых в Run-time

Создаю компоненты в Run-time. Они сохраняются в массив записи V.
При клике на какой-то он должен менять цвет.
Нашел такой Event...
Код:
V.Form_.OnMouseDown;  // Form_ :TShape; 
Но не знаю что с ним делать дальше...
И в FAQ нашел статью "Жизнь и смерть в Run-time".
Там многое написано... но у меня ничего не получается!
Ответить с цитированием
  #2  
Старый 22.02.2009, 01:14
Аватар для Rokuell
Rokuell Rokuell вне форума
Активный
 
Регистрация: 27.12.2006
Адрес: Псков
Сообщения: 274
Версия Delphi: Delphi 7
Репутация: 497
Сообщение Events...

В раздел 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  
Старый 22.02.2009, 07:47
4EJIOBEK 4EJIOBEK вне форума
Прохожий
 
Регистрация: 13.12.2007
Адрес: Днепропетровск
Сообщения: 19
Репутация: 10
По умолчанию

Большое Спасибо, это работает
Но есть пару вещей, которые теперь я преодолеть не могу...
1) уточнение по V
Код:
type
vtype = record
  form_:TShape;
  name_:TLabel;
end;
var v:array of vtype;
У меня есть RadioGroup при ItemIndex = 0 строится вершина с номером (TShape & TLabel), при = 1 при клике на вершину она должна загораться другим цветом. После 2 кликов на разных вершинах между ними проводится линия (ребро)...
Так вот...
У меня выходит так...
Код:
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  
Старый 22.02.2009, 11:41
Аватар для Rokuell
Rokuell Rokuell вне форума
Активный
 
Регистрация: 27.12.2006
Адрес: Псков
Сообщения: 274
Версия Delphi: Delphi 7
Репутация: 497
Сообщение Используй Sender

Есть 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  
Старый 22.02.2009, 14:23
4EJIOBEK 4EJIOBEK вне форума
Прохожий
 
Регистрация: 13.12.2007
Адрес: Днепропетровск
Сообщения: 19
Репутация: 10
Радость Спасибо!

Спасибо!!! Все работает!!! УРА!!!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:52.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025