首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 實現支援視窗的自訂函數:封裝 Modal 對話框為函數呼叫

     編輯:Delphi

在 Delphi 開發中,常需將參數傳遞給視窗,使用者操作後回傳結果——類似 Application.MessageBox 的工作模式。本文展示如何將視窗封裝為自訂函數,實現參數傳入、模態顯示、結果回傳的完整流程。

四步驟實作

1. 建立操作視窗

新增表單 TfrmShowMsg,放置兩個 TButton(Button1、Button2)與一個 TLabel(Label1)。設定 Button1 ModalResult := mrOK,Button2 ModalResult := mrCancel。

2. 宣告對外可見函數

在 implementation 區塊**之前**宣告(確保外部單元可見):

function ShowMsg(btn1, btn2, msg, titleMsg: string): Integer;
  • btn1, btn2:兩按鈕標題
  • msg:提示訊息
  • titleMsg:視窗標題
  • 回傳 Integer:1=確定,2=取消

3. 實作函數邏輯

function ShowMsg(btn1, btn2, msg, titleMsg: string): Integer;
var frmShowMsg: TfrmShowMsg;
begin
  frmShowMsg := TfrmShowMsg.Create(Application);
  with frmShowMsg do try
    Button1.Caption := btn1;
    Button2.Caption := btn2;
    Label1.Caption := msg;
    Caption := titleMsg;
    if ShowModal = mrOK then Result := 1 else Result := 2;
  finally Free; end;
end;

4. 移除自動建立的全域變數

刪除單元介面區的 var frmShowMsg: TfrmShowMsg;,改由函數內部動態建立/釋放,避免記憶體洩漏與狀態殘留。

完整單元代碼 (udfForm.pas)

unit udfForm;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TfrmShowMsg = class(TForm)
    Button1: TButton; Label1: TLabel; Button2: TButton;
  end;
function ShowMsg(btn1, btn2, msg, titleMsg: string): Integer;
implementation {$R *.DFM}
function ShowMsg(btn1, btn2, msg, titleMsg: string): Integer;
var frmShowMsg: TfrmShowMsg;
begin
  frmShowMsg := TfrmShowMsg.Create(Application);
  with frmShowMsg do try
    Button1.Caption := btn1; Button2.Caption := btn2;
    Label1.Caption := msg; Caption := titleMsg;
    if ShowModal = mrOK then Result := 1 else Result := 2;
  finally Free; end;
end;
end.

使用範例

uses udfForm;
// ...
if ShowMsg('確定', '取消', '真的要離開嗎?', '確認') = 1 then
  Application.Terminate;

進階擴展方向

  • 資料瀏覽對話框:傳入 DataSet、回傳選取記錄鍵值
  • 多頁籤設定視窗:傳入設定物件、回傳修改後物件
  • 檔案選擇器:封裝 TOpenDialog 為函數,支援多選、過濾器預設
  • 泛型函數:function ShowForm(Params): TResult; 統一入口

核心優勢

傳統做法自訂函數封裝
呼叫端需知視窗類別、手動建立/釋放單一函數呼叫,內部自管生命週期
參數透過屬性/公有欄位傳遞函數參數強型別、IDE 提示
結果透過公有欄位/事件回傳函數回傳值/out 參數直接取得
易發生記憶體洩漏(忘記 Free)try-finally 保證釋放
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved