
上节课打开IDE后默认就是一个空窗口的项目,但是项目还没有保存的,读者需要ctrl +s 保存项目到一个目录下面。

保存后,项目文件如上。
backup 文件夹
自动备份目录,存放文件历史副本,误删 / 改错可恢复。
project1.ico
程序图标,编译后软件显示的窗口、桌面图标。
project1.lpi
项目配置文件:保存编译参数、引用单元、平台设置、依赖包等项目全局配置。
project1.lpr
项目主程序入口(主源码),程序运行起点,管理所有窗体单元。
project1.lps
IDE 会话记录:记录上次打开的文件、窗口布局、光标位置,打开项目自动恢复编辑界面。
project1.res
编译资源文件,打包图标、版本信息等内置资源。
unit1.lfm
窗体布局文件,存储窗口尺寸、坐标、控件、标题等可视化界面配置。
unit1.pas
窗体逻辑代码文件,写按钮点击、变量、函数等业务逻辑,和 lfm 配对使用。
unit1.pas
是我们的Pascal源码文件。和delphi一样lazarus也是基于pascal语言的。
- Pascal:基础编程语言,语法简洁,分标准Pascal、Object Pascal(面向对象)。
- Delphi:商业IDE+编译器,闭源,用Object Pascal,仅原生支持Windows,配套VCL界面库。
- Lazarus:免费开源跨平台IDE,基于Free Pascal编译器,配套LCL,兼容Delphi语法,可编译Windows/macOS/Linux等多系统程序。
一句话总结:Pascal 是语言,Lazarus、Delphi 是两套不同的 IDE 开发工具。
如下是我们的项目源码 pas里面的代码
unit Unit1; // 单元文件名 Unit1
{$mode objfpc}{$H+} // 编译指令:ObjFPC模式 + 长字符串支持
interface // 接口区:对外暴露类、变量
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs; // 引用基础库
type
TForm1 = class(TForm) // 主窗口类,继承自基础窗体
private // 私有成员
public // 公有成员
end;
var
Form1: TForm1; // 全局窗体实例
implementation // 实现区:逻辑代码存放处
{$R *.lfm} // 绑定窗体可视化布局文件 Unit1.lfm
end.Code language: Delphi (delphi)
*.lfm:Lazarus 窗体布局文件,保存拖拽控件、窗口大小、属性;
interface 对外声明,implementation 写业务逻辑;
内置 {$mode objfpc} 是 Free Pascal 标准面向对象编译模式;
空白项目无按钮 / 事件,仅基础窗口骨架,可直接拖拽控件添加功能。
unit1.lfm
unit1.lfms 我们的窗体布局文件
object Form1: TForm1
Left = 915
Height = 240
Top = 237
Width = 320
Caption = 'Form1'
LCLVersion = '4.8.0.0'
end
Code language: JavaScript (javascript)
下面是各个参数的解析
object Form1: TForm1 // 定义对象:窗口实例,类型是TForm1
Left = 915 // 窗口左上角距离屏幕左边距915像素
Height = 240 // 窗口高度240像素
Top = 237 // 窗口左上角距离屏幕上边距237像素
Width = 320 // 窗口宽度320像素
Caption = ‘Form1’ // 窗口标题栏文字
LCLVersion = ‘4.8.0.0’ // 生成该布局的LCL组件库版本
end // 窗口对象定义结束
project1.ico
这是一个ico图标,用来作为应用的图标

可以用浏览器打开。
project1.lpi
这是一个xml文档
这份是 project1.lpi,项目核心配置文件,分三大块说明:
1. ProjectOptions 项目基础设置
<Version Value="12"/>:配置文件格式版本 12<PathDelim Value="\\"/>:Windows 路径分隔符反斜杠
General 通用项目设置
SessionStorage=InProjectDir:IDE 编辑记录存在项目文件夹Title=project1:项目名称Scaled=True:窗口自动适配高分屏缩放ResourceType=res:使用 res 资源文件存放图标UseXPManifest=True:开启 Windows 现代视觉样式DpiAware=True:程序支持高 DPI 高分屏,界面不模糊
Icon=0:使用项目默认 ico 图标
BuildModes
仅默认编译方案 Default(区分 Debug/Release 的地方)
RequiredPackages
依赖 LCL 图形组件库(GUI 程序必备)
Units 项目包含文件列表
project1.lpr:程序主入口unit1.pas:窗体单元,绑定窗体类 Form1,对应可视化窗口
2. CompilerOptions 编译器编译参数
- 输出程序文件名:
project1 - 编译中间文件输出目录:
lib\CPU-系统(如 lib\x86_64-win64) <GraphicApplication=True>:标记为 Windows 图形 GUI 程序,非控制台
3. Debugging 调试配置
忽略指定异常不中断调试:EAbort、文件打开错误、工具代码错误等
project1.lpr
也是属于 Free Pascal(Object Pascal)
// 定义本文件是程序主入口工程
program project1;
// 编译指令:启用面向对象语法、长字符串支持
{$mode objfpc}{$H+}
uses
// Unix(Linux/macOS)系统引入线程库
{$IFDEF UNIX}
cthreads,
{$ENDIF}
// Amiga系统引入线程库
{$IFDEF HASAMIGA}
athreads,
{$ENDIF}
Interfaces, // LCL跨平台图形底层接口
Forms, // 窗体基础框架
Unit1 // 自定义主窗口单元
{ you can add units after this }; // 新增单元写在此处
{$R *.res} // 加载项目资源文件(图标、版本信息)
begin
RequireDerivedFormResource:=True; // 开启读取lfm窗体布局文件
Application.Scaled:=True; // 高分屏自动缩放界面
{$PUSH}{$WARN 5044 OFF} // 临时关闭5044号编译警告
Application.MainFormOnTaskbar:=True; // 主窗口独立显示任务栏图标
{$POP} // 恢复原先警告设置
Application.Initialize; // 初始化GUI程序运行环境
Application.CreateForm(TForm1, Form1); // 创建主窗口实例
Application.Run; // 启动窗口消息循环,等待交互
end.Code language: PHP (php)
区分:
- 普通
.pas:单元文件(窗体 / 功能模块) .lpr:项目主程序 Pascal 文件,程序启动入口
project1.lps
Lazarus Project Session(项目会话文件),不是 Pascal 代码
它是纯 IDE 配置记录,保存你上次打开项目时的编辑状态
例如 打开了哪些代码 / 窗体文件 各个窗口的位置、大小、拆分布局 光标位置、断点、搜索记录等等
.lpr/.pas:源码,编译必需;
.lps:仅 IDE 使用的临时记录文件,无编译作用。
project1.res
编译资源二进制文件
由项目的 project1.ico、程序版本信息、Windows 界面清单自动编译生成
- 存放软件图标,编译后程序右键、任务栏、桌面显示该图标
- 存储 Windows 高 DPI、XP 视觉样式等系统资源配置
编译关联 代码里 {$R *.res} 就是读取这个资源文件嵌入最终 exe 特性
- 可删除,重新编译项目会自动生成;
- 仅 Windows 平台 GUI 程序需要,控制台程序无此文件。
打开IDE中,我们发现有这个东西

这是我们的可视化窗口设置,读者可以把各种控件拖动到上面。和vb winform wpf delphi qt 等等这些窗体软件设置基本一样。
例如,我们拖放一个按钮上去

再次运行。

窗口中就多了一个按钮了。

底部messages窗口,可以看到exe的生成目录
就在我们的项目目录下面,多了一个exe

这个exe就是我们的程序,你可以直接发给其他电脑运行,它是一个无依赖,已经编译好的exe了。
运行速度极快…