Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обращение к объекту [D7, WinXP]


SergeyAKM ©   (2006-08-18 21:51:00) 

В Delphi работаю недавно. До этого был Omnis. Так вот там был интересных ход.
На форме два Edit'та : Edit1 и Edit2
И код, где i: integer

i:=1;
Edit(i).Text:='';
i:=2;
Edit(i).Text:='';


исполнялся.
Есть ли такая возможность на Delphi.


Германн   (2006-08-19 02:30:00) [1]


> Джо ©   (19.08.06 02:21) [16]

5-ть с плюсом!
Не, ну кто-бы сомневался в твоих способностях! Только не
я!


Германн   (2006-08-19 02:23:00) [2]


> Джо ©   (19.08.06 02:12) [15]

Бывает. А уж у меня - так вообще вылазит за все разумные рамки :-)


Джо   (2006-08-19 02:21:00) [3]

Впрочем, в порядке шутки, такой синтаксис как в [0] вполне можно воссоздать на Delphi:
 TForm1 = class(TForm)
   ...
 private
   function Edit (Number: Integer): TEdit;
   ...
 end;

implementation

function TForm1.Edit(Number: Integer): TEdit;
var
 Cmp: TComponent;
begin
 Cmp := FindComponent(Format('Edit%d',[Number]));
 if Cmp is TEdit then
   Result := TEdit(Cmp)
 else
   Result := nil
end;


Теперь воспроизводим синтаксис языка Omnis (что бы это ни было):

i:=1;
Edit(i).Text:='';
i:=2;
Edit(i).Text:='';


:)


Джо   (2006-08-19 02:12:00) [4]

> [14] Германн ©   (19.08.06 02:09)
> Токмо и ты разберись с

Ну, опечатался я, опечатался. :) Точнее, неуклюже выразился и не прочитал свой пост перед отправкой...


Германн   (2006-08-19 02:09:00) [5]

Понял суть. Согласен в некоторых деталях.
Токмо и ты разберись с
> Джо ©   (19.08.06 01:04) [11]
>
> > [9] palva ©   (19.08.06 00:44)
> > Есть. Только скобки должны быть квадратными.
>
> И получится уродливая конструкция, ломающая здравое naming
> convention: называть массив Edit'ов — Edits. :)
>


Джо   (2006-08-19 01:24:00) [6]

> [12] Германн ©   (19.08.06 01:16)
> Серёга. А чем она "уродлива"?

Конструкция
var
 Edit: array of TEdit;

мне кажется уродливой в сравнении с

var
 Edits: array of TEdit;

из-за потенциальной путаницы, которую она может привнести.


Германн   (2006-08-19 01:16:00) [7]


> Джо ©   (19.08.06 01:04) [11]
>
> И получится уродливая конструкция, ломающая здравое naming
> convention: называть массив Edit'ов — Edits. :)

Серёга. А чем она "уродлива"?


Джо   (2006-08-19 01:04:00) [8]

> [9] palva ©   (19.08.06 00:44)
> Есть. Только скобки должны быть квадратными.

И получится уродливая конструкция, ломающая здравое naming convention: называть массив Edit'ов — Edit s. :)


Германн   (2006-08-19 00:48:00) [9]


> Ketmar ©   (19.08.06 00:44) [8]

А palva ©   (19.08.06 00:44) [9] нас всех обскакал. :-)


palva   (2006-08-19 00:44:00) [10]


> Есть ли такая возможность на Delphi.

Есть. Только скобки должны быть квадратными.


Ketmar   (2006-08-19 00:44:00) [11]

> [6] Германн ©   (19.08.06 00:42)
дык как раз всё от ситуации зависит. я же сказал "или", а не "только так". %-)


Германн   (2006-08-19 00:44:00) [12]

Да, "и не лучшели в данной ситуации его скляпать?


Германн   (2006-08-19 00:42:00) [13]


> Ketmar ©   (19.08.06 00:26) [5]
>
> > [4] Германн ©   (19.08.06 00:25)
> или не делать новый велосипед и использовать Controls[].
>  %-)
>

Ну так, "осторожно говоря" (не дай бог опять дать тебе повод "размазать" меня "по полной"), а ты учёл сколько может быть на форме контроллов? С учётом наличия на вышеописанной TTabControl, TPageControl, TTabSet, TTabbedNotebook?
Не проще ли в данной ситуации "скляпать велосипед"?


Ketmar   (2006-08-19 00:26:00) [14]

> [4] Германн ©   (19.08.06 00:25)
или не делать новый велосипед и использовать Controls[]. %-)


Германн   (2006-08-19 00:25:00) [15]


> Но вполне можно искать по имени, используя метод FindComponent.

Или при создании этих компонент заполнять массив Edits = array of TEdit, если они создаются в рантайме. Или заполнять сей массив в обработчике формы OnCreate, OnShow, если они созданы в дизайнтайме.


SergeyAKM   (2006-08-18 21:58:00) [16]

Благодарю за ответ и оперативность.


Джо   (2006-08-18 21:56:00) [17]

> [1] Джо ©   (18.08.06 21:54)

Но вполне можно искать по имени, используя метод FindComponent.


Джо   (2006-08-18 21:54:00) [18]

> Есть ли такая возможность на Delphi.

Такойнету.


Наверх

Титульная страница Поиск, карта сайта Написать письмо