View Full Version : تعریف پروسیجر جدید در دلفی
smt1383
چهارشنبه 29 خرداد 1387, 10:14 صبح
با سلام خدمت دوستان
من می خواستم در یک فرم دلفی یک تابع یا پروسیجر تعریف کنم که مثلاً با اجرای آن پروسیجر تمامی edit ها خالی شوند. این پروسیجر را باید در کجای unit مربوطه تعریف کنم؟
با تشکر
اصغر (پآچ)
چهارشنبه 29 خرداد 1387, 13:29 عصر
سلام دوست من
ببین دوست من قبل ار دستور .end می تونی یه پروسیجر تعریف کنید. فقط دقت کن که باید در قسمت Type باید اون پروسیجر رو تعریف کنی
موفق و موید باشی
skmkh6056
پنج شنبه 30 خرداد 1387, 08:09 صبح
بستگی به نحوه استفادتون داره. اگه قراره در فرمهای دیگهای از این پروسیجر استفاده کنی باید در قسمت public تعریف کنی و اگه قراره فقط در این فرمت استفاده کنی باید در قسمت private تعریف کنی. یه نمونه برات میذارم. موفق باشی.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure ClearEdittInAllForm;
public
{ Public declarations }
procedure ClearEdittOnThisForm;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.ClearEdittInAllForm;
begin
Form1.Edit1 := '';
Form2.Edit1 := '';
Form2.Edit2 := '';
Form2.Edit3 := '';
Form3.Edit1 := '';
Form3.Edit2 := '';
end;
procedure TForm1.ClearEdittOnThisForm;
begin
Edit1.Text := '';
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ClearEdittInAllForm;
ClearEdittOnThisForm;
end;
end.
vcldeveloper
پنج شنبه 30 خرداد 1387, 18:28 عصر
یک Procedure را می تونید به شکل های مختلفی تعریف کنید. بطور کلی Procedure شما یا یک Class Member هست - یعنی عضوی از یک کلاس هست- یا یک Global Procedure.
تعریف Procedure به عنوان Class Member باید اول در داخل تعریف کلاس در بخش Interface از یونیت انجام بشه، و بعد در بخش Implementation کد مربوط به آن پیاده سازی بشه. یک کلاس میتونه Scope های مختلفی مثل Private, Protected, Public و... داشته باشه که هر یک از این Scope ها مشخص می کنند که سایر کلاس ها به چه عضوهایی از یک کلاس دسترسی دارند، مثلا اگر عضوی در بخش Private تعریف بشه، توسط هیچ کلاس خارجی قابل دسترس نیست، ولی اگر در بخش Public تعریف بشه، دسترسی به آن برای تمام کلاس های خارجی آزاد هست. پس متناسب با اینکه Procedure شما چه کاری انجام میده و به چه شکلی مورد دسترسی قرار میگیره، باید آن را در Scope مشخص تعریف کنید. نمونه این نوع از تعریف Procedure را در پست شماره 3 می بینید. بحث مربوط به ارتباط کلاس ها با هم و Scopeهای یک کلاس و اعضاء یک کلاس به مباحث برنامه نویسی شی گرا مربوط میشه.
تعریف Procedure بصورت Global یعنی اینکه اون Procedure عضوی از یک کلاس نباشه. این حالت در برنامه نویسی ساخت یافته استفاده میشد و در برنامه نویسی شی گرا جایگاه نداره، ولی چون دلفی یک زبان Hybrid هست، از هر دو حالت پشتیبانی میکنه. در دلفی Global Procedure میتونه دو نوع سطح دسترسی داشته باشه؛ یکی اینکه procedure در بخش Interface یک یونیت تعریف بشه و در بخش Implementation یونیت پیاده سازی بشه، که در این صورت تمام یونیت هایی که اسم این یونیت را در بخش uses خود داشته باشند، می توانند از آن استفاده کنند. دومی اینکه Procedure در بخش Interface تعریف نشه، فقط در بخش Implementation پیداسازی بشه؛ در این صورت اون Procedure از دید سایر یونیت ها پنهان خواهد بود، ولی کلاس ها و سایر Procedure ها و functionهای تعریف شده در همان یونیت می توانند آن را فراخوانی کنند.
اصغر (پآچ)
دوشنبه 03 تیر 1387, 02:00 صبح
بستگی به نحوه استفادتون داره. اگه قراره در فرمهای دیگهای از این پروسیجر استفاده کنی باید در قسمت public تعریف کنی و اگه قراره فقط در این فرمت استفاده کنی باید در قسمت private تعریف کنی. یه نمونه برات میذارم. موفق باشی.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure ClearEdittOnThisForm;
public
{ Public declarations }
procedure ClearEdittInAllForm;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.ClearEdittInAllForm;
begin
Form1.Edit1 := '';
Form2.Edit1 := '';
Form2.Edit2 := '';
Form2.Edit3 := '';
Form3.Edit1 := '';
Form3.Edit2 := '';
end;
procedure TForm1.ClearEdittOnThisForm;
begin
Edit1.Text := '';
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ClearEdittInAllForm;
ClearEdittOnThisForm;
end;
end.
سلام دوست من
من یه مشکل کوچیک تو یونیتت دیدم که با اجازه ات تغییرش می دم و رنگشم عوض می کنم تا بقیه هم این مشکل رو حل کنند.
موفق و موید باشی
skmkh6056
دوشنبه 03 تیر 1387, 07:53 صبح
سلام دوست من
من یه مشکل کوچیک تو یونیتت دیدم که با اجازه ات تغییرش می دم و رنگشم عوض می کنم تا بقیه هم این مشکل رو حل کنند.
موفق و موید باشی
دوست عزیز من متوجه نشدم کجاشو عوض کردین. میشه برام توضیح بدین. مرسی
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.