当前位置: 首页 > news >正文

【delphi11】delphi基础探索【三、基础组件和事件】

目录

基础组件

1. TButton(按钮)

2. TLabel(标签)

3. TEdit(编辑框)

4. TMemo(多行编辑框)

5. TComboBox(组合框)

6. TCheckBox(复选框)

7. TRadioButton(单选按钮)

8. TListBox(列表框)

9. TGroupBox(分组框)

10. TPanel(面板)

11. TImage(图像)

12. TMainMenu(主菜单)

13. TPopupMenu(弹出菜单)

14. TStatusBar(状态栏)

15. TToolBar(工具栏)

16. TTrackBar(滑动条)

17. TProgressBar(进度条)

18. TUpDown(上下按钮)

19. TDateTimePicker(日期时间选择器)

20. TMonthCalendar(月历)

21. TTimer(计时器)

22. TScrollBar(滚动条)

23. TTreeView(树形视图)

24. TListView(列表视图)

25. TPageControl(页面控制)

26. TTabSheet(标签页)

27. TSplitter(分割器)

28. TShape(形状)

29. TBevel(斜面)

30. TRichEdit(富文本编辑器)

31. TScrollBox(滚动框)

32. TStaticText(静态文本)

33. TColorBox(颜色框)

34. TFontDialog(字体对话框)

35. TOpenDialog(打开文件对话框)

36. TSaveDialog(保存文件对话框)

37. TPrintDialog(打印对话框)

38. TPrinterSetupDialog(打印机设置对话框)

39. TImageList(图像列表)

40. TActionList(动作列表)

41. TPageScroller(页面滚动器)

42. TApplicationEvents(应用程序事件)

事件和事件处理器

1. 事件

2. 事件处理器

创建和使用事件处理器

步骤 1:选择组件和事件

步骤 2:自动生成事件处理器

常见事件类型

高级事件处理


基础组件

1. TButton(按钮)

  • 描述:允许用户执行动作,如提交数据或关闭窗口。
  • 常用属性Caption(显示的文本),OnClick(点击事件处理器)。

2. TLabel(标签)

  • 描述:显示不可编辑的文本,常用于描述其他控件或显示信息。
  • 常用属性Caption(显示的文本)。

3. TEdit(编辑框)

  • 描述:允许用户输入单行文本。
  • 常用属性Text(文本内容),MaxLength(最大长度)。

4. TMemo(多行编辑框)

  • 描述:允许用户输入多行文本。
  • 常用属性Lines(文本行数组),ScrollBars(滚动条类型)。

5. TComboBox(组合框)

  • 描述:结合了文本框和下拉列表,用户可以从列表中选择一个选项,也可以输入文本。
  • 常用属性Items(下拉列表的选项),Text(当前文本)。

6. TCheckBox(复选框)

  • 描述:允许用户选择一个或多个选项。
  • 常用属性Checked(是否选中),Caption(显示的文本)。

7. TRadioButton(单选按钮)

  • 描述:允许用户从一组选项中选择一个。
  • 常用属性Checked(是否选中),Caption(显示的文本)。

8. TListBox(列表框)

  • 描述:显示一个项目列表,用户可以从中选择。
  • 常用属性Items(列表中的项目),ItemIndex(选中项目的索引)。

9. TGroupBox(分组框)

  • 描述:提供一个框架来组织相关的控件。
  • 常用属性Caption(分组框标题)。

10. TPanel(面板)

  • 描述:用于组织控件或作为其他控件的容器。
  • 常用属性:无特定,主要作为布局工具。

11. TImage(图像)

  • 描述:用于显示图像。
  • 常用属性Picture(图像内容),Stretch(是否拉伸图像以适应控件大小)。

12. TMainMenu(主菜单)

  • 描述:提供应用程序的主菜单。
  • 常用属性Items(菜单项)。

13. TPopupMenu(弹出菜单)

  • 描述:提供一个在用户右击时显示的菜单。
  • 常用属性Items(菜单项)。

14. TStatusBar(状态栏)

  • 描述:在应用程序底部显示状态信息。
  • 常用属性Panels(状态栏面板)。

15. TToolBar(工具栏)

  • 描述:提供一排按钮,用于快速访问常用命令。
  • 常用属性:通常与 TToolButton 结合使用,放置具体的工具按钮。

16. TTrackBar(滑动条)

  • 描述:允许用户通过滑动选择一个值的控件。
  • 常用属性Min(最小值),Max(最大值),Position(当前位置)。

17. TProgressBar(进度条)

  • 描述:显示任务进度的控件。
  • 常用属性Min(最小值),Max(最大值),Position(当前进度)。

18. TUpDown(上下按钮)

  • 描述:提供一对上下箭头按钮,通常用于增加或减少值。
  • 常用属性Min(最小值),Max(最大值),Position(当前位置)。

19. TDateTimePicker(日期时间选择器)

  • 描述:允许用户选择日期和时间的控件。
  • 常用属性Date(选择的日期),Time(选择的时间)。

20. TMonthCalendar(月历)

  • 描述:显示一个月历,用户可以选择日期。
  • 常用属性Date(当前选择的日期)。

21. TTimer(计时器)

  • 描述:在指定的时间间隔执行代码。
  • 常用属性Interval(触发间隔,以毫秒为单位),OnTimer(触发事件)。

22. TScrollBar(滚动条)

  • 描述:提供一个标准的滚动条,用于控制内容的视图。
  • 常用属性MinMaxPosition

23. TTreeView(树形视图)

  • 描述:显示层次结构数据,如文件系统的目录结构。
  • 常用属性Items(节点集合)。

24. TListView(列表视图)

  • 描述:以列表的形式显示项目,类似于 Windows 中的文件浏览器。
  • 常用属性Items(项目集合),ViewStyle(显示风格)。

25. TPageControl(页面控制)

  • 描述:提供一个包含多个页面(TTabSheet)的控件,每个页面可以容纳其他控件。
  • 常用属性Pages(页面集合),ActivePage(当前激活的页面)。

26. TTabSheet(标签页)

  • 描述:TPageControl 的单个页面。
  • 常用属性:通常作为 TPageControl 的一部分,容纳其他控件。

27. TSplitter(分割器)

  • 描述:允许用户动态调整相邻控件的大小。
  • 常用属性:无特定,用于设计布局。

28. TShape(形状)

  • 描述:用于绘制简单的形状,如圆形、矩形等。
  • 常用属性Shape(形状类型),Brush(填充设置),Pen(边框设置)。

29. TBevel(斜面)

  • 描述:用于创建凹凸效果的矩形区域,常用于视觉分隔。
  • 常用属性Shape(形状),Style(风格)。

30. TRichEdit(富文本编辑器)

  • 描述:一个可以显示和编辑富文本格式的控件,支持不同的字体、颜色和文本格式。
  • 常用属性Lines(文本行),SelText(选中的文本),PlainText(是否纯文本模式)。

31. TScrollBox(滚动框)

  • 描述:一个可包含其他控件的容器,当内容超出其大小时提供滚动条。
  • 常用属性:无特定,主要作为容器使用。

32. TStaticText(静态文本)

  • 描述:用于显示简单的文本信息,类似于 TLabel,但具有更多样式选项。
  • 常用属性Caption(文本内容),Alignment(对齐方式)。

33. TColorBox(颜色框)

  • 描述:显示一个下拉列表,允许用户从预定义的颜色集中选择颜色。
  • 常用属性Selected(选中的颜色)。

34. TFontDialog(字体对话框)

  • 描述:提供一个标准的字体选择对话框。
  • 常用属性Font(选中的字体),Options(对话框选项)。

35. TOpenDialog(打开文件对话框)

  • 描述:允许用户选择文件或文件夹。
  • 常用属性FileName(选中的文件名),Filter(文件过滤器)。

36. TSaveDialog(保存文件对话框)

  • 描述:允许用户指定保存文件的名称和位置。
  • 常用属性:与 TOpenDialog 类似。

37. TPrintDialog(打印对话框)

  • 描述:提供一个标准的打印设置对话框。
  • 常用属性Copies(打印份数),PrintRange(打印范围)。

38. TPrinterSetupDialog(打印机设置对话框)

  • 描述:允许用户修改打印机的设置。
  • 常用属性:通常与系统打印机设置相关。

39. TImageList(图像列表)

  • 描述:用于存储图像集合,常与其他控件(如工具栏)配合使用。
  • 常用属性Images(图像集合),WidthHeight(图像尺寸)。

40. TActionList(动作列表)

  • 描述:管理应用程序的动作(如命令或操作),可以跨多个菜单项和工具栏按钮共享。
  • 常用属性Actions(动作集合)。

41. TPageScroller(页面滚动器)

  • 描述:提供一个滚动区域,可以包含多个控件,通常用于长表单或内容。
  • 常用属性AutoScroll(自动滚动),Orientation(方向)。

42. TApplicationEvents(应用程序事件)

  • 描述:用于处理整个应用程序范围内的事件,如激活、最小化、关闭等。
  • 常用事件OnActivate(激活时),OnDeactivate(失活时),OnException(异常发生时)。
unit MainForm;interfaceuses// 引入必要的单元// ...typeTForm1 = class(TForm)Button1: TButton;Label1: TLabel;Edit1: TEdit;Memo1: TMemo;ComboBox1: TComboBox;CheckBox1: TCheckBox;RadioButton1: TRadioButton;ListBox1: TListBox;GroupBox1: TGroupBox;Panel1: TPanel;Image1: TImage;MainMenu1: TMainMenu;PopupMenu1: TPopupMenu;StatusBar1: TStatusBar;ToolBar1: TToolBar;TrackBar1: TTrackBar;ProgressBar1: TProgressBar;UpDown1: TUpDown;DateTimePicker1: TDateTimePicker;MonthCalendar1: TMonthCalendar;Timer1: TTimer;ScrollBar1: TScrollBar;TreeView1: TTreeView;ListView1: TListView;PageControl1: TPageControl;TabSheet1: TTabSheet;Splitter1: TSplitter;Shape1: TShape;Bevel1: TBevel;RichEdit1: TRichEdit;ScrollBox1: TScrollBox;StaticText1: TStaticText;ColorBox1: TColorBox;FontDialog1: TFontDialog;OpenDialog1: TOpenDialog;PrintDialog1: TPrintDialog;PrinterSetupDialog1: TPrinterSetupDialog;ImageList1: TImageList;ActionList1: TActionList;PageScroller1: TPageScroller;ApplicationEvents1: TApplicationEvents;// 更多组件// ...// 事件处理器procedure Button1Click(Sender: TObject);// 更多事件处理器// ...end;varForm1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin// 示例:当按钮被点击时,更改标签的文本Label1.Caption := '按钮被点击';
end;// 更多事件处理器的实现
// ...end.

事件和事件处理器

1. 事件
  • 定义:在 Delphi 中,事件是指在程序运行时发生的某种情况,通常由用户操作(如点击、键入)或程序逻辑(如时间到达)触发。
  • 组件事件:几乎所有的 VCL 组件都有事件,如 OnClickOnChangeOnMouseMove 等。
2. 事件处理器
  • 定义:事件处理器是响应特定事件的过程或函数。它定义了当事件发生时应执行的操作。
  • 创建方式:在设计视图中双击一个组件可自动生成事件处理器的框架代码。

创建和使用事件处理器

步骤 1:选择组件和事件
  • 选择你想要响应的事件类型。例如,如果你想在用户点击按钮时执行操作,你将使用 TButtonOnClick 事件。
步骤 2:自动生成事件处理器
  • 在 Delphi 的设计视图中,双击你选择的组件(如 TButton)。这将在代码编辑器中自动生成事件处理器的基本框架。

常见事件类型

  • OnClick:当用户点击组件时触发。
procedure TForm1.Button1Click(Sender: TObject);
beginShowMessage('按钮被点击');
end;
  • OnChange:当组件的内容或状态改变时触发,如编辑框的文本改变。
procedure TForm1.Edit1Change(Sender: TObject);
beginLabel1.Caption := '编辑框内容已更改为: ' + Edit1.Text;
end;
  • OnEnter:当组件获得焦点时触发。
procedure TForm1.Edit1Enter(Sender: TObject);
beginEdit1.Color := clYellow;  // 当编辑框获得焦点时,改变其背景颜色
end;
  • OnExit:当组件失去焦点时触发。
procedure TForm1.Edit1Exit(Sender: TObject);
beginEdit1.Color := clWhite;  // 当编辑框失去焦点时,恢复其背景颜色
end
  • OnKeyPress:当用户在组件上按键时触发。
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
beginif Key = #13 then  // #13 是回车键的 ASCII 码ShowMessage('按下了回车键');
end;

高级事件处理

  • 事件传递:一个事件可以从一个组件传递到另一个组件,或者由一个组件处理后再传递给默认的处理器。

        在 Delphi 中,事件传递是一个强大的特性,它允许一个事件在不同组件之间传递或在多个层级上处理。这种机制非常有用,特别是当你想要在一个组件处理事件之后,再由另一个组件进一步处理相同的事件。以下是一个简单的例子,演示如何在 Delphi 中实现事件传递。

        假设我们有两个按钮:Button1Button2。我们希望当用户点击 Button1 时,先执行 Button1 的点击事件处理器,然后再自动触发 Button2 的点击事件。

  1. 设计界面

    • 在窗体上放置两个按钮:Button1Button2
  2. 为 Button1 创建事件处理器

    • 双击 Button1 自动生成事件处理器。
    • Button1Click 事件处理器中编写代码以触发 Button2 的点击事件。
  3. 为 Button2 创建事件处理器

    • 双击 Button2 自动生成事件处理器。
    • Button2Click 事件处理器中编写响应代码。
procedure TForm1.Button1Click(Sender: TObject);
begin// Button1 的事件处理代码ShowMessage('Button1 被点击');// 触发 Button2 的点击事件Button2Click(Sender);
end;procedure TForm1.Button2Click(Sender: TObject);
begin// Button2 的事件处理代码ShowMessage('Button2 被点击');
end;

         在这个例子中,当 Button1 被点击时,它首先显示一个消息("Button1 被点击"),然后通过直接调用 Button2Click 方法来触发 Button2 的点击事件。这样,即使用户没有直接点击 Button2Button2 的点击事件也会被执行,并显示第二个消息("Button2 被点击")。

  • 动态事件处理:可以在运行时动态地为组件分配事件处理器,增加灵活性。

        动态事件处理是 Delphi 编程中一个强大的特性,它允许程序在运行时为组件动态分配事件处理器。这种方法在需要根据应用程序的状态或用户的操作来改变事件响应行为时非常有用。以下是一个使用动态事件处理的示例。

        假设我们有一个按钮 Button1 和两个不同的事件处理器:HandleButtonClick1HandleButtonClick2。我们将在运行时根据某些条件(例如,用户的选择或程序状态)决定 Button1 使用哪个事件处理器。

  1. 设计界面

    • 在窗体上放置一个按钮:Button1
  2. 编写两个不同的事件处理器

    • 这两个处理器将在用户点击按钮时执行不同的操作。
  3. 在运行时动态分配事件处理器

    • 根据程序逻辑或条件,决定 Button1 应该使用哪个事件处理器。
procedure TForm1.HandleButtonClick1(Sender: TObject);
beginShowMessage('处理器 1 被调用');
end;procedure TForm1.HandleButtonClick2(Sender: TObject);
beginShowMessage('处理器 2 被调用');
end;

        接下来,在程序的某个逻辑部分(例如,在窗体的 OnCreate 事件或根据用户的某个选择),动态地为 Button1 分配事件处理器: 

procedure TForm1.FormCreate(Sender: TObject);
begin// 假设这里的条件是基于某些程序逻辑if SomeCondition thenButton1.OnClick := HandleButtonClick1elseButton1.OnClick := HandleButtonClick2;
end;

        在这个例子中,根据 SomeCondition 的值,Button1OnClick 事件将被动态地关联到 HandleButtonClick1HandleButtonClick2。这意味着当用户点击这个按钮时,将根据在窗体创建时设定的条件调用不同的事件处理器。 

  • 共享事件处理器:多个组件可以共享同一个事件处理器,例如,多个按钮可以共用一个 OnClick 事件处理器。
  1. 设计界面

    • 在窗体上放置三个按钮:Button1Button2Button3
  2. 创建共享的事件处理器

    • 创建一个事件处理器,它将被所有三个按钮共享。
  3. 为每个按钮分配相同的事件处理器

    • 在设计时或运行时,将此事件处理器分配给每个按钮的 OnClick 事件。
procedure TForm1.SharedButtonClick(Sender: TObject);
varButton: TButton;
beginif Sender is TButton thenbeginButton := TButton(Sender);ShowMessage(Button.Name + ' 被点击');end;
end;

        在上面的代码中,我们首先检查 Sender 是否为 TButton 类型。这是因为 Sender 参数表示触发事件的组件,而我们想要确定它确实是一个按钮。然后我们使用 TButton(Sender)Sender 转换成 TButton 类型,并显示一个包含按钮名称的消息。

        接下来,我们需要为每个按钮分配这个事件处理器。这可以在设计视图中完成,也可以通过代码完成:

procedure TForm1.FormCreate(Sender: TObject);
beginButton1.OnClick := SharedButtonClick;Button2.OnClick := SharedButtonClick;Button3.OnClick := SharedButtonClick;
end;

        在 FormCreate 事件处理器中,我们将 SharedButtonClick 分配给每个按钮的 OnClick 事件。

相关文章:

  • 巧用map实现springbean的命令模式
  • Python 时间日期处理库函数
  • Gemini 1.0:Google推出的全新AI模型,改变生成式人工智能领域的游戏规则!
  • 做一个wiki页面是体验HTML语义的好方法
  • 网络基础篇【网线的制作,OSI七层模型,集线器和交换机的介绍,路由器的介绍与设置】
  • 第一周:AI产品经理跳槽准备工作
  • 创建型模式 | 原型模式
  • 【赠书活动】OpenCV4工业缺陷检测的六种方法
  • 50ms时延工业相机
  • 网络层协议
  • Springboot数据校验与异常篇
  • HTML输出特殊字符详细方法
  • 快猫视频模板源码定制开发 苹果CMS 可打包成双端APP
  • 基于“Galera+MariaDB”搭建多主数据库集群的实例
  • windows11下载GCC编译器
  • 2017 年终总结 —— 在路上
  • js面向对象
  • leetcode46 Permutation 排列组合
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • 回顾 Swift 多平台移植进度 #2
  • 让你的分享飞起来——极光推出社会化分享组件
  • 用Visual Studio开发以太坊智能合约
  • 原生JS动态加载JS、CSS文件及代码脚本
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #LLM入门|Prompt#3.3_存储_Memory
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (003)SlickEdit Unity的补全
  • (14)Hive调优——合并小文件
  • (2)(2.10) LTM telemetry
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (Python第六天)文件处理
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (二)斐波那契Fabonacci函数
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (一) storm的集群安装与配置
  • (一)RocketMQ初步认识
  • (转) Android中ViewStub组件使用
  • (转)【Hibernate总结系列】使用举例
  • (转)scrum常见工具列表
  • .Net IE10 _doPostBack 未定义
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • @html.ActionLink的几种参数格式
  • @RequestMapping用法详解
  • @synthesize和@dynamic分别有什么作用?
  • @Valid和@NotNull字段校验使用
  • [APIO2015]巴厘岛的雕塑
  • [FFmpeg学习]从视频中获取图片
  • [git] windows系统安装git教程和配置
  • [iOS]-UIKit