Справочник функций и процедур Delphi: With

  Навигация по первой букве:

A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z

  Навигация по категории:

Compiler directives, Directives, Keywords / Types, Variables, Constants / Functions, Procedures

  Реклама:

 

With
Ключевое слово
Средство упрощения ссылок к структурированным переменным unit
  
1 with data name do Statement;

2 with data name do
  begin
   Statement;
   {...}
  end;

Google  
 
Описание
Ключевое слово With - удобство, обеспеченное Delphi для того, чтобы сослаться на элементы сложной переменной, типа записи или объекта.

Это упрощает код, удаляя потребность в префиксе для каждого упомянутого элемента переменной со сложным именем.

Например:

myObject.colour:= clRed;
myObject.size:= 23.5;
myObject.name:= 'Fred';

может быть перезаписан:

With myObject do
begin
colour:= clRed;
size:= 23.5;
name:= 'Fred';
end;

Однако будьте осторожны, так как его использование может, к удивлению, сделать код более трудным для восприятия. А также это может создать такие проблемы, где изменение кода может подразумевать неправильный адресат для 'дочернего' поля, которое упоминают.
Примечания
В пределах предложения With, Delphi пробует решить эти 'неполные' ссылки, смотря сначала на адресат стоящий после With.

Затем просматриваются другие типы данных, типа локальных переменных, параметры подпрограмм и т.п. Это то, где начинаются некоторые опасности с ключевым With.

Используйте с осторожностью!
Похожие команды
Begin  Ключевое слово, которое начинает операторный блок

End  Ключевое слово, которое заканчивает операторные блоки

Record  Структурный тип данных содержащий поля данных

 
Пример кода : Использование ключевого слова with со структурой записи
type
  // Объявление записи клиента
  TCustomer = Record
    firstName : string[20];
    lastName  : string[20];
    address1  : string[100];
    address2  : string[100];
    address3  : string[100];
    city      : string[20];
    postCode  : string[8];
  end;

var
  John, Sarah : TCustomer;

begin
  // Установка подробностей клиента Джона
  With John do
  begin
    firstName := 'John';
    lastName  := 'Smith';
    address1  := '7 Park Drive';
    address2  := 'Branston';
    address3  := 'Grimworth';
    city      := 'Banmore';
    postCode  := 'BNM 1AB';
  end;

  // Установка подробностей сестры Джона - просто копируя целой записи
  Sarah := John;

  // И затем изменяем имя
  Sarah.firstName := 'Sarah';

  // Теперь показываем подробности обоих клиентов
  With John do ShowCustomer([firstName, lastName,
                             address1, address2, address3, city,
                             postCode]);
  With Sarah do ShowCustomer([firstName, lastName,
                             address1, address2, address3, city,
                             postCode]);
end;

// Процедура, которая отображает переменный число строк
procedure TForm1.ShowCustomer(const fields: array of string);
var
  i : Integer;

begin
  // Отображение всех переданных полей - примечание: массивы начинаются с 0
  for i := 0 to Length(fields)-1 do
    ShowMessage(fields[i]);
end;
John
Smith
7 Park Drive
Branston
Grimworth
Banmore
BNM 1AB

Sarah
Smith
7 Park Drive
Branston
Grimworth
Banmore
BNM 1AB
 


Copyright © 2004-2016 Delphi Sources (источник – "DelphiBasics.ru")
 


Группа ВКонтакте   Ссылка на Twitter   Группа на Facebook