急急急!!!关于函数的简单问题。 (30分)

  • 主题发起人 主题发起人 abigtoy
  • 开始时间 开始时间
A

abigtoy

Unregistered / Unconfirmed
GUEST, unregistred user!
[red]请问,如何在一个 form 定义一个函数或过程在所有的 form 中调用?[/red]
 
再别的form中Uses这个form就可以直接使用了。
 
是不是要放在public里啊? :)
 
uses了也不行。
 
既然这个函数所以form都要用,还不如放在一个单独的Unit中,作为公共函数.
否则每次调用的时候还要判断这个函数所在地窗体有没有建立.
 
怎么个uses了也不行法?:)
 
use肯定可以,不过要注意use的位置!
 
用Uses必须指定文件的路径
 
在form1中:
implementation
{$R *.dfm}
procedure X;
begin
...
end;

在form2中:
implementation
{$R *.dfm}
uses form1;
procedure TForm2.Btn1Click(Sender: TObject);
begin
X;
end;

报“undeclared indentifier:'X'错。
 
前面加窗体名引用!
 
加上也不行!
 
引用form1的单元文件
函数申明不要放到private里面
 
不知道怎样声明函数?在implementation中定义了不行吗?
 
在implementation中定义了不行,implementation区中说明的变量和函数在其它单元是不可见的,
尽管USES 了这个单元必须在INTERFACE中定义
 
在form1中:
unit unit1;
interface
procedure X;
implementation
{$R *.dfm}
procedure X;
begin
...
end;

在form2中:
unit unit2;
interface
uses
unit1;
implementation
{$R *.dfm}
uses form1;
procedure TForm2.Btn1Click(Sender: TObject);
begin
X;
end;
 
在另外定义的一个公用单元中定义函数或过程,在要调用的form 中引用该公用单元就可以了。
 
-----------------
form1:
......
public
procedure mypro;
.....
implementation
......
procedure mypro;
.....
------------------
form2
interface
.....
implementation
uses unit1;
...
procedure callpro;
begin
...
form1.mypro;
...
end;
...
注意:
1.mypro必须放在form1的public中,如果放在private中则在其它unit中无法使用;
2.在form2中使用IDE的file/unit...菜单项将form1的unit加入uses,然后才能在form2中调用mypro。键入“form1.”后,IDE将自动显示出form1中可以使用的所有对象。
 
兄弟试试这个:

unit fpFindUnit;

interface

uses
Windows, Messages,...;
type
TfrmfpFind = class(TfrmBaseFind)
private
{ Private declarations }
public
{ Public declarations }
end;

var
frmfpFind: TfrmfpFind;
function fpFind(var WhereStr:string):boolean;

implementation

{$R *.DFM}

function fpFind(var WhereStr:string):boolean;
begin
Result := false;end;
end.

unit Unit2;

interface

uses
Windows, Messages,...;
type
Tform2 = class(Tform)
private
{ Private declarations }
public
{ Public declarations }
end;

var
form2: Tform;
implementation

{$R *.DFM}

uses fpFindUnit;

procedure Tform2.actFilterExecute(Sender: TObject);
var
s:string;
begin
fpFind(s);
end;
 
后退
顶部