目录
38. TPrinterSetupDialog(打印机设置对话框)
42. TApplicationEvents(应用程序事件)
Caption
(显示的文本),OnClick
(点击事件处理器)。Caption
(显示的文本)。Text
(文本内容),MaxLength
(最大长度)。Lines
(文本行数组),ScrollBars
(滚动条类型)。Items
(下拉列表的选项),Text
(当前文本)。Checked
(是否选中),Caption
(显示的文本)。Checked
(是否选中),Caption
(显示的文本)。Items
(列表中的项目),ItemIndex
(选中项目的索引)。Caption
(分组框标题)。Picture
(图像内容),Stretch
(是否拉伸图像以适应控件大小)。Items
(菜单项)。Items
(菜单项)。Panels
(状态栏面板)。TToolButton
结合使用,放置具体的工具按钮。Min
(最小值),Max
(最大值),Position
(当前位置)。Min
(最小值),Max
(最大值),Position
(当前进度)。Min
(最小值),Max
(最大值),Position
(当前位置)。Date
(选择的日期),Time
(选择的时间)。Date
(当前选择的日期)。Interval
(触发间隔,以毫秒为单位),OnTimer
(触发事件)。Min
,Max
,Position
。Items
(节点集合)。Items
(项目集合),ViewStyle
(显示风格)。Pages
(页面集合),ActivePage
(当前激活的页面)。Shape
(形状类型),Brush
(填充设置),Pen
(边框设置)。Shape
(形状),Style
(风格)。Lines
(文本行),SelText
(选中的文本),PlainText
(是否纯文本模式)。Caption
(文本内容),Alignment
(对齐方式)。Selected
(选中的颜色)。Font
(选中的字体),Options
(对话框选项)。FileName
(选中的文件名),Filter
(文件过滤器)。Copies
(打印份数),PrintRange
(打印范围)。Images
(图像集合),Width
、Height
(图像尺寸)。Actions
(动作集合)。AutoScroll
(自动滚动),Orientation
(方向)。OnActivate
(激活时),OnDeactivate
(失活时),OnException
(异常发生时)。unit MainForm;
interface
uses
// 引入必要的单元
// ...
type
TForm1 = 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;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
// 示例:当按钮被点击时,更改标签的文本
Label1.Caption := '按钮被点击';
end;
// 更多事件处理器的实现
// ...
end.
OnClick
、OnChange
、OnMouseMove
等。TButton
的 OnClick
事件。TButton
)。这将在代码编辑器中自动生成事件处理器的基本框架。procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('按钮被点击');
end;
procedure TForm1.Edit1Change(Sender: TObject);
begin
Label1.Caption := '编辑框内容已更改为: ' + Edit1.Text;
end;
procedure TForm1.Edit1Enter(Sender: TObject);
begin
Edit1.Color := clYellow; // 当编辑框获得焦点时,改变其背景颜色
end;
procedure TForm1.Edit1Exit(Sender: TObject);
begin
Edit1.Color := clWhite; // 当编辑框失去焦点时,恢复其背景颜色
end
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then // #13 是回车键的 ASCII 码
ShowMessage('按下了回车键');
end;
????????在 Delphi 中,事件传递是一个强大的特性,它允许一个事件在不同组件之间传递或在多个层级上处理。这种机制非常有用,特别是当你想要在一个组件处理事件之后,再由另一个组件进一步处理相同的事件。以下是一个简单的例子,演示如何在 Delphi 中实现事件传递。
????????假设我们有两个按钮:Button1
和 Button2
。我们希望当用户点击 Button1
时,先执行 Button1
的点击事件处理器,然后再自动触发 Button2
的点击事件。
设计界面:
Button1
和 Button2
。为 Button1 创建事件处理器:
Button1
自动生成事件处理器。Button1Click
事件处理器中编写代码以触发 Button2
的点击事件。为 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
的点击事件。这样,即使用户没有直接点击 Button2
,Button2
的点击事件也会被执行,并显示第二个消息("Button2 被点击")。
????????动态事件处理是 Delphi 编程中一个强大的特性,它允许程序在运行时为组件动态分配事件处理器。这种方法在需要根据应用程序的状态或用户的操作来改变事件响应行为时非常有用。以下是一个使用动态事件处理的示例。
????????假设我们有一个按钮 Button1
和两个不同的事件处理器:HandleButtonClick1
和 HandleButtonClick2
。我们将在运行时根据某些条件(例如,用户的选择或程序状态)决定 Button1
使用哪个事件处理器。
设计界面:
Button1
。编写两个不同的事件处理器:
在运行时动态分配事件处理器:
Button1
应该使用哪个事件处理器。procedure TForm1.HandleButtonClick1(Sender: TObject);
begin
ShowMessage('处理器 1 被调用');
end;
procedure TForm1.HandleButtonClick2(Sender: TObject);
begin
ShowMessage('处理器 2 被调用');
end;
????????接下来,在程序的某个逻辑部分(例如,在窗体的 OnCreate
事件或根据用户的某个选择),动态地为 Button1
分配事件处理器:?
procedure TForm1.FormCreate(Sender: TObject);
begin
// 假设这里的条件是基于某些程序逻辑
if SomeCondition then
Button1.OnClick := HandleButtonClick1
else
Button1.OnClick := HandleButtonClick2;
end;
????????在这个例子中,根据 SomeCondition
的值,Button1
的 OnClick
事件将被动态地关联到 HandleButtonClick1
或 HandleButtonClick2
。这意味着当用户点击这个按钮时,将根据在窗体创建时设定的条件调用不同的事件处理器。?
OnClick
事件处理器。设计界面:
Button1
、Button2
和 Button3
。创建共享的事件处理器:
为每个按钮分配相同的事件处理器:
OnClick
事件。procedure TForm1.SharedButtonClick(Sender: TObject);
var
Button: TButton;
begin
if Sender is TButton then
begin
Button := TButton(Sender);
ShowMessage(Button.Name + ' 被点击');
end;
end;
????????在上面的代码中,我们首先检查 Sender
是否为 TButton
类型。这是因为 Sender
参数表示触发事件的组件,而我们想要确定它确实是一个按钮。然后我们使用 TButton(Sender)
将 Sender
转换成 TButton
类型,并显示一个包含按钮名称的消息。
????????接下来,我们需要为每个按钮分配这个事件处理器。这可以在设计视图中完成,也可以通过代码完成:
procedure TForm1.FormCreate(Sender: TObject);
begin
Button1.OnClick := SharedButtonClick;
Button2.OnClick := SharedButtonClick;
Button3.OnClick := SharedButtonClick;
end;
????????在 FormCreate
事件处理器中,我们将 SharedButtonClick
分配给每个按钮的 OnClick
事件。