اضافه کردن توابع خود به توابع دلفی

Sampro

Member
ممنون سالک جان.
در مورد این لینکی که گفتی یه فکرایی به ذهنم رسید که نمی دونم درست فکر کردم یا نه

می خوام بدونم یعنی اگه مثلا من اینو به دلفی اضافه کنم (نمی دونم چه طوری , اسمشو می زارم اضافه کردن) یعنی مثل سی شاپ می تونم بعد از نوشتن نام یه متغیر رشته ای با زدن نقطه بعد از متغیر فهرست دستورات باز بشه و از اونجا مثلا من بتونم تابع isNumber رو فراخوانی کنم . یا اینکه من اشتباه فکرکردم ؟ اگه درست فکر می کنم این کد ها رو چه طوری باید نصب کنم.

ممنون می شم اگه بگید .

در ضمن فرهاد جان من همون اول رفتم و تو رخداد OnKeyPress ریختمش ولی اونجا خطا می ده که از نوع دیورد باید انتخاب کنید نه از نوع چر . در ضمن فکر کن یه کاربر یه مقدار رو یک دفعه ای تو این ادیته بریزه اون وقت برنامه هیچی نمی فهمه . نتیجه اینکه فکر کنم همون دست آخر کلکشو بکنیم بهتره . چاره ی دیگه ای نیست .:sad:

ممنون دوستان
 

saalek110

Well-Known Member
ایجاد یک یونیت برای توابع خودمان

دلفی را باز کنید. از منوی فایل New و سپس Unit و به این ترتیب اضافه کردن یک یونیت به پروژه.

محتوای این یونیت این می شود:
کد:
unit my_function;

interface

   function IsNumber(str :string): Boolean;

implementation

function IsNumber(str :string): Boolean;
var
  i: Integer;
begin
  Result := True;

  for i := 1 to Length(str) do

    if not (str[i] in ['0'..'9','.']) then

    begin
      Result := False;
      Exit;
    end;
end;

end.
آن را با نام my_function.pas در پوشه پروژه خود ذخیره کنید.
در یونیت اصلی my_function را uses کنید.
در یونیت اصلی داریم:
کد:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if  IsNumber(edit1.text) then showmessage('yes') else showmessage('no');
end;
اضافه کردن یک باتون و ادیت فراموش نشود.
تمام شد. کاری که در بالا انجام شد طرز افزودن یک یونیت به پروژه بود.
========================
پروژه دوم را بسازید.
آنرا در هارد ذخیره کنید.
باز my_function را uses کنید و کد زیر را بیافزایید:
کد:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if  IsNumber(edit1.text) then showmessage('yes') else showmessage('no');
end;
اضافه کردن یک باتون و ادیت فراموش نشود.

مسلم است که خطا می دهد چون یونیت my_function نداریم.
حالا my_function.dcu را به پوشه :
C:\Program Files\Borland\Delphi7\Lib
بیافزایید.
و حالا باز پروژه را اجرا کنید.

پروژه اجرا می شود.
یعنی شما تابعی به توابع دلفی اضافه کرده اید.

ولی بهتر است فایل های خود و کامپوننتهای دانلود شده خود را در پوشه ای در جای امن قرار دهید و آدرس آن را به آدرسهای کتابخانه های دلفی بیافزایید. مثلا ممکنه ویندوز را عوض کنیم و غیره.
 

saalek110

Well-Known Member
در سی شارپ قضیه فرق دارد.
وقتی در سی شارپ شما متغیری از نوع اینتیجر تعریف کنید. و بعد اسم متغیر یک نقطه می گذارید توابع باز می شود مثلا ToString . ولی در دلفی چنین نیست. یعنی بعد تعریف یک متغیر و بعد نوشتن نام متغیر پیغام زیر را دریافت می کنیم:
کد:
 [Pascal Error] Unit1.pas(1): Unable to invoke Code Completion due to errors in source code

و این تفاوت دلفی و سی شارپ در این مورد است.
در سی شارپ گویا خواسته اند از پایه هر چیزی(شامل متغیرها) یک شی باشد و صاحب متدها .
البته در سی شارپ هم بیشتر شبیه دلفی عمل می کنند یعنی برای تبدیل یک string به integer از روش دلفی استفاده می کنند. یعنی تابع تبدیل کننده را استفاده می کند.
در دلفی می نویسیم :
کد:
var
i : integer ;
str : string ;
begin
 str := inttostr( i);
end;
در سی شارپ هم به همین شکل نام تابع می نویسیم و داخل پرانتز هم متغیر را می نویسیم.
مثلا این طوری. فعلا درست یادم نیست:
کد:
            int i;
            string str;
            str = "123";
            i = Convert.ToInt32(str);

پس در کل قرار دادن نقطه بعد نام متغیر در دلفی فکر کنم منتفی باشد.
پس احتمالا باید همان ساخت توابع را پی بگیریم.
البته من مطمئن نیستم اینها را نوشتم تا بحث بشه.

اما در مورد مواردی که نقطه داریم در دلفی فکر کنم باید برویم کلاس مورد نظر را باز کنیم و توابع خود را به آن کلاس بیافزاییم. فکر کنم کار خیلی ساده ای باشد. ولی من تابحال نیاز نشده دنبال آن بروم.
 

farhad110

Member
اما در مورد مواردی که نقطه داریم در دلفی فکر کنم باید برویم کلاس مورد نظر را باز کنیم و توابع خود را به آن کلاس بیافزاییم. فکر کنم کار خیلی ساده ای باشد. ولی من تابحال نیاز نشده دنبال آن بروم.
دقيقا همين هست سالك جان
اگر برنامه نويس بخواد اين كار رو انجام بده:
- بايد يك كلاس تعريف كنه يا كلاسي رو از كلاس آماده مشتق كنه
- توابع مورد نياز رو بنويسه
- در برنامه استفاده كنه

مثلا:
نام كلاس: MyClass
نام تابع: IsNumber
پارامتر تابع: str (از نوع string)
خروجي تابع: boolean

روش استفاده:
کد:
[LEFT]MyClass.IsNumber(edit1.text);[/LEFT]
مقدار بازگشتي اين تابع مشخص ميكنه كه رشته edit1.text قابليت تبديل شدن به عدد رو داره يا خير

از اونجا كه بحث OOP در دلفي خيلي مفصل تر از موضوع اين تاپيك بود فقط به ذكر مثال كلي اكتفا كردم.
 

Sampro

Member
سلام دوستان
خیلی ممنون .

من از این قابلیت سی شارپ خیلی خوشم اومد و به نظرم این کار به Oop نزدیکترش کرده (البته در همین بخش نه بقیه)
این یه قابلیت جالبیه می خواستم بدونم تو ورژن های جدید دلفی (2005 و 2006 و ...) این قابلیت افزوده شده یا نه .

(این سوال خارج از بحثه . عذر می خوام)
 

farhad110

Member
سلام دوستان
خیلی ممنون .

من از این قابلیت سی شارپ خیلی خوشم اومد و به نظرم این کار به Oop نزدیکترش کرده (البته در همین بخش نه بقیه)
این یه قابلیت جالبیه می خواستم بدونم تو ورژن های جدید دلفی (2005 و 2006 و ...) این قابلیت افزوده شده یا نه .

(این سوال خارج از بحثه . عذر می خوام)

اين توضيحاتي كه دادم مربوط به دلفي بود. كه از ويرايش 5.5 دلفي به همراه اين كامپايلر بوده
در c# هم شي گرايي وجود داره. به صورتي كه شما نميتوني هيچ متغيري يا تابعي تعريف كني مگر اينكه عضو يك كلاس باشند و اين كلاس ها زير مجموعه اي از NameSpace ها

نتيجه: توضيحات من مربوط به شي گرايي در دلفي بود نه c#
 
آخرین ویرایش:

جدیدترین ارسال ها

بالا