Lazarus 如何使用通用控件 & 为窗体创建菜单

对VB和Delphi来说,通用控件是一种美妙的回忆,现在Lazarus可以让我们再次重温那个时代!

如何使用通用控件

StdCtrlsComCtrlsExtCtrls包含了常用控件的构建形式及Lazarus应用程序中常用对象。

许多控件应用程序开发人员都要使用,如TButtonTMemoTScrollBar等等。声明的控件都继承自父类。

使用这些控件时,你可以选择相应控件,在窗体上拖放就可以了。也可以使用代码创建,但是,在你不需要时,你需要销毁它。

设置属性

在窗体设计器上放置控件后,在对象检查器中,你可以设置控件属性或编写相应事件代码。

如,你在窗体上放置了一个按钮(TButton),选择它,并移动它以改变位置,你会可以看到它的top和left值的变化。在对象观察器中Height、Width值分别代表其大小高度和宽度。

此外,你可以使用代码来改变对象属性:

Form1.Button1.Height := 48;

在FormCreate过程中书写上面的代码,程序运行时,将看到效果。

总之,有三种方法,可以设置对象的属性:

  • 通过鼠标在窗体上调整
  • 通过设置对象观察器中的值
  • 通过代码来设置属性

公共属性

每个组件(控件)都有不同的属性,有某些是相同的,常见的,下面这介绍这些常用属性:

通过选择属性或关键字,在对象观察器或源代码编辑器中按F1来获得帮助。

如果该页面上的属性描述不够,您可以通过选择继承列表中的链接或在对象声明中选择祖先类型来导航到相应的祖先类别描述。

常用属性
属性说明介绍
Action行动与对象关联的主要动作或事件。如,在选择“退出”时,会导致“关闭”。
Align对齐定义与父对象对齐方式。alTop:顶对齐;alBottom:底对齐;alLeft、alRight:左对齐和右对齐;alNone:无;alClient:占用父对象所有空间。
Anchor用于保持控件的父控件;当父控件调试大小将调整与其距离。[akBottom,akRight]将保持固定在父控制右下角距离。
AutoSelect自动选择为True时,控件在获取到焦点,或当按下↵ Enter键时选择所有文本。
AutoSelected自动选中True表示编辑框或组合框控件刚刚执行了“自动选择”操作,因此随后的鼠标点击和按键操作将正常进行而不会选中文本。
BorderSpacing边框间距锚定控件与其父级之间的边缘空间。
Caption标题设置显示内容,如按钮标题为“关闭”或“执行”。默认情况下,标题名称与Name属性值相同。
CharCase字符显示设置字母在编辑控件中显示方式:Normal:正常(不改变字母大小写);ecLowerCase:转换为小写;ecUppercase:转换为大写。
Constraints限制设置控件最大、小、高、宽度。如果调整控件大小,新的大小将在此范围内。You should take care when setting these options that they do not conflict with the Anchors and Align settings.
Color颜色设置控件的文本颜色。
Enabled启用设置控制是否可用,如果为False,在窗体上显示为灰色
Font字体设置对象的字体信息,通常(+)号展开详细,如字体、字号、颜色等。
Hint提示鼠标悬停在控件上时,弹出的提示信息。请注意ShowHint属性为True时才显示。
Items项目包含的数据信息,如果文本行等。
Lines列表字符串数组,包含单个数据,数组为索引从0开始,即[0..numLines-1]。
Name名称设置控件的标识符。如TBitButton的实例,为Form1.BitBitton1、Form1.BitButton2等等,程序员应该使用见名真义的名称,如ExitButton(退出按钮)或OKButton(确定按钮)。
PopUpMenu弹出式菜单设置在控件上右击时,弹出的菜单。
Position (or Top, Left)位置设置控件位置。
ReadOnly只读为True时,控件只能被读取,不能被更改。如Edit。
ShowHint显示提示设置鼠标'悬停'在控件上时,是否显示提示信息。
Size (or Height and Width)大小设置控件尺寸。
Style样式样式的选项取决于所考虑的控件类型:例如,样式可以由TFormStyle、TBorderStyle、TButtonStyle等定义。
TabOrderTab键顺序输入整数,设置Tab ⇆的顺序。
TabStop制表位为False时,Tab ⇆将无法选中此控件,否则可以。
Text文本字符串文本,表示该控件包含的数据。适用于Text、Memo、StringList类型。Most of the editing operations (such as SelectClearCutCopy) are performed in this part of the object, which holds the actual string being edited. If the control contains more than a single line of text, for example TMemo or TComboBox, then the textual elements are arranged as an array of strings (zero-indexed, ie numbered from [0..numLines-1]) in Lines.
Visible可见为True,在窗体中可以看到此控件,否则将隐藏。
WordWrap自动换行为True时,文本内容将自动换行。

事件动作

许多行动通常列在“对象观察器”中的“事件”选项卡里。在列表中选择相应事件,在下拉列表中将会显示你已经定义的方法,并允许你对其关联。点击旁边的"..."按钮,将跳到源代码编辑器里,你在那里可以编写相应程序。

“事件“选项卡中,显示了当前控件支持的事件,像OnClick事件:鼠标点击事件;OnEntry:当获得焦点时;OnExit:当失去焦点时;或者你可以编写:OnChange:内容改变时;或OnScroll:在滚动条上操作时等等,根据你的需要来选择使用哪些事件进行哪些操作。

在窗体设计器上右击控件 ,“创建默认的事件“也有相同的效果,通常是OnClick(点击)事件。之后在源代码编辑器里编写相应操作。

在面向对象程序设计中,使用 TActionList 组件是为了集中处理许多常用的操作,把用户界面和应用逻辑分开,减少程序的代码行数,方便程序的维护和调试。它用于维护一系列动作列表,以供其他组件或控制所使用,如菜单和按钮。

单击方法

常用事件
事件说明介绍
OnChange改变事件当检测到任何更改(如鼠标移动、点击、按键、编辑文字、更改图片等)都将触发此事件。
OnClick点击事件鼠标点击时触发此事件(点击,指的是鼠标左键点击),点击事件大多是控件默认的事件,如点击一个按钮、单选框或复选框。
Click单击方法单击方法,在代码中模拟点击控件。一个程序可以调用相同代码的OnClick事件,通过点击激活其他事件。这个方法可以在程序启动时使用,而不是用户点击后再进行某些操作。
OnDragDrop拖放事件拖放操作之前,即当鼠标选中某些信息(如文本)要移动到新位置时。
OnEditingDone编辑完成事件当用户完成编辑/修改时,通常用来验证输入内容,如检测输入的文本是不是有效的IP地址。
OnEntry获得焦点事件当控件获取到焦点时,触发此事件。
OnExit移出事件当鼠标移出控件区域时触发此事件。
OnKeyPress按键事件按键事件,当按下某键时,将触发此事件。不同于OnKeyDown:当按下但不松开某键时触发此事件。
OnKeyDown按下键不松事件如果一个键被按下,但不松开,将触发此事件。
OnKeyUp松开键事件松开按键时触发此事件。
OnMouseMove鼠标移动事件当鼠标在控件上移动时触发此事件。
OnMouseDown鼠标按下事件鼠标按下但不松开时触发此事件。
OnMouseUp鼠标松开事件鼠标按下并松开时触发此事件。
OnResize改变大小事件调整控件大小时触发此事件。

就常见情况下,Click是使用最多的动作,也就是Click触发执行代码,完成相关任务。

构造和析构函数

每个对象都有两个相关联的方法:

  • 构造函数:在创建时,即分配对象所需内存和资源时。
  • 析构函数:在删除时,即释放分配对象所需内存和资源时。

释放对象,你需要使用free方法,因为它会检测对象值是否为nil。如果你调用已经销毁的对象,它将产生一个错误。

销毁时,注意以下:

  • Declare Destroy with the override directive, because it is a virtual method.
  • Always call 'inherited Destroy;' as the last thing on the destructor code.
  • Be aware that an exception may be raised on the constructor in case there is not enought memory to create an object, or something else goes wrong. If the exception is not handled inside the constructor, the object will be only partially built. In this case Destroy will be called when you weren't expecting it, so your destructor must check if the resources were really allocated before disposing of them.
  • Remember to call Free for all objects created on the constructor.

为窗体创建菜单

TMainMenu是大多都使用的;在窗体顶部会出现菜单栏,设计者可以定制不同的菜单项。TPopupMenu是一个与上下文相关的菜单。通常是在控件附近点击时弹出的。

主菜单是非可视组件:也就是说,在组件面板中选择菜单图标,放置在窗体上,运行时不会被显示,你需要创建菜单项,像TPopupMenu菜单,你需要关联相应组件的PopupMenu属性。


若要使用菜单编辑器:右击窗体上的菜单控件,在弹出的菜单中选择(Menu Editor)菜单编辑器,在弹出的窗口中,对菜单进行设置。

默认将显示一个NewItem1菜单项,右击它,弹出的菜单中,你可以继续在其上面或下面添加菜单,也可以子菜单。在对象观察器中,设置菜单项属性。

当然,你应该给菜单项起个有意义的名字,如File open(打开文件)、Close(关闭)等。 如果你想热键,即在菜单项后显示(&N),你只需要直接输入即可。当然,你也可以给菜单项关联快捷键,对象观察器中的ShortCut和ShortCutKey2属性,分别设置第1,2快捷键;如(复制,Ctrl+C;粘贴,Ctrl+V)。

另外,如需要在菜单项间插入一条分隔线,只需要设置菜单项的Caption属性为-即可。


你可以结合ActionList组件,对菜单各项的事件进行统一编写。

By default, a number of standard actions are pre-loaded from StdActns or, if DataAware controls are used, from DBActns. These actions can be chosen using the ActionList editor which appears when you right-click on the ActionList icon on the Form Designer.

  • 13
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值