Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Определение динамически созданного элемента.


Автор: ivan219 30.5.2007, 19:58
Код

type
  TEditGroup = class(TCustomControl)
  private
      FEdit: Array of TEdit;
.
.
.
    for I:=0 to FEditList.Count-1 do
     begin
      FEdit[I]:=TEdit.Create(Self);
      FEdit[I].Parent:=Self;
      FEdit[I].Top:=FTop;
      FEdit[I].Text:='0';
      FEdit[I].OnChange:=EOnChange;
.
.
.
.


Как узнать в какой из всех Edit в водится текст???

Автор: Romikgy 30.5.2007, 20:18
имхо можно tag заюзать smile

Автор: MetalFan 30.5.2007, 20:23
Цитата(ivan219 @  30.5.2007,  19:58 Найти цитируемый пост)
Как узнать в какой из всех Edit в водится текст

в EOnChange Sender'ом будет  smile 

Автор: Sunvas 30.5.2007, 23:05
Определяешь имя/таг  Sender-а и будет тебе радость.

Автор: ivan219 31.5.2007, 18:05
Цитата(Romikgy @  30.5.2007,  20:18 Найти цитируемый пост)
имхо можно tag заюзать

Если без Sender готов выслушать.

Цитата(MetalFan @  30.5.2007,  20:23 Найти цитируемый пост)
в EOnChange Sender'ом будет

Это я знаю но вот Sender мне ненравится.

Цитата(Sunvas @  30.5.2007,  23:05 Найти цитируемый пост)
Определяешь имя/таг  Sender-а и будет тебе радость.

Нет мне достаточно только Name но вот только нехочу сним связыватся.

Мне нужен вареант без Sender smile 

Автор: Sunvas 31.5.2007, 18:20
Цитата(ivan219 @  31.5.2007,  18:05 Найти цитируемый пост)
Это я знаю но вот Sender мне ненравится.

Это принципиально, или вызвано какими-то особенностями программы?
По любому в процедуру что-то нужно передавать, т.к. сама процедура не знает кто ее вызывает. Проще всего передавать Sender, но если хочется экотики, то можно отслеживать активный контрол во время выполнения процедуры, потом узнавать, что это кнопка...

Автор: Lexicss 31.5.2007, 19:49
Ну если ты хочешь без Sender, то создать ещё по циклу процедуры EOnChange на каждый объект TEdit.

Автор: ivan219 31.5.2007, 20:08
Цитата(Sunvas @  31.5.2007,  18:20 Найти цитируемый пост)
Это принципиально, или вызвано какими-то особенностями программы?

Пишу компонент и если создавать его обычным способом то проблем нет
Код

FEdit[I].Name:=Name+IntToStr(I);

а вот если его динамически то предётся присваевать ему имя в противном случае будет совпадение имён Edit у разных компонентов.
Ну вобщемто это неудобством назвать трудно просто думал может другой способ есть smile 

Цитата(Lexicss @  31.5.2007,  19:49 Найти цитируемый пост)
Ну если ты хочешь без Sender, то создать ещё по циклу процедуры EOnChange на каждый объект TEdit.

И как мне вот этот код:
Код

procedure TEditGroup.EOnChange(Sender: TObject);
begin
  if FBlock then Exit;
  EditCh(Sender);
  if Assigned(FOnChange) then FOnChange(Self);
end;

Присвоить всем динамически созданным Edit и чтобы каждый думал что это его и путаници небыло???
Код

 EditCh(Sender); //Здесь можно передавать и Index Edit

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)