PDA

View Full Version : ارسال پارامتر اختیاری



baran_2005
شنبه 30 آبان 1388, 11:37 صبح
سلام
چطور می توان به یک تابع پارامتر اختیاری ارسال کرد . مثلا اگر ورودی تابع dbgrid و stringgrid باشد و تنها بخواهیم یکی از انها را ارسال کنیم باید چکار کرد . من فعلا با دادن مقدار اولیه nil به ورودی تابع پارامترها را ارسال می کنم مانند زیر

Procedure Draw_Chart(Grid:TDBGrid=nil;TMSGrid:TDBadvGrid=nil );

که در این حالت در صورتی که ورودی ، Grid باشد مشکلی نیست اما اگر TMSGrid باشد در زمان
فراخوانی باید دو پارامتر nil و grid مورد نظر ارسال شود .

حالت اول
Draw_Chart(Grid_Mode);
حالت دوم
Draw_Chart(nil,Grid_Mode);

ایا راه دیگری هم هست ؟

zidane
یک شنبه 01 آذر 1388, 21:50 عصر
باید دو تا تابع بنویسید ولی بصورت overload:

procedure ShowMsg(Str:string);overload;
begin
ShowMessage(Str);
end;

procedure ShowMsg(Num:Integer);overload;
begin
ShowMessage(IntToStr(Num));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMsg('test');
ShowMsg(1);
end;
البته اینا رو هم توی p30world نوشتم هم اینجا :لبخند:

SYNDROME
دوشنبه 02 آذر 1388, 06:43 صبح
می توانی مقادیر پیش فرض معرفی کنید.


Procedure Test(Name:string='Ali');
Begin

End;

حالا می توانی بدون پارامتر نیز Procedure را فراخونی کنی.
اگر چند پارامتر داری پارامترهایی که مقادیر پیش فرض دارند باید در آخر معرفی شوند.


خطا
Procedure Test(Name:string='Ali'; Family:string);
Begin

End;
درست
Procedure Test(Family:string;Name:string='Ali');
Begin

End;

موفق باشید

baran_2005
دوشنبه 02 آذر 1388, 09:11 صبح
با تشکر از دوستان
با overload کردن باید دو تابع تعریف کنم اما من نمی خواهم این عمل را انجام دهم . من خودم در سوالم گفتم راهی به جز دادن مقدار اولیه به تابع نیاز دارم . اما با فرستادن object و مشخص کردن parent با is ,as فکر کنم مشکلم حل بشه .