Создание компонентов в RUN-TIME
От: Ozone Россия  
Дата: 20.02.03 10:31
Оценка:
Создаю на форме несколько Edit'ов:

var
   Edit: array [1..5] of TEdit;
for i:=1 to 5 do begin
   Edit[i]:=TEdit.Create(Application);
   Edit[i].Parent:=Form1;
end;

Дак вот, как мне обрабатывать (для каждого) Edit[i] событие на изменение св-ва Text;
Re: Создание компонентов в RUN-TIME
От: _MarlboroMan_ Россия  
Дата: 20.02.03 10:36
Оценка:
Здравствуйте, Ozone, Вы писали:



procedure TMyForm.EditChange(Sender: TObject);
begin
//---------------------
end;

....
var
   Edit: array [1..5] of TEdit;
for i:=1 to 5 do begin
   Edit[i]:=TEdit.Create(Application);
   Edit[i].Parent:=Form1;
   Edit[i].OnChange := EditChange;
end;
... << RSDN@Home 1.0 beta 6a... наслаждаюсь Rammstein — Adios >>

— сколько программистов надо чтобы заменить сгоревшую лампочку?
— сколько не бери, а лампочку не поменять — проблема аппаратная, программным путем не решается...
Re[2]: Создание компонентов в RUN-TIME
От: Ozone Россия  
Дата: 20.02.03 10:44
Оценка:
Re[2]: Создание компонентов в RUN-TIME
От: Ozone Россия  
Дата: 20.02.03 10:52
Оценка:
Здравствуйте, _MarlboroMan_, Вы писали:

_MM_>Здравствуйте, Ozone, Вы писали:


_MM_>

_MM_>

_MM_>procedure TMyForm.EditChange(Sender: TObject);
_MM_>begin
_MM_>//---------------------
_MM_>end;

_MM_>....
_MM_>var
_MM_>   Edit: array [1..5] of TEdit;
_MM_>for i:=1 to 5 do begin
_MM_>   Edit[i]:=TEdit.Create(Application);
_MM_>   Edit[i].Parent:=Form1;
_MM_>   Edit[i].OnChange := EditChange;
_MM_>end; 
_MM_>


А как в процедуре EditChange узнать над каким именно 1..5 совершается действие
(просто мне нужно, чтобы при изм. 1-го данные заносились туда-то, при изм. 2-го туда-то, и т.д.)
Re[3]: Создание компонентов в RUN-TIME
От: _MarlboroMan_ Россия  
Дата: 20.02.03 10:59
Оценка:
Здравствуйте, Ozone, Вы писали:

O>А как в процедуре EditChange узнать над каким именно 1..5 совершается действие

O>(просто мне нужно, чтобы при изм. 1-го данные заносились туда-то, при изм. 2-го туда-то, и т.д.)

тут есть несколько подходов.

1. поименовать создаваемые контролы.
2. использовать проперть Tag.

procedure TMyForm.EditChange(Sender: TObject);
begin
    if not Sender is TButton then exit;

    //первый подход
    if TButton(Sender).Name = 'Edit1' then
    begin
    end;

    //второй подход
    case TButton(Sender).Tag of
    1: 
        begin
        end;
    end;
     

end;

....
var
   Edit: array [1..5] of TEdit;
for i:=1 to 5 do begin
   Edit[i]:=TEdit.Create(Application);
   Edit[i].Name :='Edit' + InToStr(i); //поименовать создаваемые контролы.
   Edit[i].Tag := i; // использовать проперть Tag.
   Edit[i].Parent:=Form1;
   Edit[i].OnChange := EditChange;
end;
... << RSDN@Home 1.0 beta 6a... наслаждаюсь Rammstein — Links 2-3-4 [Westbam Tech Mix] >>

— сколько программистов надо чтобы заменить сгоревшую лампочку?
— сколько не бери, а лампочку не поменять — проблема аппаратная, программным путем не решается...
Re[4]: Создание компонентов в RUN-TIME
От: Ozone Россия  
Дата: 20.02.03 11:08
Оценка:
Здравствуйте, _MarlboroMan_, Вы писали:

_MM_>Здравствуйте, Ozone, Вы писали:


O>>А как в процедуре EditChange узнать над каким именно 1..5 совершается действие

O>>(просто мне нужно, чтобы при изм. 1-го данные заносились туда-то, при изм. 2-го туда-то, и т.д.)

_MM_>тут есть несколько подходов.


_MM_>1. поименовать создаваемые контролы.

_MM_>2. использовать проперть Tag.

_MM_>
_MM_>procedure TMyForm.EditChange(Sender: TObject);
_MM_>begin
_MM_>    if not Sender is TButton then exit;

_MM_>    //первый подход
_MM_>    if TButton(Sender).Name = 'Edit1' then
_MM_>    begin
_MM_>    end;

_MM_>    //второй подход
_MM_>    case TButton(Sender).Tag of   //почему TButoo
_MM_>    1: 
_MM_>        begin
_MM_>        end;
_MM_>    end;
_MM_>     

_MM_>end;

_MM_>....
_MM_>var
_MM_>   Edit: array [1..5] of TEdit;
_MM_>for i:=1 to 5 do begin
_MM_>   Edit[i]:=TEdit.Create(Application);
_MM_>   Edit[i].Name :='Edit' + InToStr(i); //поименовать создаваемые контролы.
_MM_>   Edit[i].Tag := i; // использовать проперть Tag.
_MM_>   Edit[i].Parent:=Form1;
_MM_>   Edit[i].OnChange := EditChange;
_MM_>end; 
_MM_>


Но я изначально не знаю сколько будет Edit'ов. Как мне CASE организовать?
Re[5]: Создание компонентов в RUN-TIME
От: Zmei-Gorin Россия  
Дата: 20.02.03 11:18
Оценка:
Здравствуйте, Ozone, Вы писали:

O>Но я изначально не знаю сколько будет Edit'ов. Как мне CASE организовать?


А куда ты данные совать собрался???

Пользртаться Тагами и ифами, либо держать ещё один массив получателей данных.
Re[5]: Создание компонентов в RUN-TIME
От: Sinclair Россия https://github.com/evilguest/
Дата: 20.02.03 11:19
Оценка:
Здравствуйте, Ozone, Вы писали:

O>Но я изначально не знаю сколько будет Edit'ов. Как мне CASE организовать?

А как ты собрался в разные места данные отправлять, если ты даже количество едитов не знаешь??? Ты сначала с задачей определись, а потом уже и спрашивай.
... << RSDN@Home 1.0 beta 6 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[5]: Создание компонентов в RUN-TIME
От: _MarlboroMan_ Россия  
Дата: 20.02.03 11:22
Оценка:
Здравствуйте, Ozone, Вы писали:

O>Но я изначально не знаю сколько будет Edit'ов. Как мне CASE организовать?


можешь еще в цикле сканировать свой массив и по индексу определять что к чему...

    i := Low(Edit);
    while i < High(Edit) and not(Edit[i] is Sender) do
        inc(i);
    //дальше анализ i
... << RSDN@Home 1.0 beta 6a... наслаждаюсь Rammstein-07-Rein raus >>

— сколько программистов надо чтобы заменить сгоревшую лампочку?
— сколько не бери, а лампочку не поменять — проблема аппаратная, программным путем не решается...
Re[4]: Создание компонентов в RUN-TIME
От: Ozone Россия  
Дата: 20.02.03 11:26
Оценка:
Просто количество Edit'ов всегда разное (зависит от опред. условий)
Но когда я их создал, то я конечно же знаю сколько их у меня.
Вопрос в другом: когда я нажимаю на какой-то из этих Edit'ов — выполняется процедура EditChage(Sender: TObject) (см. выше). И в этой процедуре мне просто нужно узнать Tag активного Edit'а.
Re[5]: Создание компонентов в RUN-TIME
От: _MarlboroMan_ Россия  
Дата: 20.02.03 11:29
Оценка:
Здравствуйте, Ozone, Вы писали:

O>Просто количество Edit'ов всегда разное (зависит от опред. условий)

O>Но когда я их создал, то я конечно же знаю сколько их у меня.
O>Вопрос в другом: когда я нажимаю на какой-то из этих Edit'ов — выполняется процедура EditChage(Sender: TObject) (см. выше). И в этой процедуре мне просто нужно узнать Tag активного Edit'а.

ну сделай набор IF ... THEN
еще рекомендую сделать несколько обработчиков и в зависимости от ситуации при создании контролов подсовывать нужный.
... << RSDN@Home 1.0 beta 6a... наслаждаюсь Rammstein-11-Mutter >>

— сколько программистов надо чтобы заменить сгоревшую лампочку?
— сколько не бери, а лампочку не поменять — проблема аппаратная, программным путем не решается...
Re: Создание компонентов в RUN-TIME
От: Ozone Россия  
Дата: 20.02.03 11:32
Оценка:
Всем огромное спасибо
Re: Создание компонентов в RUN-TIME
От: adbases Россия  
Дата: 25.02.03 09:37
Оценка:
Здравствуйте, Ozone, Вы писали:

O>Создаю на форме несколько Edit'ов:


O>
O>var
O>   Edit: array [1..5] of TEdit;
O>for i:=1 to 5 do begin
O>   Edit[i]:=TEdit.Create(Application);
O>   Edit[i].Parent:=Form1;
O>end; 
O>

O>Дак вот, как мне обрабатывать (для каждого) Edit[i] событие на изменение св-ва Text;

Edit[i].onChange:=ThisYourFunction — описываешь функцию....с такими же параметрами как и функция onChange
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.