enter_dan:= Tenter_dan.Create(Self); 入库单录入窗体得创建
form_show(enter_dan,555 ,360,10,2); form_show为自定义函数
对所有子窗体显示我自定义了一个函数form_show,减少了工作量和代码量。
procedure form_show(form:TForm;fwidth ,fheight,fleft,ftop :integer);
begin
with form do
begin
height:=fheight;
width:=fwidth;
Left:=fleft;
top:=ftop;
Show;
end;
end;
窗体的释放实现,例如释放入库单录入界面窗体:
procedure Tenter_dan.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action:=cafree; 在内存中释放掉窗体
end;
2. 各个功能模块实现的要点和技术
这里我只把我在编码过程中比较重要或者比较有代表性的技术和部分源码阐述一下。详情查看系统的源代码。
2.1 类继承与重载
在编码过程中,我充分利用了面向对象编程的特定——代码的重用,具体实现起来依靠的是重载和继承。把具有相同或相似属性的类抽象出来作为一个基类。我定义了几个重要的窗体基类,基类窗体包含了需要的公有控件和共有事件方法。其他的窗体基本上这几个基类的派生类。在使用时在对窗体的控件的属性和方法进行继承或者重载。
关于在DELPHI方法的重载,例如:
procedure Action7Execute(Sender: TObject); OVERRIDE;
procedure Tenter_goods_info.Action7Execute(Sender: TObject);
begin
try
if (dbedit1.Text<>'') and (dbedit2.Text<>'') and (dbedit3.Text<>'')and (dbedit4.Text<>'')then
begin
query1.Post;
addbutton.Enabled:=true;
delbutton.Enabled:=true;
savebutton.Enabled:=false;
end
else
showmessage('你的输入不完整!');
except
showmessage('代码重复!');
end;
end;
2.2 windows消息机制
当查询窗体要返回结果时,我们用到了windows消息机制。
首先定义一个全局的自定义消息常量。
Const My_WM_USER=WM_USER+100; //自定义消息
向指定的窗体发送自定义消息,传递查询结果。例如:
procedure Tgoods_info_search.searchbuttonClick(Sender: TObject);
begin
try
price_adjust.Query1.Close; price_adjust.Query1.SQL.Clear;
price_adjust.Query1.SQL:=query1.SQL;
sendmessage(price_adjust.Handle,My_WM_USER,0,0);
except
beep;
end;
close;
end;
接收消息,并且处理它,例如:
定义消息响应的方法
procedure my_wm_user100(var msg:Tmessage); message My_WM_USER;
处理消息:
procedure Tgoods_promote.my_wm_user100(var msg:Tmessage) ;
begin
with query1 do
close;
sql.clear;
sql.add(sql语句);
open;
end;
2.3 关于权限设置
设置权限是管理系统的重要组成部分,直接关系到企业业务和财务安全。因此,这个系统在这个意义上的功能更加完善。可以在子menu 的每个级别分配辅助角色权限。不显示不合格的菜单项,即系统可以自动显示具有基于着陆权限的权限的菜单。我们将其他人的权限存储在MENU_FLAG,并在系统启动时加载相关权限设置信息。权限设置是只有高级管理人员和管理员才能使用的功能。
菜单算法按权限显示。
with damo.query1 do //query1关联MENU_FLAG表
begin
close;
sql.Clear;
sql.Add('select * from menu_flag where id=:id ');
ParamByName('id').AsInteger:=person_id;
open;
end;
for i:=1 to 42 do
begin
flag:=damo.query1.fields[i].AsInteger;//flag为每项菜单的权限标志
for j:=0 to main_form.ComponentCount-1 do
begin
if (main_form.Components[j] is TMenuItem) and ((main_form.Components[j] as TMenuItem).Tag=i-1 ) then
if flag = 0 then
(main_form.Components[j] as TMenuItem).Visible:=false
else
(main_form.Components[j] as TMenuItem).Visible:=true;
end;
end;
2.4 应用Delphi显式事务控制
中小型超市管理系统规划(二)由毕业论文网(www.huoyuandh.com)会员上传。