View Full Version : سوال: استفاده از procedure یک فریم در فرم های دیگر
hamid_14
جمعه 08 فروردین 1393, 12:54 عصر
سلام
در یک فریم procedure تعریف کردم و می خوام در فرم های دیگه ازش استفاده کنم اما با این که یونیتش اضافه کردم باز هم نمیشه آیا راهی هست.تشکر
Mask
جمعه 08 فروردین 1393, 14:09 عصر
پروسیجرهای فریم ها رو نمیتونید در فرمها صدا بزنید.
hamid_14
جمعه 08 فروردین 1393, 14:18 عصر
ممنون, پس باید چه کار کرد
procedure تو فرم و فریم های دیگه باز نویسی کنم؟
AliReza Vafakhah
جمعه 08 فروردین 1393, 15:37 عصر
تعجبم چرا دوستمون GOLD میگن نمیشه.
شما در فرمتون باید Procedure در قسمت public تعریف کنید نه private و بعد هم جهت فراخوانی در فرمی که می خواهید استفاده شود : Frm1.TestProcedure
hamid_14
جمعه 08 فروردین 1393, 16:11 عصر
اینکارو کردم نشد
farshid_82
جمعه 08 فروردین 1393, 19:06 عصر
می تونید با این کد کار کنید هر چند که جالب نیست.
var fra1 : Tframe1;
begin
fra1:= tframe1.Create(nil);
fra1.nameprocedure ;
end;
hamid_14
جمعه 08 فروردین 1393, 19:30 عصر
اینم نشد.
procedure رو اجرا می کنه اما عمل نمی کنه ولی وقتی همین procedure تو فریم خودش اجرا می کنم درسته.
Mask
جمعه 08 فروردین 1393, 20:46 عصر
زیاد تعجب نکن دوست من .
شما در فرمتون باید Procedure در قسمت public تعریف کنید نه private و بعد هم جهت فراخوانی در فرمی که می خواهید استفاده شود : Frm1.TestProcedure
ایشون گفتند فریم ، نه فرم.
اگر با فریم ها سروکله بزنید میتونید علتش رو بفهمید.
علتش در فایل DPR نهفته است.
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Frame2: TFrame};
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
در IDE دلفی فریم ها به صورت اتوماتیک ساخته نمیشوند.(همونطور که در کد بالا میبینید با اینکه فریم در برنامه هست ، اما در بدنه ساخته نمیشه.)
و دقیقا باید به شکل زیر ساخته و متدهاش صدا زده بشه.
procedure TForm1.Button1Click(Sender: TObject);Var Frm1:TFrame1;
begin
Frm1:=TFrame1.Create(self);
Frm1.Align:=alLeft;
Frm1.Parent:=Form1;
Frm1.Show;
end;
این روش اصولی ترین روش کار با فریم هاست
یونیت فریم و فرم به این شکل میشه:
var Form1: TForm1;
Frm1: TFrame1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Frm1 := TFrame1.Create(self);
Frm1.Align := alLeft;
Frm1.Parent := Form1;
Frm1.Show;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage(IntToStr(Frm1.Sum(1,2)));
end;
type TFrame1 = class(TFrame)
Button1: TButton;
private
{ Private declarations }
public
function Sum(a,b:Integer):Integer;
{ Public declarations }
end;
implementation
{$R *.dfm}
function TFrame1.Sum(a, b: Integer):Integer;
begin
Result:=a+b;
end;
یوسف زالی
جمعه 08 فروردین 1393, 23:55 عصر
چه دلیلی داره فرمی که فریم در اون وجود نداره بخواد از یکی از متدهاش استفاده کنه؟
فریم رو یک کامپوننت فرض کنید، فرمی که توش دکمه نداره چرا باید کلیک دکمه رو صدا بزنه؟
به نظر می رسه اشکال از طراحی تون باشه.
hamid_14
شنبه 09 فروردین 1393, 00:51 صبح
آخه این
procedure در فریم برای محاسبه استفاده شده و با ثبت اطلاعات در یک فرم و بازگشت مجدد به فریم محاسبات مجدد انجام بشه برای این این کارو کردم.به هر حال ممنون از پاسخ همه دوستان
یوسف زالی
شنبه 09 فروردین 1393, 10:00 صبح
از فریم درش بیارید بگذارید در فرم یا یونیت دیگه
hamid_14
شنبه 09 فروردین 1393, 18:51 عصر
نمیشه هر چی تا حالا درست کردم خراب میشه.این کامپوننت frames هم چیز بیخودیه.
یوسف زالی
شنبه 09 فروردین 1393, 18:59 عصر
بیشتر از این بدون سورس نمی شه راهنمایی کرد.
از دست این موجودات هم عصبانی نشید، کامپوننت ها بیخود نیستند!
اگر همچنان مشکل داشتید نمونه کد قرار بدید.
farshid_82
شنبه 09 فروردین 1393, 19:07 عصر
پسر خوب اگه از اولش درست توضیح میدادی تاحالا جواب می گرفتی.اگه از کامپوننت frames روی یک فرم استفاده کردی کافی تو فرم های دیگه که نیاز به دسترسی به procedure فریم دارن به شکل زیر عمل کنی به همین سادگی.
;نام پروسیجر.نام فریم.نام فرم
اینم نشد.
procedure رو اجرا می کنه اما عمل نمی کنه ولی وقتی همین
procedure تو فریم خودش اجرا می کنم درسته.
اگه بیشتر به مطالب آقای gold دقت کنی براحتی متوجه میشی چرا عمل نمی کرد.
یوسف زالی
شنبه 09 فروردین 1393, 19:29 عصر
خب اگر فرمی که فریم روشه ساخته نشده باشه تکلیف چیه؟
همچنان به ایراد طراحی معتقدم.
hamid_14
شنبه 09 فروردین 1393, 19:52 عصر
مشکل دقیقا همین بود.شرمنده از همه فکر کنم بزرگترین سوتی بود که تا حالا داده بودم واقعا بی دقتی کردم.بله شایدم مشکل از طراحی باشه.
farshid_82
شنبه 09 فروردین 1393, 20:04 عصر
من هم با آقای you-see موافق هستم الان کارتون راه افتاد ولی بعد ها ممکن به مشکل بخوری.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.