PDA

View Full Version : دو سوال درباره function و procedure



siroosss
جمعه 04 بهمن 1392, 19:21 عصر
با سلام
فرض کنید یه function به شکل زیر داریم :

Function GetData(Rmo:RichEdit; PT:Pointer;): String;
Begin
End;

و یه پراکسیجر به شکل زیر :

procedure TForm2.RichEdit1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
Var S:String;
begin
S:=GetData(Sender as TRichEdit, pt);
End;

و اما سوال ، من دو تا سوال مهم دارم : 1 – چطور می تونم یه پارامتر از نوع integer به فانکشن اضافه کنم به نحوی که در پراکسیجر بتونم به صورت جدا ، مقدارش رو داخل یه متغیر قرار بدم (بهتراگه بخوام توضیح بدم باید بگم من می خوام دا خل پراکسیجر ، اون متغیر S رو ، تمام پارامتر هاش رو تفکیک کنم و هر کدومش رو داخل یه متغیر بریزم ، یعنی pt به تنهایی داخل یه متغیر و اگه فانکشن هر چند تا پارامتر داره همه اونا رو تو پراکسیجر به طور جدا داخل متغیر های متعدد بریزم)
2- دومین سوال : آیا از داخل فانکشن نمیشه به richEdit1 یا Label1 و یا هر چیز دیگه ای دسترسی داشت برای مثال یه مقداری که تو فانکشن به دست اومده ، داخل همون فانکشن تو RichEdit1.Text نشون داد؟

hp1361
شنبه 05 بهمن 1392, 09:16 صبح
با سلام

سوالتون یه نموره گنگه!

به طور کلی شما هر تعداد پارامتر که میل داشته باشید(البته یقیناً یه سقفی داره) میتونید به تابع یا روال پاس بدید و از هر تابع(Function) میتونید مقداری رو بعنوان برگشت دریافت کنید.

در مورد سوال دوم، همونطور که در کدهاتون میبینید فانکشن به فرم خاصی منتصب نشده در حالی که پراسیجر به TForm2 منتصب شده. لذا برای پراسیجر richEdit1 یا Label1 معنی داره اما برای فانکشن خیر! مگر اینکه شما فانکشن رو هم به عنوان توابع زیرمجموعه TForm2 تعریف کنید(تعریفش هم که فقط شامل عنوان نمودن تابع در لیست توابع فرم مربوطه و تعریف متن تابع یا همون Implement کردنش میشه مثل پراسیجر که انجام شده)

موفق باشیم

یوسف زالی
شنبه 05 بهمن 1392, 09:46 صبح
سلام.
در تکمیل:
وقتی دو تا تابع جدا دارید، هر کدوم به متغیر های محلی خودش دسترسی داره و تابع الف به متغیرهای محلی تابع ب نمی تونه دسترسی داشته باشه.
اینجا هم همین طوره، تابع آزاد شما نمی تونه به متغیرهای کلاس فرمتون دسترسی داشته باشه مگر این که نام شی مورد نظر از همون نوع کلاس (در اینجا نام فرم) رو قبلش بیارید. form1.richedit1
اگر امکانش هست تابع رو ببرید در محدوده private کلاس فرم تا بتونید به اجزای فرم مستقیم دسترسی داشته باشید.

siroosss
شنبه 05 بهمن 1392, 10:22 صبح
از هر دو شما متشکرم خیلی خوب توضیح دادید از این بهتر نمیشد