![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
with
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]Проще их не использовать. Кода это не добавит, а понятнее будет в разы при разборе кода (особенно если писался давно).