Delphi下的MPS
(http://tech.ddvip.com/2009-05/1242747992119973_4.html)
细心的读者可能会发现,在前面的几个MDI子窗体中,相同的部分是非常多的。例如各个窗体标题栏下面的工具栏以及查询功能等。对于布局非常相似的窗体,在程序设计过程中可以先设计一个父窗体,其他窗体从父窗体继承,对应有类继承概念的开发工具这是非常方便的。这一方法的使用我们留在下一章中再介绍,这里我们用一种更简易的方法来实现主生产计划维护窗体。
(1) 在前面的主需求计划维护窗体设计好后,选择File | Save As...菜单命令,将这个窗体另存为MainProduceForm.pas,并将窗体改名为MainProduce,再将它加入工程并从自动创建列表 中删除。然后再根据需要对窗体上的控件设置进行修改,例如移动一些控件的位置,增加一些新的控件等等,如图3.38。
图3.38 主生产计划维护窗体
(2) 在修改好各个控件的布置之后,应该进一步修改各控件的属性设置,新的属性设置如表3.9所示。
图片看不清楚?请点击这里查看原图(大图)。
表3.9 主生产计划维护窗体控件属性设置
主需求计划和主生产计划窗体相似之处非常多,它们的很多代码都是非常相似的,只不过所操作的数据表由主需求计划改为了主生产计划,这样只需要对主需求计划维护窗体的时间处理代码做少许修改即可达到目的。
(3) 下面给出主生产计划窗体事件处理程序的代码,请读者参考主需求计划窗体时间处理程序的代码加以理解,并特别注意其中的不同之处。
uses MainForm,ChooseForm;
{$R *.dfm}
//--------------
下一条记录
------------
procedure TMainProduce.BitBtn3Click(Sender: TObject);
begin
datasource2.DataSet.Next;
end;
//--------------
上一条记录
------------
procedure TMainProduce.BitBtn2Click(Sender: TObject);
begin
datasource2.DataSet.Prior;
end;
//--------------
首条记录
------------
procedure TMainProduce.BitBtn1Click(Sender: TObject);
begin
datasource2.DataSet.First;
end;
//--------------
末条记录
------------
procedure TMainProduce.BitBtn4Click(Sender: TObject);
begin
datasource2.DataSet.Last;
end;
//--------------
关闭窗体
------------
procedure TMainProduce.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
action:=cafree;
end;
procedure TMainProduce.BitBtn10Click(Sender: TObject);
begin
close;
end;
//--------------
查询数据
------------
procedure TMainProduce.BitBtn12Click(Sender: TObject);
begin
adoquery2.Close;
adoquery2.SQL.Clear;
adoquery2.SQL.Add('select * from
主生产计划
where (
物料编号
like ''%'+edit1.Text+'%'')and');
adoquery2.SQL.Add('(
年份
like ''%'+edit2.Text+'%'')and(
计划期
like ''%'+edit3.Text+'%'')');
adoquery2.Open;
edit1.Clear;
edit2.Clear;
edit3.Clear;
end;
procedure TMainProduce.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
bitbtn12.Click;
end;
procedure TMainProduce.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
bitbtn12.Click;
end;
procedure TMainProduce.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
bitbtn12.Click;
end;
//--------------
新增记录
------------
procedure TMainProduce.FormActivate(Sender: TObject);
begin
//
如果是新增按钮被按下,则将从物料主文件中选取得零件的编号
//
名称等信息送到主需求窗口中,并初始化一些数据
if insflag=1 then
begin
dbedit1.Text:=main.str;
dbedit2.Text:=main.str2;
end;
if insflag=2 then
begin
dbedit3.Text:=main.str;
dbedit4.Text:=main.str2;
dbedit5.Text:=main.str3;
dbedit6.Text:=main.str4;
end;
end;
procedure TMainProduce.BitBtn5Click(Sender: TObject);
begin
datasource2.DataSet.Insert;
//
将插入、删除、修改和移动按钮关闭,防止错误操作
bitbtn6.Enabled:=false;
bitbtn7.Enabled:=false;
bitbtn1.Enabled:=false;
bitbtn2.Enabled:=false;
bitbtn3.Enabled:=false;
bitbtn4.Enabled:=false;
bitbtn5.Enabled:=false;
//
打开保存和取消按钮的使能,允许保存或者取消
bitbtn8.Enabled:=true;
bitbtn9.Enabled:=true;
//
将两个浏览按钮使能打开
bitbtn11.Enabled:=true;
bitbtn13.Enabled:=true;
//
必须用保存按钮才能提交
dbgrid2.Enabled:=false;
//
允许对需求数量和备注进行修改
dbedit7.ReadOnly:=false;
dbedit7.Text:='0';
dbedit9.ReadOnly:=false;
dbedit9.Text:='0';
dbedit8.ReadOnly:=false;
dbedit10.ReadOnly:=false;
dbedit11.ReadOnly:=false;
dbmemo1.ReadOnly:=false;
end;
//--------------
调用
choose
窗体,从物料主文件中选择数据
------------
procedure TMainProduce.BitBtn13Click(Sender: TObject);
var
newform:Tchoose;
begin
//
标识从主需求窗体调用物料主文件窗口
main.bomflag:=4;
newform:=Tchoose.Create(application);
//
将本窗口灰化
self.Enabled:=false;
//
标识为第一个检索按钮按下
insflag:=1;
end;
//--------------
从工厂日历表中选择数据
------------
procedure TMainProduce.BitBtn11Click(Sender: TObject);
begin
main.bomflag:=5;
main.N5.Click;
//
将本窗口灰化
self.Enabled:=false;
//
标识为第一个检索按钮按下
insflag:=2;
end;
//--------------
修改记录
------------
procedure TMainProduce.BitBtn6Click(Sender: TObject);
begin
datasource2.DataSet.Edit;
//
将插入、删除、修改和移动按钮关闭,防止错误操作
bitbtn6.Enabled:=false;
bitbtn7.Enabled:=false;
bitbtn1.Enabled:=false;
bitbtn2.Enabled:=false;
bitbtn3.Enabled:=false;
bitbtn4.Enabled:=false;
bitbtn5.Enabled:=false;
//
打开保存和取消按钮的使能,允许保存或者取消
bitbtn8.Enabled:=true;
bitbtn9.Enabled:=true;
//
将两个浏览按钮使能打开
bitbtn11.Enabled:=true;
bitbtn13.Enabled:=true;
//
必须用保存按钮才能提交
dbgrid2.Enabled:=false;
//
允许对需求数量和备注进行修改
dbedit7.ReadOnly:=false;
dbedit9.ReadOnly:=false;
dbedit8.ReadOnly:=false;
dbedit10.ReadOnly:=false;
dbedit11.ReadOnly:=false;
dbmemo1.ReadOnly:=false;
end;
//--------------
保存记录
----------------
procedure TMainProduce.BitBtn8Click(Sender: TObject);
begin
datasource2.DataSet.Post;
//
将插入、删除、修改和移动按钮打开
bitbtn6.Enabled:=true;
bitbtn7.Enabled:=true;
bitbtn1.Enabled:=true;
bitbtn2.Enabled:=true;
bitbtn3.Enabled:=true;
bitbtn4.Enabled:=true;
bitbtn5.Enabled:=true;
//
关闭保存和取消按钮的使能
bitbtn8.Enabled:=false;
bitbtn9.Enabled:=false;
//
将两个浏览按钮使能关闭
bitbtn11.Enabled:=false;
bitbtn13.Enabled:=false;
//
恢复
dbgrid
的选取功能
dbgrid2.Enabled:=true;
//
恢复
dbedit
的只读属性
dbedit7.ReadOnly:=true;
dbedit9.ReadOnly:=true;
dbedit8.ReadOnly:=true;
dbedit10.ReadOnly:=true;
dbedit11.ReadOnly:=true;
dbmemo1.ReadOnly:=true;
dbmemo1.ReadOnly:=true;
//
刷新数据
adoquery2.Active:=false;
adoquery2.Active:=true;
end;
//--------------
取消操作
----------------
procedure TMainProduce.BitBtn9Click(Sender: TObject);
begin
datasource2.DataSet.Cancel;
//
将插入、删除、修改和移动按钮打开
bitbtn6.Enabled:=true;
bitbtn7.Enabled:=true;
bitbtn1.Enabled:=true;
bitbtn2.Enabled:=true;
bitbtn3.Enabled:=true;
bitbtn4.Enabled:=true;
bitbtn5.Enabled:=true;
//
关闭保存和取消按钮的使能
bitbtn8.Enabled:=false;
bitbtn9.Enabled:=false;
//
将两个浏览按钮使能关闭
bitbtn11.Enabled:=false;
bitbtn13.Enabled:=false;
//
恢复
dbgrid
的选取功能
dbgrid2.Enabled:=true;
//
恢复
dbedit
的只读属性
dbedit7.ReadOnly:=true;
dbedit9.ReadOnly:=true;
dbedit8.ReadOnly:=t
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/93029/viewspace-1023882/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/93029/viewspace-1023882/
Delphi下的MPS相关推荐
- Delphi下利用WinIo模拟鼠标键盘详解
本文最早在编程论坛上发表,文章地址:http://programbbs.com/bbs/view12-17207-1.htm,相关文件可以在上述地址的页面中下载.转载时请注明出处. 前言 一日发现Se ...
- Delphi下使用指针的简单总结
由于最近公司太忙,好久没有更新我的BLOG了.原来想着写写关于HOOK驱动的文章,可是最后想想好久已经没有做驱动的东西了,怕写出来有错误,于是作罢.开发游戏也有一段时间了,发现使用DELPHI来开发网 ...
- Delphi下的COM编程
Delphi通过向导可以非常迅速和方便的直接建立实现COM对象的代码,但是整个COM实现的过程被完全的封装,甚至没有VCL那么结构清晰可见. 一个没有C++下COM开发经验甚至没有接触过COM开发的D ...
- DELPHI下的SOCK编程(转)
DELPHI下的SOCK编程 本文是写给公司新来的程序员的,算是一点培训的教材.本文不会涉及太多的编程细节,只是简单讲解在DELPHI下进行Winsock编程最好了解的知识. 题外话:我认 ...
- delphi下实现ribbon界面的方法(一)
delphi下实现ribbon界面的方法(一) office 2007和2010是现在大多数人经常使用的办公软件,几乎每天都在使用.因此,在软件中如果使用类office的界面样式,客户用着非常习惯,而 ...
- Delphi 下用Windows API 创建窗体
Delphi 下用Windows API 创建窗体 副标题: 作者:佚名 文章来源:大富翁 点击数:119 更新时间:2005-2-25 Delphi 下用Windows API 创建窗体 / ...
- 在Delphi下使用迅雷APlayer组件进行免注册开发
之前都是用的delphi下的dspack进行的视频开发,这个组件其实很好用,就是找解码器麻烦点,而且还得在客户的计算机上使用RegSvr32.exe也注册解码器,要不有可能播放不了. 结果在查找合适的 ...
- Delphi下实现鼠标自动点击器
本文最早在编程论坛上发表,文章地址:http://programbbs.com/bbs/view12-20849-1.htm,相关文件可以在上述地址的页面中下载.转载时请注明出处. 众所周知,当鼠标指 ...
- Delphi下使用Sato打印机
在Delphi下打印Sato标签,其中中文除用字卡以外,可以把中文生成BMP图片再打印,格式如下: [Parameter] <GM>aaaaa, n-na "Total Byte ...
最新文章
- LabVIEW纹理分析(基础篇—9)
- 29.进程和线程的区别
- 北京大学启用人脸识别系统:学生“刷脸”入校
- ATM(BZOJ 1179)
- VS2008中配置 Windows SDK v7
- 未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序。
- leetcode739. 每日温度
- 前端学习(733):函数的参数
- js实现文字从右滚动到左边代码循环滚动实例
- 语音识别技术突飞猛进 终有一天将超过人
- 谷歌浏览器安装apizza
- stm32F103 模拟I2C mpu6050收到数据全为0,或者地址为209,104,0x68,0xD0的一些解决办法总结
- ftp下载工具绿色版,有没有好用且免费的ftp下载工具绿色版,有几款值得推荐?
- Day2-Python基础2---列表、元组操作
- thinkphp 运行机制和优缺点
- 共享单车之数据可视化
- 树莓派上搭建rtsp流媒体服务器
- 手机端APP活体真活人检测扫描人脸识别SDK之张嘴摇头眨眼点头确认真人非图片...
- Python中NaN、nan和NAN的区别及使用方法
- 02 Python的自我介绍(数字、字符串、列表)
热门文章
- 读《STRENGTHNET: DEEP LEARNING-BASED EMOTION STRENGTH ASSESSMENT FOR EMOTIONAL SPEECH SYNTHESIS》
- 1--100以内的质数(只能被1和其本身整除的数就是质数,1不是质数)
- Luna承诺简化JavaScript测试
- 算法导论笔记:12二叉搜索树
- 文献阅读 | Distribution of Parental Genome Blocksin Recombinant Inbred Lines
- 奇怪的日常 [ 2 ]:Python下合成萝莉/御姐音
- APP-FND-01564: ORACLE error 24345 in fdlget
- V-REP(Cooprliesim EDU)自学笔记 实现UR5机械臂末端按轨迹移动
- 30岁以后最大的勇敢,是敢于走出舒适圈还是留在舒适圈?
- C/C++开发工程师面试题整理(二)——操作系统进程、线程