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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.01.2014, 16:59
Gareth Gareth вне форума
Активный
 
Регистрация: 21.03.2013
Адрес: Приднестровье
Сообщения: 202
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию События динамических компонентов

Здравствуйте.

Я хотел бы, что бы вы мне объяснили, каким образом можно сделать событие на компоненты, созданные в run-time?

И еще кое-что не понимаю...
как на одну кнопку, создавать компоненты, (допустим панель) и каждый раз с расстоянием от предыдущего. (это ве на одну кнопку, одно нажатие - 1 панель со своими left, top, width, heiht)

Последний раз редактировалось Gareth, 12.01.2014 в 19:05.
Ответить с цитированием
  #2  
Старый 13.01.2014, 01:06
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,035
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Заранее описываешь процедуру соотв. типа. Далее, созданному компоненту присваиваешь эту процедуру. Ну а смещение делается через сохранение координат последнего созданного компонента. Пример:
Код:
type
  TForm1 = class(TForm)
  ...
    procedure RunTimeButtonClick(Sender : TObject);
  end;

procedure TForm1.RunTimeButtonClick(Sender : TObject);
begin
  ShowMessage('Run-time event handler.');
end;

procedure TForm1.Button1Click(Sender : TObject);
var
  I : Integer;
  X, Y : Integer;
  RTButton : TButton;
begin
  X := 0;
  Y := 0;
  For I := 0 To 9 Do
    Begin
      RTButton := TButton.Create(Self);
      RTButton.Caption := 'Button ' + IntToStr(I);
      RTButton.OnClick := RunTimeButtonClick;
      RTButton.Top := Y;
      RTButton.Left := X;
      X := X + RTButton.Width;
      Y := Y + RTButton.Height;
    End;
end;
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
Gareth (14.01.2014)
  #3  
Старый 13.01.2014, 09:30
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

А для того, что бы потом различать, какой именно контрол вызвал событие,
можно делать так

Код:
type
  TForm1 = class(TForm)
   ...
     RTag:Integer;
   ...
     procedure RunTimeButtonClick(Sender : TObject);
   end;

...
procedure TForm1.RunTimeButtonClick(Sender : TObject);
var
  IndexOfButton:Integer;
 begin
  IndexOfButton:=TConmponent(Sender).Tag;//<<==--
  ShowMessage('Run-time event handler :'+IntToStr(IndexOfButton));
 end; 
...
  RTButton := TButton.Create(Self); 
  RTButton.Tag := RTag; Inc(RTag);//<<==--
Ответить с цитированием
Этот пользователь сказал Спасибо icWasya за это полезное сообщение:
Gareth (14.01.2014)
  #4  
Старый 28.03.2014, 20:18
Gareth Gareth вне форума
Активный
 
Регистрация: 21.03.2013
Адрес: Приднестровье
Сообщения: 202
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Заранее описываешь процедуру соотв. типа. Далее, созданному компоненту присваиваешь эту процедуру. Ну а смещение делается через сохранение координат последнего созданного компонента. Пример:

Скажите пожалуйста, хочу сделать так, что бы по нажатию кнопки, создавался компонент, еще одно нажатие, еще один компонент. И так неопределённое количество раз. То-есть заранее знать не могу, сколько будет.

И как заставить появляться новый компонент чуть ниже предыдущего?

Заранее спасибо!
Ответить с цитированием
  #5  
Старый 29.03.2014, 09:56
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от Gareth
...по нажатию кнопки, создавался компонент, еще одно нажатие, еще один компонент...И как заставить появляться новый компонент чуть ниже предыдущего?..

Вот пример
Ответить с цитированием
  #6  
Старый 01.04.2014, 21:37
Gareth Gareth вне форума
Активный
 
Регистрация: 21.03.2013
Адрес: Приднестровье
Сообщения: 202
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
Вот пример
А как сохранять динамически созданные компоненты?
С обычными можно обойтись ini.
А с этими?
Ответить с цитированием
  #7  
Старый 01.04.2014, 21:47
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Gareth
А как сохранять динамически созданные компоненты?
Можно через потоки:
Код:
procedure TStream.WriteComponent(Instance: TComponent);
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
Gareth (03.04.2014)
  #8  
Старый 03.04.2014, 01:23
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от Gareth
А как сохранять динамически созданные компоненты?...
Всё правильно, дал ложку, дай и хлеба вот пример
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
Gareth (03.04.2014)
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter