uniGUI試用筆記(五)


uniGUI的主窗體可以采用多頁面方式進行管理,參考網上的資料,都是用TUniFrame + TUniPageControl 來實現,嘗試了一下,效果還不錯,如下圖:

image

用TUniFrame 能夠使用繼承模式,我采用了以下的類關系:

image

TfmeWebEmbedBase : 所有嵌入Frame的基類,實現了與主窗體的交互和控制,包括窗體的關閉等

TfmeWebDBListBase:   與數據集列表操作相關的基類,實現了數據集的開啟、數據導出與打印等

TfmeWebDBListEditBase:與數據集讀寫操作相關的基類,實現了數據集的新增、修改、刪除、導入及保存等

業務窗體根據情況從TfmeWebDBListBase或TfmeWebDBListEditBase繼承。

 

在主窗體中,首先構建一個列表,容納所有的Frame

FFrameList : TList;

菜單或按鈕點擊,需要開啟業務窗體時,調用函數

procedure TfrmWebMain.ShowFrame(AfmeBaseClass: TfmeWebEmbedClass;  AOwnerData: Variant); 
var 
  ts: TUniTabSheet; 
  fme : TfmeWebEmbedBase; 
begin 
  { 查找是否已經存在相應的業務窗體 } 
  fme := FindFrame(AfmeBaseClass); 
  { 如果沒有則新建 } 
  if not Assigned(fme) then 
  begin

    { 先創建TabShee,用於放置Frame } 
    ts := TUniTabSheet.Create(self); 
    ts.PageControl := pcMain; 
    ts.Closable := False;

    { 置換關閉事件,用於關閉業務窗體 } 
    ts.OnClose := OnTabSheetClose;

    { 構建業務窗體 }

    fme := AfmeBaseClass.Create(Self); 
    fme.Parent := ts; 
    fme.TabSheet := ts; 
    fme.Align := alClient; 
    fme.MainForm := Self;

    { 設置返回事件,當業務窗體按下<返回>時,執行該函數} 
    fme.OnReturn := OnFrameReturn; 
    ts.Caption := fme.ModelName;

    { 業務窗體加入到列表 } 
    FFrameList.Add(fme); 
  end 
  else { 如果找到已存在的業務窗體,則取其對應的TabSheet} 
    ts := fme.TabSheet;

  { 進行業務窗體的數據准備工作,失敗則釋放業務窗體 }

  if not fme.PrepareData(AOwnerData) then 
  begin 
    ReleasFrame(fme); 
    Exit; 
  end;

  { 顯示業務窗體 }

  ts.TabVisible := true; 
  pcMain.ActivePage := ts; 
end;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM