2017东方快车谋杀案云2017免百度云

Delphi之快速设计(界面设计篇);?众所周知,Delphi已经是RAD之中的RAD;胃口呀;本人打算从两个方面来谈论这个话题界面设计及程序设;本文介绍界面的快速设计;如果你的手在键盘上3我想你不太会愿意再去伸手拿鼠;操作3能用鼠标操作完成的不在此列),那好3以下快;?、以下快捷键指的是对窗体表格上组件的操作:;?快捷键1;【Ctrl+UP】~向上移动当前
Delphi之快速设计(界面设计篇)
?众所周知,Delphi已经是RAD之中的RAD了3但本人的目的是更加充分地挖掘出Delphi的优秀品质3哎3
本人打算从两个方面来谈论这个话题界面设计及程序设计
本文介绍界面的快速设计
如果你的手在键盘上3我想你不太会愿意再去伸手拿鼠标来移动组件n,再说鼠标也不太精确(下面提到的均针对键盘
操作3能用鼠标操作完成的不在此列),那好3以下快捷键及一些技巧请各位看官&收好M
? 、以下快捷键指的是对窗体表格上组件的操作:
【Ctrl+UP】~向上移动当前组件(精确)
【Ctr1+Left】~向左移动当前组件(精确)
【Ctrl+Down】~向下移动当前组件(精确);
【Ctrl+Right】~向右移动当前组件(精确);
以t快接键中再加Shift进行组合(比如【Ctrl+Shift+Right】)即可实现粗略调整
【Shift+UP】~减小当前组件的高度!
【Shift+Left】~减小当前组件的宽度
【Shift+Down】~增加当前组件的高度
【Shift+Right】~增加当前组件的宽度!
以tup,Left等指的是方向键
?二、以下快捷键指的是在对象观察器上的操作
【Fll】~切换到对象观察器(注如果连续按Fll贝IJ将实现在对象观察器、窗体表格、代码编辑器之间切换)
【Ctrl+Down】~下拉当前窗体的组件列表!
【Ctrl+Enter】~编辑带的属性值(如组件的字体TFont);
【Alt+Down】~下拉组件当前属性选单队列(如Align-)alNone,alLeft,alRight等)
【Ctrl+Tab】~在属性列表及事件列表中切换
?三、菜单快捷键2
【Shift+Fl2】3
【Ctr1+F12】等在Delphi的菜单中已有定义的在此不必罗嗦
技巧如何选择被组件覆盖了的窗体(比如某组件的Align属性为alClient) 方法、按ESC键层层的往后选直到窗体被选为当前组件为止! 方法二、按Shift的同
时单击鼠标左键3一步即可选定(推荐) 方法三、按Fll选定对象观察器3然后切换到属性
列表3再用上面快捷键3中的【Ctrl+Down】 33。
三亿文库包含各类专业文献、外语学习资料、应用写作文书、中学教育、文学作品欣赏、生活休闲娱乐、行业资料、37Delphi之快速设计(界面设计篇)等内容。 
 Delphi 4S 店汽车配件数据管理系统的设计与实现 选题...开发图书管理信 息系统是一种成本低廉、开发迅速的...系统的框架,方便设计者进行程序编程前的界面设计。 ...  它使用了 Microsoft Windows 图形用户界面的许多先进特性和设计思想,采 用了弹性...Delphi 它提供了 500 多个可供使用的构 件,利用这些部件,开发人员可以快速地...  Delphi 是 Windows 平台下简单、易学、 高效的 可视化开发环境(IDE), 其具有所见即所得的可视化 界面设计风格和面向对象的程序设计等特点,已广 泛应用于各个领域...  例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。...经过此次数据库课程设计我对的 delphi 语言有了进 一步了解,界面设计较简单和...  利用一种设计工具完成图形化的用户界面设计 硬件平台: PC 软件平台:VS2012 利用常用的设计工具(VC/VB/Delphi/PB 等)完成一个通用图形用户 实验内容 界面设计,要...  Delphi 应用程序设计 0000000 职称: 讲师 指导教师: 完成时间: 2012 年 12 月...系统的界面设计 (1)登录页面 所用控件: ComboBox1: TComboB//下拉表选择...  Delphi程序设计中的鼠标控制_工程科技_专业资料。Delphi 程序设计中的鼠标控制
20:15 在 Windows 环境下,鼠标和键盘是主要的输入设备。 在 Delphi 中...  实验内容: 利用常用的设计工具(VC/VB/Java/Delphi/PB 等)完成图形用户界面设 计,要遵循界面设计的一般原则(一致性、快捷方式),注意颜色的使用,学 会使用图标、...  Delphi2009 是以组件化的编程方式、面向对象的程序设计、快速的 Pascal 编 译器...4.3.2 学生管理系统主界面设计学生管理信息系统主界面主要实现新生信息录入、成绩...在Delphi的VCL库中,为了使用以及实现的方便,应用对象Application创建了一个用来处理消息响应的隐藏窗口。而正是这个窗口,使得用VCL开发出来的程序存在着与其他窗口不能正常排列平铺等显得有些畸形的问题。本文通过对VCL的深入分析,给出了一个只需要对应用程序项目文件作3行代码的修改就能解决问题的方案,且不需要原有的编程方式作任何改变。
  用Delphi所提供的VCL类库编写的Windows应用程序,有一个明显不同于标准Windows窗口的特点--主窗口的系统菜单与任务栏上的系统菜单不相同。一般情况下,主窗口的系统菜单有六个菜单项而任务栏系统菜单只有三个菜单项。实际使用中我们发现用VCL开发的程序有以下几个方面的尴尬:
  1)不够美观。这是肯定的,与标准不符自然会显得有些畸形。  2)主窗口最小化时没有动画效果。  3)窗口不能正常与其它窗口排列平铺。  4)任务栏系统菜单具有最高的优先级。在存在模态窗口的情况下整个程序仍然可以被最小化,与模态窗口的设计相违背。
  主窗口最小化动画效果的问题在Delphi 5.0以后的版本中已通过Forms.pas中的ShowWinNoAnimate函数解决,但其余几个问题则一直存在。尽管多数情况下这不会对应用程序带来什么影响,但在一些追求专业效果的场合确实不可接受的。由于C++ Builder与Delphi使用的是同一套类库,所以上述问题同样存在于使用C++ Builder编写的Windows应用程序中。在以前的文章里(阿甘的家中可以找到),我已讨论过这个问题,当时的叙述看起来基本上是一种取巧的方法,而我也是在偶然之中才找到那个方法的。本文的任务就是通过对VCL类库作一些分析,说明那样做的原理,其次再给出一个只用3行代码的方法,完完全全地解决Delphi中这个"非正常窗口"的问题。
2.1 应用程序的创建过程
  下面是一个典型的应用程序的Delphi工程文件,我们注意到一开始就有一个对Application对象的Initialize方法的引用,我们的分析也就从这里开始:
program Project1;
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
Application.I
Application.CreateForm(TForm1, Form1);
Application.Rend.
  隐藏的窗口是由Application对象创建的,那么Application对象又从何而来呢?在Delphi的代码编辑窗口中按住Ctrl点击Application就会发现,Application对象是在Forms.pas单元中定义的几个全局对象之一。这还不够,我们想要知道的是Application对象是在什么地方创建的,因为必须成功创建了TApplication类的实例我们才能引用它。想一下,有什么代码会在Application.Initialize之前执行呢?对了,是initialization代码段中的代码。认真调试过VCL源码就可以知道,VCL中很多单元都有initialization代码段,启动Delphi程序时,先是按照uses的顺序执行每个单元中initialization代码段的代码,完成所有的初始化动作之后才执行Application的Initialize方法以初始化Application,所以很显然,Application对象是在某个单元的initialization代码段中创建的。以"TApplication.Create"为关键字在VCL源码目录中搜索一番,我们果然在Controls.pas单元中找到了创建Application对象的代码。在Controls.pas单元的initialization代码段,有一句对InitControls过程的调用,而InitControls的实现则如下所示:
Unit C&initialization
procedure InitCbegin...
Mouse := TMouse.C
Screen := TScreen.Create(nil);
Application := TApplication.Create(nil);...
  好,到这里我们的分析就完成了第一步,因为要解决非正常窗口的问题,我们必须要在Application对象初始化之前做一件事,因此了解应用程序的初始化过程就非常重要了。
2.2 IsLibrary变量
  IsLibrary变量是在System.pas单元中定义的全局标志变量之一。如果IsLibrary的值为true则表明程序模块是一个动态链接库,反之就是一个可执行程序。VCL类库中的某些过程就根据这个标志变量的不同值完成不同的动作。也就是这个变量,在解决Delphi的非正常窗口问题中起到了关键性的作用。前面说过,为了方便,Application对象初始化时创建了一个看不见的窗口(也就是用Spy++之类的工具看到的那个以"TApplication"为类名的窗口),但也正是因为这个看不见的窗口,才使得用Delphi开发出来的程序呈现诸多畸形。好了,如果我们能够去掉这个看不见的窗口(同时去掉任务栏系统菜单),代之以我们的应用程序主窗口,岂不是所有的问题都解决了?说说简单,但实现起来需要对VCL源代码动大手术吗?如果那样岂不是有点本末倒置了?答案当然是不会,否则也不会有这篇文章了。在此我想说的是,在接下来的分析中,我们将会看到,所谓"编程之道,存乎一心",TApplication设计中无心插柳的做法,实则为我们解决这一问题留下了接口。不做源代码的分析,你可能要绕打圈子,而实际上我们会看到,天才的设计留给我们用的东西,不多也不少,刚刚好。打开TApplication类的构造函数Create,我们会发现这样一行代码。
constructor TApplication.Create(AOwner: TComponent);begin
if not IsLibrary then CreateH
  这里说的是,如果程序模块不是动态链接库,那么就执行CreateHandle,而CreateHandle所做的工作在帮助中是这样说的:"如果不存在应用程序窗口,那就创建一个",这里的"应用程序窗口"就是上面所说的看不见的窗口,也即是罪魁祸首之所在,在TApplication类中用FHandle变量来保存其窗口句柄。这里就是根据IsLibrary的值完成了不同的动作,因为在动态链接库中一般并不需要消息循环的,但用VCL开发动态链接库还是要用到Application对象,所以有了这里的设计。好,我们只需要欺骗一下Application对象,在它创建之前把IsLibrary赋值为true,即可滤掉CreateHandle的执行,去掉这个讨厌的窗口了。为IsLibrary赋值的代码显然也应该放在某个单元的initialization代码段中,而且由于initialization代码段中的代码是按照包含的单元的顺序执行的,为了保证在Application对象创建之前把IsLibrary赋值为true,在工程文件中我们必需将包含赋值代码的单元放在Forms单元之前,如下(假设该单元名为UnitDllExe.pas):
UnitDllExe in 'UnitDllExe.pas',
FormMain in 'FormMain.pas' {MainForm},
UnitDllExe.pas代码清单如下:
unit UnitDllE
implementation
initialization
IsLibrary :=
//告诉Applciation对象,这是一个动态链接库,不需要创建隐藏窗口。end.
  好了,编译运行一下,我们看到,由于没有创建隐藏窗口,原先任务栏上的系统菜单消失了,换成了主窗口的系统菜单,主窗口也能够与其它Windows窗口正常排列平铺。但带来的问题是窗口无法最小化。怎么回事呢?还是老方法,跟踪一下。
2.3 主窗口最小化
  最小化属于系统命令,最终必定是调用API函数DefWindowProc来将窗口最小化,所以我们毫无困难地就找到了TCustomForm中响应WM_SYSCOMMAND消息的函数WMSysCommand,其中清楚地写到将最小化的消息重定向到Application.WndProc去处理:
procedure TCustomForm.WMSysCommand(var Message: TWMSysCommand);begin
with Message do
if (CmdType and $FFF0 = SC_MINIMIZE) and (Application.MainForm = Self) then
Application.WndProc(TMessage(Message))
  而在Application.WndProc中,响应最小化消息时又调用了Application的Minimize方法,所以症结一定是在Minimize过程。
procedure TApplication.WndProc(var Message: TMessage);
with Message do
case Msg of
WM_SYSCOMMAND:
case WParam and $FFF0 of
SC_MINIMIZE: M
SC_RESTORE: R
  最后,找到TApplication.Minimize,就一切都明白了。这里对于DefWindowProc函数的调用没有产生任何效果,为什么呢?由于前面我们欺骗Application对象,滤掉了CreateHandle的调用,没有创建Application对象响应消息所需要的窗口,因此导致其句柄FHandle为0,调用当然不成功了。如果能将FHandle指向我们的应用程序主窗口就能解决问题。
procedure TApplication.Mbegin
DefWindowProc(FHandle, WM_SYSCOMMAND, SC_MINIMIZE, 0);
//这里FHandle值为0
  Borland的天才们无心插柳的设计再一次让我们找到了解决问题的办法。由前面的分析我们知道,在用VCL开发的动态链接库中并没有创建隐藏的窗口来接收Windows消息(CreateHandle不执行),但在动态链接库中如果要显示窗口的话又需要一个父窗口。如何解决这个问题呢?VCL的设计者将保存看不见的窗口句柄的FHandle变量设计为可写,于是我们实际上可以简单地给FHandle赋一个值来为需要显示的子窗口提供一个父窗口。例如,在某个动态链接库插件中要显示窗体,我们通常会在主模块可执行文件中将Application对象的句柄通过动态链接库的某个函数传入并赋值给动态链接库的Application.Handle,类似于:
procedure SetApplicationHandle(MainAppWnd: HWND)begin
Application.Handle := MainAppW
  好了,既然Aplication.Handle实际上只是一个在内部用来响应消息的窗口句柄,而原本应该创建的看不见的窗口被我们去掉了,那我们只需要给出一个窗口的句柄,用来代替那个原本多余的隐藏窗口的句柄不就行了?这样的窗口去哪里找?应用程序的主窗口正是上上之选,于是有了下面的代码。
UnitDllExe in 'UnitDllExe.pas',
FormMain in 'FormMain.pas' {MainForm};
{$R *.res}
Application.I
Application.CreateForm(TFormMain, FormMain);
Application.Handle := FormMain.H
Application.Rend.
  于是,一切问题都解决了。你不需要对VCL源码作任何修改,不需要对原有的程序作任何修改,只要在工程文件中增加两行代码,加上UnitDllExe.pas中的一行,共三行代码,即可使得你的应用程序窗口完全和任何一个标准Windows窗口一样正常。
1)任务栏和窗口标题栏拥有一致的系统菜单。2)主窗口最小化时有动画效果。3)窗口能够正常与其它窗口排列平铺。4)存在模态窗口时不能对其父窗口进行操作。
以上实现代码使用于Delphi的所有版本。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&注意事项: 1. 在Application.Handle := FormMain.H之后还需要加上 FormMain.BringToF否则主窗体是inactive的状态(非获得焦点状态)。
 2.这样的应用可能隐含了一部分潜在和未知的问题,建议不要轻易使用。
阅读(...) 评论()16:31 提问
Delphi设计一个登录界面
Delphi中form1是:用户名和密码,用户名输入"test1","test2","test3","test4","test5",
密码都是"123456",都正确,则进入form2,若用户名错误,弹出消息框"用户名不存在"
,若密码错误,则弹出消息框"密码输入错误"。如何用数组编写form1的代码?
var name:array[1..5]
按赞数排序
楼主 这是我积累的Delphi资料 希望对你有帮助啊
楼主,我也有一张Delphi光盘要送给你,包括25本书,几百个控件和例子程序
制作登录界面参考
delphi本身绘制界面也就是拖拖画画的事情,自己尝试下就会了。
n:integer=0;
if (用户名1.text = name[i] ) and (密码1.text = ‘123456') then inc(n);
if (用户名2.text = name[i] ) and (密码2.text = ‘123456') then inc(n);
if (用户名3.text = name[i] ) and (密码3.text = ‘123456') then inc(n);
if (用户名4.text = name[i] ) and (密码4.text = ‘123456') then inc(n);
if (用户名5.text = name[i] ) and (密码5.text = ‘123456') then inc(n);
if n=5 then
form1.moduleresult := mrOK
form1.moduleresult := mrC
没理解你的需求,不好回答。为什么要都正确才进入form2。登录界面的例子网上有很多,实在找不到可以联系我。
都是字符串就不要用数组了,用StringList
其他相似问题2012年 总版技术专家分年内排行榜第一
2013年 总版技术专家分年内排行榜第七2011年 总版技术专家分年内排行榜第五2009年 总版技术专家分年内排行榜第九
2010年10月 Delphi大版内专家分月排行榜第三2010年4月 Delphi大版内专家分月排行榜第三
2012年4月 Delphi大版内专家分月排行榜第三2011年8月 Delphi大版内专家分月排行榜第三
2012年4月 Delphi大版内专家分月排行榜第三2011年8月 Delphi大版内专家分月排行榜第三
2010年9月 Delphi大版内专家分月排行榜第三2010年8月 Delphi大版内专家分月排行榜第三2010年5月 Delphi大版内专家分月排行榜第三
2012年4月 Delphi大版内专家分月排行榜第三2011年8月 Delphi大版内专家分月排行榜第三
2014年4月 Delphi大版内专家分月排行榜第三2014年3月 Delphi大版内专家分月排行榜第三2013年5月 Delphi大版内专家分月排行榜第三2013年1月 Delphi大版内专家分月排行榜第三2010年11月 Delphi大版内专家分月排行榜第三2009年12月 Delphi大版内专家分月排行榜第三2009年11月 Delphi大版内专家分月排行榜第三
2017年4月 Delphi大版内专家分月排行榜第二2017年1月 Delphi大版内专家分月排行榜第二2014年10月 Delphi大版内专家分月排行榜第二2014年9月 Delphi大版内专家分月排行榜第二
2014年4月 Delphi大版内专家分月排行榜第三2014年3月 Delphi大版内专家分月排行榜第三2013年5月 Delphi大版内专家分月排行榜第三2013年1月 Delphi大版内专家分月排行榜第三2010年11月 Delphi大版内专家分月排行榜第三2009年12月 Delphi大版内专家分月排行榜第三2009年11月 Delphi大版内专家分月排行榜第三
2012年4月 Delphi大版内专家分月排行榜第三2011年8月 Delphi大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 东方快车谋杀案2017bd 的文章

 

随机推荐