1. Delphi自定义函数声明及调用问题!
很幸运能帮到你。自定义函数声明可以放在窗体内,也可以放在窗体外的单元文件内。两种都可以。
一、按一般的情况,公共函数放到窗体外的单元文件Pas文件内声明。如下代码正确:
var
frm_main: Tfrm_main;
Function Get_item_list(tbname, fdname: String; alist: TStrings): Boolean;//在这里声明不出错,但函数功能实现不了!
然后实现代码也没错。
最后调用时分两种情况:
1,在别的单元文件内的其他窗体内调用。需要在其他单元文件内implementation关键字后加上引用该单元文件:uses uni_main;然后在使用的地方直接Get_item_list('tb资料设置_客户', '所属省份',quprovince.Items );并不需要加uni_main.因为他在窗体对象之外声明,是公共函数。引用了该单元文件后,这个调用能够找到该函数声明和实现。
2,在本单元文件内调用。这样简单。只需要一步。直接Get_item_list('tb资料设置_客户', '所属省份',quprovince.Items );并不需要加uni_main.这个引用。因为这个自定义函数不属于窗体对象。
二、按特殊情况,这个自定义函数要放到窗体内部。那么,声明用:
public
{ Public declarations }
pubEmpNo,pubEmpName:string;
procedure CopyDbDataToExcel(Target: TDbgrid);
Function Get_item_list(tbname, fdname: String; alist: TStrings): Boolean; // 在这里声明的话出错!
end;
这个也没错。但是函数体的实现部分应该是加上uni_main.这个引用。注意下列代码的函数头部分加上该引用(其他地方不变):
函数如下:
Function uni_main.Get_item_list(tbname, fdname: String; alist: TStrings): Boolean;
Begin
alist.BeginUpdate;
alist.Clear;
Try
Try
With TADOQuery.Create(Nil) Do
Begin
Try
Close;
LockType := ltReadOnly;
Connection := DM.AdoConn;
Sql.Clear;
//SQL.Add(Format('select %s from %s where %s is not null', [fdname, tbname, fdname]));
SQL.Add(Format('select %s from %s', [fdname, tbname]));
Open;
While Not Eof Do
Begin
alist.Add(FieldByName(fdname).AsString);
Next;
End;
Close;
Finally
Free;
End;
End;
Except On E: Exception Do
Begin
Application.MessageBox(PChar(E.Message), 'msg', 64);
End;
End;
Finally
alist.EndUpdate;
End;
End;
如果在另一个单元文件调用的时候,注意在另一个单元文件的implementation关键字后同样uses uni_main;然后调用时候也要加上(uni_main包含窗体名字).Get_item_list(参数1,。。。。);这样你编译就会通过了。
2. delphi怎样写自定义函数?写在那个部分?
TForm1 = class(TForm)
Button1: TButton;
function Button1Click(Sender: TObject);
private
{ Private declarations }
function a(b:string):string;//一般写在这就行了,然后ctrl+c, 在下面写代码
//如果你要点按钮执行,则直接在按钮的事件里写 a('你好'); 这样
protected
public
{ Public declarations }
end;
function TForm1.a(b:string):string;
begin
form1.caption:=b;
end;
function TForm1.Button1Click(Sender: TObject);
begin
a('你好');
end;
3. Delphi 高手 自定义公式
e是表示什么?看你的示例里的公式,如果刚好能在delphi中实现。
你直接取出公式x,传到一个函数function f(x:string):string,函数里stringreplace(x,'a','%0:d',[rfreplaceall]),依次用%1:d取代b2取代c3取代d。
返回的一个字符串就是类似%0:d div %1:d +%2:d
到时候要用,就format(f(x),[a,b,c,d])
如果你写的公式是随便写的,比如除法是用% ,多取代一次,用div替换就好。哦注意div是整型相除,如果是浮点数相除要用/
刚刚没注意这个,抱歉
你还是全部用浮点型的,然后先替换div成/,再替换d %3:f
4. delphi7自定义函数的问题
不知道你的unit1里是怎么写的,但是如果function area(r:real):real;是公共函数,倒是建议你单独建一个专门存放公共函数的unit 文件比如:
---------------------------------------------------------------
unit FunctionsUnit;
interface
//uses其他文件或模块
uses
//自定义公共函数声明
function area(r:real):real;
implementation
//函数实现
function area(r:real):real;
begin
result:=pi*r*r;
end;
end.
-------------------------------------------------------------------------------------------
你在需要调用的这个函数文件里只要先uses了这个文件,就可以直接用函数方法了
5. delphi中怎样自定义函数
......
interface
uses
......
function aaa(abc: string): Boolean; // 这一句是函数声明,告诉编译器说你声明了名叫aaa的函数
im....
function aaa(abc: string): Boolean;
begin
if abc = '' then Result := True
else Result := False;
end;
// 是不是很简单呢?
6. DelPhi编程中怎样自定义一个函数
TComponet中的FOwner是用于在组件创建时指定“属主”用的,属主的作用是在于当属主Free的时候自动Free掉其下的所有组件。例:
var
lbl: TLabel;//此处TLabel继承自TComponent
begin
lbl ;= TLabel.Create(Form1);
...
lbl.Free;//通常我们会加上这句,但这里加上就错了
//Delphi会在Form1销毁的时候自动将lbl销
//毁掉
end;
这里TLabel就相当于TComponent,而Form1是TForm类的对象,TForm也是继承自TComponent,既然是这样实现,那在类的定义里楼主所说的情况应该不难理解了吧~~
ICompare = interface //声明一个接口ICompare
['{DDFE0840-E8FB-11D2-9085-0040F6741DE2}'] //全局唯一的ID,用于识别不同的接口
function CompareWith(ACompare: ICompare; ASortBy: Integer): Integer; //此接口所拥有的“动作”,接口本身不实现,由实现接口的类实现此“动作”
7. delphi 自定义一个有四个输入参数,有两个相同类型的返回结果的函数,如何定义
比如你想写个函数func,按照你的说法,在delphi中应该定义为procedure而非function,具体写法如下:
procedure func(EDate,SDate:TDatetime;
i, k:Integer;
var BSDate,BEDate:TDatetime);
8. delphi自定义函数写在那里?
在private或USES内声明
然后在implementation的地方写实现代码 ;再或单独放在一个unit单元文件里,在uses引用,然后直接引用即可。