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

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

with


Страницы:   1 2

paveltersh ©   (2007-09-11 16:44:00) 

Когда и зачем with используют так:

with Button1, Edit1, Edit2 do
begin
...


Это для примера, мой код. Но зачем with предполагает наличия нескольких переменных? И как это можно использовать?

Приведите пожалуйста пару примеров.


{RASkov}   (2007-09-11 20:36:00) [1]

> [26] новичёк   (11.09.07 20:11)
> Поиск идентификатора начнется с последнего вложения.

+1
Вот это наверное лучше и доходчивее, чем [20]. Сенькс :)


новичёк   (2007-09-11 20:11:00) [2]

with Button1, Edit1, Edit2 do

это сокращенное написание

with Button1 do
 with Edit1 do
   with Edit2 do

Поиск идентификатора начнется с последнего вложения.


Anatoly Podgoretsky   (2007-09-11 19:00:00) [3]

> paveltersh  (11.09.2007 16:44:00)  [0]

Такое лучше не использовать, а если вообще не понимаешь, то совсем не использовать.


DVM   (2007-09-11 17:28:00) [4]


> справка рулит

у меня не было нужды читать справку по конструкциям, которые я не использую.


Palladin   (2007-09-11 17:25:00) [5]


> DVM ©   (11.09.07 17:19) [22]

справка рулит


DVM   (2007-09-11 17:19:00) [6]


> {RASkov} ©   (11.09.07 17:17) [20]

Да, точно, последнее берет, я и не знал.

procedure TForm1.Button1Click(Sender: TObject);
begin
with label1, label2, label3 do
 begin
   caption := '12345';
 end;
end;

Меняется у Label3


{RASkov}   (2007-09-11 17:19:00) [7]

> [19] DVM ©   (11.09.07 17:15)

:)
Именно так. Но и если не обычный, но тоже имеет свойство Caption, то все равно три
Конечно же обычный имелось ввиду...
:о)


{RASkov}   (2007-09-11 17:17:00) [8]

> Компилятор не понимает, к полям какой конкретно из указанных
> записей ты обращаешься (то ли к VarRec1, то ли к VarRec2)
> , плюет на "понимание" и вставляет код обращения к первой
> же записи в порядке их перечисления, т.е. к VarRec1

Вообще-то там идет с первой и так далее пока есть такое поле в перечисленных переменных
и возьмет последнюю переменную из перечисленных переменных с таким полем....
(криво как-то получилось объяснить, но надеюсь понято правильно) :)


DVM   (2007-09-11 17:15:00) [9]


> То только три варианта :)

Если это обычный TForm, конечно, а не что другое с тем же именем.


{RASkov}   (2007-09-11 17:11:00) [10]

> [16] Вася Правильный   (11.09.07 17:08)
> больше :)

В данном месте

> with Button1, Button2 do
> Caption := 'dddddd';

сказать правельнее не меньше двух вариантов :)

А если точно и такой код:
procedure TForm.ButtonClick();
begin
 with Button1, Button2 do Caption:='dddd';
end;

То только три варианта :)


Сергей М.   (2007-09-11 17:09:00) [11]


> {RASkov} ©   (11.09.07 17:00) [13]


ТОчно)

Это уже у меняглюки, а не у компилятора)


Вася Правильный   (2007-09-11 17:08:00) [12]


> здесь ведь три варианта :)

больше :)
вдруг кто-то хочет сразу всем кнопкам один капшн присвоить


{RASkov}   (2007-09-11 17:07:00) [13]

> [14] Ega23 ©   (11.09.07 17:04)

Вот это наверное самое страшное место в этой "штуке" :)
Так как нет запрета писать такие глупые вещи как

with TButton.Create do WindowState:=wsMinimized;
:о)


Ega23   (2007-09-11 17:04:00) [14]

А ещё очень может подкосить, когда подсказкой пользуешься.
Был у меня компонентик, которому PopupMenu забыл в published вывести. А он был в protected.
И, как следствие:
procedure TForm1.InitAll;
begin
 With MyComponent do
  begin
    PopupMenu := ...;
  end;
end;


Ошибку полдня искал.


{RASkov}   (2007-09-11 17:00:00) [15]

> Чей кэпшен менять будем?
> здесь ведь три варианта :)

Только не думай что он сменит сразу всем трем Caption значение на 'ddddd'...
Третий вариант - это если этот код в методе формы, то Caption самой формы...


Германн   (2007-09-11 16:59:00) [16]


>
> > Что будет и чем плохо?
>
>
> Компилятор не понимает, к полям какой конкретно из указанных
> записей ты обращаешься (то ли к VarRec1, то ли к VarRec2),
>  плюет на "понимание" и вставляет код обращения к первой
> же записи в порядке их перечисления, т.е. к VarRec1

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


{RASkov}   (2007-09-11 16:58:00) [17]

> [9] paveltersh   (11.09.07 16:54)
> Или если
> with Button1, Button2 do
> Caption := 'dddddd';

Вот сам же отличный пример "путаницы" привел :)
Чей кэпшен менять будем?
здесь ведь три варианта :)


Сергей М.   (2007-09-11 16:57:00) [18]


> Что будет и чем плохо?


Компилятор не понимает, к полям какой конкретно из указанных записей ты обращаешься (то ли к VarRec1, то ли к VarRec2), плюет на "понимание" и вставляет код обращения к первой же записи в порядке их перечисления, т.е. к VarRec1


paveltersh   (2007-09-11 16:54:00) [19]

А если например так:

TRec1 = record
d1: string;
d2: Word;
end;

TRec2 = reocrd
 test: string;
 id: Word;
end;

with VarRec1, VarRec2 do
begin
 d1 := test;
 id := d2;


Что будет и чем плохо?

Или если
with Button1, Button2 do
Caption := 'dddddd';


Dimaxx   (2007-09-11 16:54:00) [20]

Проще их не использовать. Кода это не добавит, а понятнее будет в разы при разборе кода (особенно если писался давно).


Страницы:   1 2

Наверх

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