نقل قول نوشته شده توسط شاهین عشایری مشاهده تاپیک
سلام
همه شما با دستور With آشنایی دارید.
به کد زیر توجه کنید:
  with Memo1 do
begin

With Lines do
begin
Add('Line 1');
Add('Line 2');
end;

end;


کد بالا یک معادل جالب هم دارد که شاید افراد بسیاری کمی از آن اطلاع داشته باشند. جالب است بدانید که کد زیر دقیقاً معادل کد بالا است:
  with Memo1, Lines do
begin
Add('Line 1');
Add('Line 2');
end;


منبع:
http://www.nickhodges.com/post/How-N...tatements.aspx
مثالی که ذکر کردید جالب نیست ، خوب به جای اون کد :

with Memo1.Lines do
begin
Add('Line 1');
Add('Line 2');
end;


اون نوع استفاده از with برای اشیاء مختلف کاربردی هست ، مثلا :

var
StrList: TStringList;
I: Integer;
begin
StrList := TStringList.Create;
try
with ListBox1, StrList do
begin
Add('Item 1 in string list');
Add('Item 2 in string list');
Add('Item 3 in string list');
for I := 0 to Count - 1 do
Items.Add(Strings[I]);
end;
finally
StrList.Free;
end;
end;


البته به عنوان مثال و گرنه با Assign میشه راحت این مورد رو پیاده کرد .

از این شیوه در پروژه های بزرگ استفاده نکنید ، کد رو خیلی پیچیده میکنه و به نوشتن کدهای کثیف کمک شایانی میکنه و کار دیباگ کد رو بسیار پیچیده میکنه .

در ضمن اگر اشیاء انتخاب شده دارای متدهای یکسانی باشند متد شئ آخر در لیست With در نظر گرفته میشه ، مثلا تو همون کد بالا هم کلاس TStringList دارای متد Count هست هم کلاس TListBox ، همون کد بالا اگر به صورت زیر نوشته بشه دیگه کار نمیکنه :

var
StrList: TStringList;
I: Integer;
begin
StrList := TStringList.Create;
try
with StrList, ListBox1 do
begin
Add('Item 1 in string list');
Add('Item 2 in string list');
Add('Item 3 in string list');
for I := 0 to Count - 1 do
Items.Add(Strings[I]);
end;
finally
StrList.Free;
end;
end;


چون شئ ListBox1 به عنوان شئ دوم ( آخری ) به With ارجاع داده شده و ListBox1 حاوی هیچ آیتمی نیست و اصلا وارد حلقه نمیشه .

موفق باشید .