PDA

View Full Version : سوال: استفاده از زیربرنامه نوشته شده در فرمی دیگه



Fastdesign
شنبه 29 بهمن 1390, 01:41 صبح
با سلام

دوتا فرم دارم . تو فرم اول یک زیربرنامه نوشتم حالا می خوام تو فرم دوم از زیربرنامه فرم اول استفاده کنم .

به نظرتون چکار کنم .


با تشکر

mohsen24000
شنبه 29 بهمن 1390, 02:06 صبح
باید یونیتی که زیربرنامه داخلش هست رو در یونیت دوم use کنی...

Fastdesign
شنبه 29 بهمن 1390, 07:46 صبح
داش من قبل از اینکه این تاپیک را بزنم این کار را انجام دادم ولی نشد.

mohsen24000
شنبه 29 بهمن 1390, 09:49 صبح
داش من قبل از اینکه این تاپیک را بزنم این کار را انجام دادم ولی نشد.
شرمنده! بنده علم غیب ندارم...
علی ای حال، من هم الان با همین شیوه دارم استفاده می کنم و هیچ مشکلی ندارم.
بنابراین شما اگه با پیغام خطایی مواجه میشید و یا نمونه ای دارید که کار نمی کنه بفرمایید تا بهتر بررسی بشه.

Fastdesign
شنبه 29 بهمن 1390, 10:32 صبح
دو تا فرم دارم : زیر برنامه را تو فرم اول به این صورت نوشتم :
implementation

{$R *.dfm}
uses
unit2;

procedure EditClear;
begin
Form1.Edit1.Text:='';
Form1.Edit2.Text:='';
end;

و حالا فرم دوم :
uses
unit1;

و حالا می خوام زیربرنامه را فراخوانی کنم ولی خطا می گیره که شناسایی نمی کنه .


با تشکر از همکاریتون

mohsen24000
شنبه 29 بهمن 1390, 10:54 صبح
آیا شما تابعتون رو در یونیت اول تعریف کردید؟ در غیر اینصورت یونیت دوم اون رو نخواهد شناخت!
به این صورت use کنید:


unit Unit2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,unit1;

Fastdesign
شنبه 29 بهمن 1390, 11:59 صبح
با فرض اینکه این تابع باشه یک نمونه کد بزارید !
procedure EditClear;
begin
Form1.Edit1.Text:='';
Form1.Edit2.Text:='';
end;


با تشکر

mohsen24000
شنبه 29 بهمن 1390, 12:23 عصر
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

procedure EditClear;

var
Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}
procedure EditClear;
begin
Form1.Edit1.Text:='';
Form1.Edit2.Text:='';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
form2.show;
end;

end.





unit Unit2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,unit1, StdCtrls;

type
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
EditClear;
end;

end.

tiphooo
شنبه 29 بهمن 1390, 14:10 عصر
اعلان زیر برنامتون رو در قسمت Public انجام دهید
Public
procedure EditClear;

mbshareat
شنبه 29 بهمن 1390, 23:40 عصر
اگه قراره دستورات داخل پروسیجر اینها باشه که چرا تو خود فرم 1 نمی ذارینش ولی اگر استفاده عمومی تری داره از پارامتر برای پروسیجر استفاده کنید.(مثلا یه پارامتر از نوع TForm که تعیین کنه پروسیجر رو چه فرمی تاثیر بذاره!)

در ضمن بعد از تعریف پروسیجر در قسمت Public قبل از اسم پروسیجر اسم فرم+T رو هم اضافه کنین:

public
procedure EditClear;
end;

var
Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}
procedure TForm1.EditClear(E:TEDit);
begin
E.Text:='';
end;

Mask
یک شنبه 30 بهمن 1390, 13:14 عصر
فکر میکنم بهترین جواب برای این سوال همون جواب پست 9 باشه.