delphi中自定义过程问题

littleben 2003-10-20 08:33:02
1、在delphi中自定义过程时是否都要先声明过程?声明过程必须在interface下的type中定义吗?能否在其它地方声明?若能有什么不同?最好举个例子说明。
2、下面这个程序怎样修改才正确?
unit Unit1;

interface

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

type

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

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure show(j:integer);
begin
showmessage(inttostr(j));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
i:=1;
show(i); //此处错误,错误信息为:Too many actual parameters
end;

end.
...全文
289 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
angle097113 2003-10-20
  • 打赏
  • 举报
回复
可能Show是 系统本身的一个函数 最好更改一下名称
以免出错的 就是楼上说得对的
hiflower 2003-10-20
  • 打赏
  • 举报
回复
名称的作用域问题
hthunter 2003-10-20
  • 打赏
  • 举报
回复
如果不是响应控件事件的过程,一般在private和public里面声明就可以了,并且这里有一个非常有用的快捷组合键Ctrl + Shift + C,当你声明了函数或者过程之后,按这三个键,会在implementation后面自动生成类似于以下一段的代码:
procedure TForm1.show(j:integer);
begin

end;
Seahilly 2003-10-20
  • 打赏
  • 举报
回复
你的程序中有一个逻辑问题:
Delphi的TForm有一个 show 方法,就是Show它自己,而你在TForm1的Button1Click方法下调用Show,显然缺省调用的是TForm1自己的Show(这是名字的作用范围问题),而不是你前边定义的 procedure show(j:integer);
修改的方法:
做法1:改 procedure show(j:integer);过程的名字,如 MyShow(j:integer);
做法2:也可以如angle097113(深思不解)的方法,重载Show方法,但是具体可行否,你可以试一试,我不敢肯定。
saien 2003-10-20
  • 打赏
  • 举报
回复
unit Unit1;

interface

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

type

TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure show(j:integer);

end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.show(j:integer);
begin
showmessage(inttostr(j));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
i:=1;
show(i);
end;

end.
试试上面代码
xdljf 2003-10-20
  • 打赏
  • 举报
回复
unit Unit1;

interface

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

type

TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure show(j:integer);
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.show(j:integer);
begin
showmessage(inttostr(j));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
i:=1;
show(i);
end;

end.
966126 2003-10-20
  • 打赏
  • 举报
回复
要在类定义中申明
type

TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure show(j:integer);
private
{ Private declarations }
public
{ Public declarations }
end;

下面
procedure TForm1.show(j:integer);
begin
showmessage(inttostr(j));
end;

angle097113 2003-10-20
  • 打赏
  • 举报
回复
procedure show(j:integer);
你的这个过程没有声明的原因
type

TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure show(j:integer);//写道这里试试
private
{ Private declarations }
public
{ Public declarations }
end;
与大家分享一个Delphi 7自定义单元,完成自定义消息和自定义进度条的显示,效果可参见截图所示。在源代码,showmessage是弹出消息提示窗口,showprogress是显示进度条,为了更好的看到效果,本示例显示进度条正在运行的状态,进度条和弹出消息框,作者:周劲羽   该单元提供以下几个过程用于显示动态提示窗体:   ShowProgress - 显示进度条窗体   HideProgress - 隐藏进度条窗体   UpdateProgress - 更新当前进度   UpdateProgressTitle - 更新窗体标题   使用方法:在需要显示提示窗口的单元uses本单元,当需要显示提示信息时直接调用ShowXXXX过程即可。   注意事项:同一时间屏幕上只能显示一个进度窗体,窗体显示时其它所有窗体均不能使用,但显示该窗体的代码仍可以继续运行。   来看一下参数如何定义:   procedure ShowProgress(const Title: string; AMax: Integer = 100; vIsShowProgress: Boolean = false);   {* 显示进度条窗体,参数为窗体标题以及最大值,默认 100(百分比形式),可自定义成其他值}   procedure HideProgress;   {* 关闭进度条窗体}   procedure UpdateProgress(Value: Integer);   {* 更新当前进度,参数为进度值:当 Max 为 100 时可接受范围为 0..100,此时 Value 代表百分比}   procedure UpdateProgressTitle(const Title: string);   {* 更新进度条窗体标题,参数为标题}   procedure UpdateProgressMax(Value: Integer);   {* 更新进度条最大值,参数为新的最大值}   implementation   {$R *.DFM}   var    ProgressForm: TProgressForm = nil; // 进度条窗体实例    FormList: Pointer; // 被禁用的窗体列表指针   详细的单元使用方法,请下载查看源码的代码文件。
ToolBar工具栏控件的使用动态建立主菜单选项窗口界面的动态分隔条动态设置选项卡页面在标题栏自定义按钮窗体开合窗帘效果Windows XP界面效果实现OutLook滚动工具栏效果在下拉列表框显示树形视图自定义系统的About项修改系统级菜单实现透明窗体效果爆破特技窗体只允许建立一次子窗体的MDI程序从外部DLL调用子窗口新颖的资源管理器界面如何生成半圆形窗口制作字幕滚动窗体详解Canvas生成渐变色窗口背景WINAPM风格磁化窗口软件封面的图片显示制作实现图片的任意角度旋转奇妙的拼图游戏使用PaintBox控件制作画图程序使用DrawGrid控件制作五子棋多彩的数据报表按压缩比将BMP转换为JPG16位真彩转换到256色调整图片的RGB对比度实现图像的灰度级处理效果3种像素历遍方法的比较和实现实现屏幕拷贝实现图像漫游4种幕布式图像显示技巧盘旋法实现9种滤镜效果图形朦胧叠合显示技巧给MDI主窗体增加背景实现图像的淡入淡出显示多媒体播放器播放AVI文件根据客户端IP地址获取计算机名实现多线程IP和DomainName相互转换Windows2000下的Popup发送功能如何实现Ping操作实现多线程共享探测实现Windows95/98的I/O端口读写收发电子邮件与监视网络服务器资源使用WebBrower制作浏览器可视化的Ping工具使用IdMappedPortTCP进行端口映射动态设置ODBC数据源用ADO控件打开Access数据库DBGrid的记录到Html页面的转换在DBGrid实现任意方向查找在DBGrid通过动态下拉列表查找记录用DBGrid组件制作下拉列表形式的提示框利用书签处理DBGrid的多个记录将ComboBox的内容直接拖放到DBGrid里如何在DBGrid里放置图标DBGrid控件精彩组合DBChart图表控件的使用在StringGrid组件显示查询结果使用流对象(Tstream)实现数据表Tmemo字段的显示如何动态建立SQLServer ODBCSQL浏览器在SQL查询使用动态参数事务工作原理标准/模糊查询筛选数据数据字典查看器TDecisionGraph决策组件的使用明细表(Master/Detail)结构像处理文本资料一样处理数据表的信息远程数据库登录远程数据库的离线处理在远程数据库实现主从表关系动态设置远程数据库的查询参数在远程数据库计算统计值多线程与数据库使用远程存储过程数据模块的同步显示建立Web服务的数据提供端建立Web服务的数据访问端开发WebSnap数据库程序建立ActiveForm数据浏览建立数据查询WebServices服务器端数据查询Web服务客户端开发基于WAP的手机无线应用建立基本Web数据库服务器应用建立类型库编辑DataSnap服务端建立查询条件Web数据库服务器应用建立基本MTS服务端建立MTS数据访问客户端建立IntraWeb数据浏览将程序图标设置到Windows系统托盘取得和修改文件的创建和修改日期通过流式数据实现文件分割与合并实现指定扩展名文件和相应程序的关联获取汉字拼音的首字母监视剪贴板在IE工具栏上增加一个按钮图标软件注册机制的建立复活节彩蛋的制作SkinEngine控件——XP换肤ActionList——应用程序通用功能列表OleContainer——OLE容器将程序项设置到控制面板艺术化排列桌面图标Delphi的ini文件的读写建立键盘鼠标动作记录与回放实现指定目录下的文件查询实现对系统的操作监视系统级热键的实现检测NumLock、Insert、CapsLock、ScrollLock键的状态

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧