Instrukcja wiążąca with jest sposobem skracania odwołań do pól rekordów lub pól, właściwości i metod obiektów.
Składnia instrukcji with:
with obj do instrlub
with obj1, ..., objN do instr
gdzie obj jest zmienną stanowiącą odwołanie do obiektu lub rekordu, zaś instr jest dowolną instrukcją prostą lub strukturalną. Wewnątrz instrukcji, można odwoływać się do pól rekordu bądź do pól, właściwości i metod obiektu reprezentowanego przez obj używając jedynie ich identyfikatorów - bez kwalifikacji z obj.
Np. zadeklarowany poniżej rekord:
type TDate = record Day: Integer; Month: Integer; Year: Integer; end; var OrderDate: TDate;
można użyć w instrukcji wiążącej:
with OrderDate do if Month = 12 then begin Month := 1; Year := Year + 1; end else Month := Month + 1;
Jest to równoznaczne z zapisem:
if OrderDate.Month = 12 then begin OrderDate.Month := 1; OrderDate.Year := OrderDate.Year + 1; end else OrderDate.Month := OrderDate.Month + 1;
Każde odwołanie do zmiennej lub nazwy metody w instrukcji with jest interpretowane, o ile to możliwe, jako składnik wyspecyfikowanego obiektu lub rekordu. Jeśli istnieje inna zmienna lub metoda o takiej samej nazwie, można mieć do niej dostęp kwalifikując ją, jak w poniższym przykładzie:
with OrderDate do begin Year := Unit1.Year ... end;
Kiedy wiele obietów lub rekordów pojawia się po with, wewnętrzna instrukcja jest traktowana jako seria zagnieżdżonych instrukcji with. Zapis:
with obj1, obj2, ..., objN do instr
jest równoważny zapisowi:
with obj1 do with obj2 do ... with objN do instr
W tym przypadku, każde odwołanie do zmiennej lub nazwy metody w instrukcji jest interpretowane, o ile to możliwe, jako składnik objN; w przeciwnym razie, jeśli to możliwe, jako składnik objN–1; itd. Te same zasady stosują się interpretacji każdego obj, tj. przykładowo: jeśli objN jest składnikiem zarówno obj1 i obj2, odwołanie do niego interpretowane jest jako obj2.objN.