delphi 磁性窗体
Delphi程序设计电子教案第3章 可视化编程窗体和组件-PPT文档资料

设置属性 组件的方法 事件处理代码编写
布局属性Align与Anchor
Splitter组件
引例:用窗体与组件设计学生档案管理主界面
SpeedButton 组 ComboBox组件 件 Panel组件 RadioGroup 件 组 RadioButton 组 BitBtn组件 件
Bevel组件 Label组件 Edit组件 Image组件
它。
(8)关闭工程和Delphi ① 关闭工程:File | Close All ; ② 关闭Delphi:File | Exit。
3.2 窗体与组件
3.2.1 窗体和组件 1.窗体和组件的关系
窗体和组件之间有一种包容关系,这是指窗体是一种容器,
组件就像是容器中包容的对象。
例如,在窗体上放一个标签、一个编辑框、一个按钮时,
在事件处理过程的begin 与end;之间输入程序代码。
3.1.2 可视化编程的步骤
(5)窗体、对象监视器与代码编辑器的打开与转换
① 打开窗体:View | Form (或View工具栏中 “View Form”), 从弹出式菜单可选择所需打开的窗体; ② 打开单元:View | Unit (或View工具栏中 “View Unit”), 从弹出式菜单可选择所需打开的单元;
在程序运行时用户可以与控件进行交互。 控件在设计阶段与运行阶段的外观是相同的。
3.2.1 窗体与组件
(2)不可见组件:是用户无法与其进行交互的组件。 设计阶段表现为小图标,通过该图标可以设置组件的属性、 方法等。这些组件主要用于完成各种不同的任务,为应用
程序的窗口界面中,用输入设备向组件发出动作时,触
发该Байду номын сангаас件的事件处理程序,完成事先规定操作。
盘古delphi窗体设计规范

1.1 窗体/对话框设计1.1.1 一般说明在本规范中主要对应用程序的窗体/对话框界面进行说明。
并且主要是说明在窗体中控件的排列规范1.1.2 消息对话框用来显示错误消息和其他重要信息的模式对话框叫消息对话框。
在对话款中包含标题栏,用来表示消息的来源。
在消息对话框中还包含一个只是正在被显示的消息种类的图形符号,消息的三种类型是:(提示:信息框统一采用MessageBox )。
●信息消息; ●警告消息; ● 极重要消息。
图 1 信息消息框图 2 警告消息框图 3 极重要消息1.1.3 窗体在窗体的设计中,本规范主要说明按钮在窗体中的放置位置。
● 窗体中的颜色设置为标准的Windows 颜色,以灰色为主。
窗体中文字颜色为黑色;● 窗体中的字体为宋体,字号为5号;● 窗体的大小应为60的倍数;● 窗体中的标题栏中不能含有图标,文字对齐方式为左对齐,窗体中要包含关闭按钮。
如果需要设置显示为(?)的帮助按钮;● 窗体中主要控制要包含快捷键;● 窗体的位置。
窗体通常水平和垂直地置于应用程序窗口的中央。
如果一个应用程序找到一个更适合对话框的位置,也可以放在别处。
●如果按钮命令显示一个对话框,在标题中需要有如下的提示(…)。
如(显示图例…)●按钮的大小。
按钮的高为“27”,宽为“90”(在将按钮和对话框的网格对齐时,网格的间隔设为10-15)。
当按钮的标题超过两个汉字时,可以适当增加按钮的宽。
如果需要,可以增加按钮的高,当改变按钮的形状,风格时,应该经过项目组的统一;●推荐的按钮。
每个对话框都至少包含一个关闭对话框的按钮。
只要求用户确认(而不用选择)的消息对话框只包含一个标以“确认”的按钮。
其他所有对话框都至少包含两个按钮:一个关闭对话框并启动一个动作;另一个关闭对话框但并不启动任何动作。
启动动作的按钮通常标以“确认”。
关闭对话框但不启动任何动作的按钮通常标以“取消”。
某些对话框(称为多动作对话框)另外包括一些允许用户启动某些动作但不管比对话框的按钮。
如何使用Delphi实现无边界窗体的移动

在⽤Delphi制作Windows程序的窗体时,窗体的边界有四种选择:对话框式(bsDialog),单边固定式(bsSingle),双边可变式(bsSizeable),⽆边界式(bsNone)。
当设置为bsNone时,窗体也就没有标题条,很显然,程序运⾏以后就⽆法移动窗体了。
事实上,⽆边界窗体是很有⽤的,例如,象Word⾥⾯的浮动式⼯具箱其实就是⽆边界窗体,它可以⼤⼤节约屏幕空间。
那么,如何⽤Delphi实现这个功能呢?显然,这需要修改Windows的内部消息,也就是说,需要把“MouseDownonForm”这个消息改为“MouseDownonCaption”,这其中有三个关键:捕捉MouseDown消息、判断光标位置、发送MouseDown消息。
如果光标在窗体中,则发送MouseDownonCaption消息。
在Delphi的对象巡检器中列出的所有事件是不能捕捉到Windows消息的,因为这些都是已经发出的消息,⽆法修改了。
捕捉Win dows消息有两种办法:⼀个就是增加⼀个消息处理句柄,直接处理Windows消息;另⼀个是对消息进⾏过滤,滤出所需消息。
第⼆个办法⽐较常⽤,适⽤于各种情况,下⾯就是移动⽆边界窗体程序⽚断,加注释部分是⼿动加⼊的: unitUnit1; : type TForm1Κclass(TForm) procedureFormCreate(Sender:TObject); : public {申明消息过滤过程} procedureAppMessage(varMsg:TMsg;varHandled:Boolean); : implementation procedureTForm1.FormCreate(Sender:TObject); begin {捕捉消息:将程序的收到消息事件与消息过滤过程关联起来} Application.OnMessage:ΚAppMessage; end; procedureTForm1.AppMessage(varMsg:TMsg;varHandled:Boolean); begin {如果⿏标左键按下的话} ifMsg.messageΚWM—LButtonDownthen begin {判断光标是否在⽤户⼯作区内} ifDefWindowProc(Handle,WM—NCHitTest,0,GetMessagePos)ΚHTClientthen begin {发出⿏标在⽤户标题栏内被按下的消息} SendMessage(Handle,WM—NCLButtonDown, HTCaption,GetMessagePos); Handled:Κtrue;{消息处理完毕,窗体不再接受M ouseDown及Click事件,如果为false,程序的运⾏稍微有些不正常。
DELPHI 窗体属性

DELPHI界面必学的知识2011-06-15 23:23窗体的属性1.Appearance属性功能:设置窗体中控件是否以三维立体方式显示。
取值:1) 1-3D 默认设置,以三维立体方式窗体上的控件。
2) 0-Flat 以二维方式显示窗体上的控件。
该属性不能通过代码在运行时设置,必须通过属性窗口在设计时设置。
2.AutoRedraw属性功能:设置窗体中显示的信息是否重画。
当返回被其他窗体遮住的窗体时,如果此属性设置为True,则自动刷新或者重画窗体中的所有信息,否则不重画。
3.BackColor属性功能:设置窗体的背景颜色。
4.BorderStyle属性功能:设置窗体的边界样式。
取值:1) 0-None 窗体不仅没有边界,而且没有标题栏2) 1-Fixed Single 边界是固定的单线,运行时不能改变窗体大小3) 2-Sizable 默认设置,窗体的大小可以在运行时改变4) 3-Fixed Dialog 固定的对话框,大小不能改变5) 4-Fixed ToolWindow 固定的工具箱窗口,大小不能改变6) 5-Sizeable ToolWindow 大小可变的工具窗口该属性的设置会影响其他属性的设置值。
如,其设置为0、3、4或5时,MinButton、MaxButton和ShowInTaskbar属性将自动设置为False,表示这类窗体没有“最小化”“最大化”按钮。
5.Cation属性功能:设置窗体标题栏中显示的文本内容。
6.ClipControls属性功能:当Paint事件发生时,确定窗体中的内容是全部重画还是只重画最新暴露的区域。
取值:True 默认设置,重画整个窗体内容False 重画最新暴露的区域7.ControlBox属性功能:设置窗体左上角是否显示控制菜单按钮。
取值:True 默认设置,窗体中含有窗体图标和控制按钮Flase 窗体中不含窗体图标和控制按钮8.DrawMode属性功能:用于设置绘图模式,以便控制图形的显示效果。
(Delphi)窗体获取一个窗口的所有子窗口(包括嵌套)

(Delphi)窗体获取一个窗口的所有子窗口(包括嵌套)unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, ExtCtrls;typeTForm1 = class(TForm)Panel1: TPanel;Panel2: TPanel;Edit1: TEdit;Edit2: TEdit;Edit3: TEdit;Edit4: TEdit;Edit5: TEdit;Button1: TButton;procedure Button1Click(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}{这应该使用递归函数}procedure GetChildWindows(h: HWND);varbuf: array[0..255] of Char; {这个缓冲区是获取类名用的, 如果不需要可以删除}beginh := GetWindow(h, GW_CHILD); {第一个子窗口}while h <> 0 dobegin{下面两行是要执行的操作, 并假定只处理 TEdit}GetClassName(h, buf, Length(buf));if buf = 'TEdit' then ShowMessageFmt('%s:%d', [buf, h]);h := GetWindow(h, GW_HWNDNEXT); {下一个子窗口}GetChildWindows(h); {递归}end;end;{测试}procedure TForm1.Button1Click(Sender: TObject);beginGetChildWindows(Handle);end;end.--------------------------------------------------------------------------------窗体文件:--------------------------------------------------------------------------------object Form1: TForm1Left = 0Top = 0Caption = 'Form1'ClientHeight = 206ClientWidth = 318Color = clBtnFaceFont.Charset = DEFAULT_CHARSETFont.Color = clWindowTextFont.Height = -11/doc/c912512113.html, = 'Tahoma'Font.Style = []OldCreateOrder = FalsePixelsPerInch = 96TextHeight = 13object Panel1: TPanelLeft = 8Top = 8Width = 177Height = 190Caption = 'Panel1'TabOrder = 0object Panel2: TPanelLeft = 8Top = 112Width = 161Height = 75Caption = 'Panel2' TabOrder = 0 object Edit5: TEdit Left = 24Top = 8Width = 121 Height = 21 TabOrder = 0 Text = 'Edit5'endendobject Edit3: TEdit Left = 32Top = 16Width = 121 Height = 21 TabOrder = 1 Text = 'Edit3'endobject Edit4: TEdit Left = 32Top = 43Width = 121 Height = 21 TabOrder = 2 Text = 'Edit4'endendobject Edit1: TEdit Left = 191Top = 24Width = 121Height = 21 TabOrder = 1Text = 'Edit1'endobject Edit2: TEditLeft = 191Top = 51Width = 121Height = 21 TabOrder = 2Text = 'Edit2'endobject Button1: TButton Left = 216Top = 152Width = 75Height = 25Caption = 'Button1' TabOrder = 3 OnClick = Button1Click endend。
delphi trichedit用法

delphi trichedit用法Delphi Trichedit用法1. 什么是Delphi TricheditDelphi Trichedit是Delphi提供的一个组件,用于创建和编辑RTF格式的文本。
它支持丰富的文本格式设置和自定义功能,适用于开发各种文本编辑程序。
2. 创建Trichedit控件要使用Delphi Trichedit,首先需要在Delphi的窗体上创建一个Trichedit控件。
你可以在Delphi的组件面板上找到Trichedit控件,并将其拖放到窗体上。
3. 设置Trichedit的属性Trichedit控件具有许多属性,可以通过设置这些属性来控制文本的格式和行为。
以下是一些常用的属性及其说明:•Font:设置文本的字体、字号和样式。
•Color:设置文本的颜色。
•ReadOnly:设置是否只读,如果设置为True,则无法编辑文本。
•WordWrap:设置是否自动换行。
•ScrollBars:设置是否显示滚动条。
•PlainText:获取或设置文本的纯文本内容。
4. 设置文本格式通过Trichedit控件的属性和方法,可以对文本进行格式设置,例如:•SelAttributes:获取或设置当前选中文本的属性,例如字体、字号和颜色。
•Paragraph:设置段落的缩进、对齐方式和行距等属性。
•Lines:获取或设置文本的内容,可以通过添加、删除、插入和替换等方法来编辑文本。
5. 处理事件Trichedit控件还支持各种事件,可以在事件处理程序中编写代码来实现一些自定义功能。
以下是一些常用的事件:•OnChange:文本内容发生改变时触发的事件。
•OnKeyPress:按下键盘按键时触发的事件。
•OnSave:将文本保存到文件时触发的事件。
•OnLoad:从文件加载文本时触发的事件。
6. 导出和导入文本通过使用Trichedit控件的方法,可以将文本导出为RTF格式或纯文本格式,也可以从文件导入文本。
delphi 函数里面调用窗口的方法

delphi 函数里面调用窗口的方法(最新版3篇)《delphi 函数里面调用窗口的方法》篇1在Delphi 中,如果在函数内部需要调用窗口的方法,可以使用以下两种方式:1. 使用窗体的方法名称直接调用:如果在函数内部需要调用窗口的方法,可以使用窗体的方法名称直接调用。
例如,如果窗体名为Form1,需要调用其方法Name1,则可以在函数内部使用以下代码进行调用:```1;```这种方式调用窗口方法时,需要保证窗体已经初始化,否则会出现异常。
2. 使用窗体的方法指针进行调用:如果在函数内部需要调用窗口的方法,可以使用窗体的方法指针进行调用。
例如,如果窗体名为Form1,需要调用其方法Name1,则可以在函数内部使用以下代码进行调用:```varMethod: TMethod;begin// 获取窗体Form1 的方法指针Method := Form1.MethodName1;// 调用方法Method();end;```这种方式调用窗口方法时,不需要保证窗体已经初始化,因为方法指针是在运行时获取的。
《delphi 函数里面调用窗口的方法》篇2在Delphi 中,如果在函数内部需要调用窗口的方法,可以使用以下方式:1. 在函数内部创建一个窗口对象,然后调用窗口的方法。
例如:```function CallWindowMethod(Window: TWindow): Boolean;varMethodName: string;Method: TMethod;begin// 获取窗口类的方法MethodName := "WindowMethod";Method := Window.GetType().GetMethod(MethodName);if Method = nil thenraise Exception.Create("Window method not found");// 调用窗口方法Method.Invoke(Window, []);// 返回布尔值表示是否成功调用Result := True;end;```2. 在函数内部使用全局变量或类变量保存窗口对象,然后调用窗口的方法。
Delphi实现窗体感知鼠标滑过并自动隐藏与显示窗口的方法

Delphi实现窗体感知⿏标滑过并⾃动隐藏与显⽰窗⼝的⽅法本⽂实例讲述了Delphi实现窗体感知⿏标滑过并⾃动隐藏与显⽰窗⼝的⽅法。
分享给⼤家供⼤家参考。
具体实现⽅法如下:constWM_MouseEnter = $B013;WM_MouseLeave = $B014;typeTfrmMain = class(TForm)..Timer1: TTimer;procedure Timer1Timer(Sender: TObject);protectedprocedure WMMouseEnter(var Msg: TMessage); message WM_MouseEnter;end;implementation{$R *.dfm}procedure TfrmMain.WMMouseEnter(var Msg: TMessage);beginif(Top<0) thenbeginTop := 0;//为保证下拉窗体后呈现在最前⾯SetWindowPos(Handle,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE);//将窗体推到最前SetWindowPos(Handle,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE);//然后取消窗体最前end;Timer1.Enabled := True;end;//依赖定时器定时检查⿏标是否还在窗体范围内,//这样此能避免因为快速移动⿏标⽽丢失MOUSELEAVE事件procedure TfrmMain.Timer1Timer(Sender: TObject);varrc:TRECT;pt:TPOINT;beginGetWindowRect(self.Handle,rc); //取窗体的矩形区域GetCursorPos(pt); //取得当前⿏标所在位置if(not PtInRect(rc,pt)) then //如果⿏标不在窗体范围内beginif(Top = 0) then//如果⽬前窗体正吸附在屏幕上沿,则上移隐藏窗体beginTop := 0-Height+2;end;Timer1.Enabled := False; //窗体隐藏后定时器关闭SetWindowPos(Handle,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE);//将窗体推到最前end;end;希望本⽂所述对⼤家的Delphi程序设计有所帮助。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
转载自百度空间,技术文档,以便自学
Delphi 磁性窗体
FORM1
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
form2.Show;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;
end.
下边是测试用的form2
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm2 = class(TForm)
private
procedure WMWINDOWPOSCHANGING(Var Msg:
TWMWINDOWPOSCHANGING);message WM_WINDOWPOSCHANGING;
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
uses Unit1;
{$R *.dfm}
{ TForm2 }
procedure TForm2.WMWINDOWPOSCHANGING(var Msg: TWMWINDOWPOSCHANGING);
var
WorkDound: TRect;
remove : Word;
begin
remove :=50; //可随意设置,是磁性的范围大小。
WorkDound.Left:=form1.left;
WorkDound.Top:=form1.Top;
WorkDound.Right:=form1.left+form1.Width;
WorkDound.Bottom:=form1.Top+form1.Height;
with Msg.WindowPos^ do
begin
if (x+cx
(x+cx
x:=WorkDound.Left-cx;
end;
if (x>WorkDound.Right-remove) then //右方具有磁性
if (x
begin
x:=WorkDound.Right;
end;
if (y+cy
(y+cy
y:= WorkDound.Top-cy;
end;
if (y>WorkDound.Bottom-remove) then //下方具有磁性
if (y
begin
y:= WorkDound.Bottom;
end;
end;
inherited;
end;
end.