第一個專案完整解析

上一堂課開啟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 語言之上。

  1. Pascal:基礎程式語言,語法簡潔,分為標準 Pascal、物件導向 Object Pascal。
  2. Delphi:商業版IDE與編譯器,閉源軟體,使用 Object Pascal,原生僅支援 Windows,搭配 VCL 介面函式庫。
  3. 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: JavaScript (javascript)

*.lfm:Lazarus 表單版面檔,儲存拖放控制項、視窗大小、屬性設定;

interface 用於對外宣告,implementation 撰寫商業邏輯;

內建 {$mode objfpc} 為 Free Pascal 標準物件導向編譯模式;

空白專案不含任何按鈕與事件,僅提供基礎視窗骨架,可直接拖放控制項擴充功能。

unit1.lfm

unit1.lfm 是我們的表單版面檔

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 專案包含檔案清單

  1. project1.lpr:程式主進入點
  2. 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即為編譯完成的成品程式,可直接複製到其他電腦執行,屬於無額外執行階段相依的獨立執行檔。

執行速度相當快速…

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *