delphi实战开发笔记本20250519
今天从https://www.bilibili.com/video/BV1u3411P7X3寻找灵感
主要关于delphi窗体以及项目的命名规则开始搞起
窗体名称Fm*** 文件名称 uFm***
工程名称按需
窗体启动可以设置最大化,或者最小化
delphi10.x 似乎可以多开,使用不同的IDE窗口打开多个工程
主窗体:
常见控件的使用
TPanel
以及控件的位置
TPanel控件,主要可以用来制作分区
制作基类,然后从基类窗体继承
相关群聊
主从表的相关知识:
分为主表跟明细
写一次代码,多次使用
多页面控件:Win32➡️TPageControl
据说这些年,delphi一直更新移动开发的内容,原有的系统控件都没有怎么更新过,所以大家现在主要使用第三方控件来完成一些功能
DevExpress控件是当前delphi开发不可或缺的的组成部分了可以说
今天又学习了一个
Popup方法:
自定义弹出窗体(TForm
)
-
功能:实现类似对话框的弹出窗口。
-
步骤:
-
创建一个新窗体(如
PopupForm
),设置其BorderStyle
为bsNone
(无边框)或bsDialog
(对话框风格)。 -
在需要触发弹出窗口的事件中动态创建并显示窗体。
-
-
示例:
// 显示模态弹出窗口(阻塞式)
procedure TForm1.Button1Click(Sender: TObject);
var
PopupForm: TPopupForm;
begin
PopupForm := TPopupForm.Create(nil);
try
PopupForm.ShowModal; // 模态显示
finally
PopupForm.Free;
end;
end;
// 非模态弹出窗口(非阻塞式)
PopupForm := TPopupForm.Create(Application);
PopupForm.Show;
使用 MessageDlg
或 InputBox
(简单弹窗)
-
功能:快速显示消息框或输入框。
-
示例:
// 消息提示框
procedure TForm1.ShowMessageClick(Sender: TObject);
begin
MessageDlg(‘操作成功!’, mtInformation, [mbOK], 0);
end;
// 输入框
procedure TForm1.GetInputClick(Sender: TObject);
var
UserInput: string;
begin
UserInput := InputBox(‘输入’, ‘请输入内容:’, ‘默认值’);
if UserInput <> ” then
ShowMessage(‘你输入了:’ + UserInput);
end;
4. 动态定位弹出菜单
-
功能:手动控制弹出菜单的位置(如按钮下方)。
-
示例:
procedure TForm1.Button1Click(Sender: TObject);
var
P: TPoint;
begin
// 计算按钮的屏幕坐标
P := Button1.ClientToScreen(Point(0, Button1.Height));
// 显示弹出菜单
PopupMenu1.Popup(P.X, P.Y);
end;
5. 结合 TForm
的 PopupMode
属性(VCL 高版本支持)
-
功能:使弹出窗口始终显示在父窗口上方。
-
设置:
PopupForm.PopupMode := pmAuto; // 自动依附于当前活动窗口
PopupForm.PopupParent := Self; // 指定父窗口
6. 第三方控件的弹出功能
-
场景:使用如 DevExpress、TMS 或 Raize 等第三方库的高级弹出组件。
-
示例(以 DevExpress 的
TdxBarPopupMenu
为例):
// 动态添加菜单项并弹出
var
Item: TdxBarButton;
begin
Item := TdxBarButton.Create(dxBarPopupMenu1);
Item.Caption := ‘第三方菜单项’;
dxBarPopupMenu1.ItemLinks.Add.Item := Item;
dxBarPopupMenu1.Popup(X, Y); // 在指定坐标弹出
end;
7. 动态生成内容(如列表选择框)
-
功能:创建一个类似下拉列表的弹出选择框。
-
示例:
procedure TForm1.Edit1Click(Sender: TObject);
var
PopupForm: TForm;
ListBox: TListBox;
begin
PopupForm := TForm.Create(nil);
try
PopupForm.BorderStyle := bsNone;
PopupForm.Width := Edit1.Width;
ListBox := TListBox.Create(PopupForm);
ListBox.Parent := PopupForm;
ListBox.Align := alClient;
ListBox.Items.Add(‘选项1’);
ListBox.Items.Add(‘选项2’);
// 显示在 Edit1 下方
PopupForm.Left := Edit1.ClientToScreen(Point(0, 0)).X;
PopupForm.Top := Edit1.ClientToScreen(Point(0, Edit1.Height)).Y;
PopupForm.Show;
finally
// 注意:需要处理 ListBox 的 OnClick 事件以关闭窗口
end;
end;