熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

DELPHI基礎教程:文本編輯器的設計(一)[1]

2013-11-23 17:52:05  來源: Delphi編程 

  本章介紹多文本界面(MDI)多頁面界面(MPI)技術VCL庫中TMemoTEdit 控件以及有關文本編輯的常用對話框的使用我們開發的MPIEditdpr是一個文本編輯的實用程序可實現如下功能

  ● MDI的編輯環境

  ● MPI的編輯環境

  ● 創建打開編輯保存文件

  ● 查找替換文件中指定的字符串

  ● 復制粘貼剪切字符串

  ● 設置文件字體大小

  ● 打印文件

  本章將通過MPIEdit實用程序逐一介紹在Delphi中如何實現上述功能

  文本編輯器是一種常用的應用程序用戶在編輯器中編輯多種文件在多個文件之間進行數據交換對文件進行各種屬性設置並按自己要求打印文件

   多文本界面

  多文本界面是一種在一個應用程序中同時打開兩個或更多文件的界面形式例如在字處理程序可同時打開多個文件用戶可在多個文件中方便地進行切換

  MDI應用程序提供了一種方便的方式使得用戶在同一工作區域內對多個文檔進行觀察和交換數據MDI工作區域可分為父窗體和子窗體在Dephi的MDI應用程序中父窗體通常是程序的主窗體

  在MDI中父窗體之外的窗體稱為子窗體文檔或其它數據在子窗體打開這些文檔可以是相同的文件格式或在應用程序支持下也可以是不同的文件格式

  在設計階段可創建 MDI 父窗體作為應用程序主窗體 亦可創建子窗體樣板Delphi允許創建多個子窗體類型但MDI應用程序只支持其中的一種

  本節講述創建MDI應用程序的基本步驟

  ● 創建主窗口

  ● 創建子窗口

  ● 創建主窗口菜單

  ● 融合菜單

  ● 運行時創建子窗口

   創建父窗口

  在MDI應用程序中主窗口為應用文檔提供一個工作區域這個區域可打開一個或多個子窗口創建父窗口是建立MDI應用程序的第一步

  創建父窗口與其它窗口類似不同之處在於設置窗體的FormStyle屬性

  FormStyle屬性可決定一個窗體是父窗口還是子窗口或不是MDI類型 只能在設計階段確定FormStyle在Object Inspector窗口中將FormStyle屬性設置成fsMDIForm值得注意的是應當把父窗口定義為應用程序的主窗體否則程序編譯會出錯

   創建子窗口

  設計階段可創建子窗口的樣板用戶在運行進使用樣板的實例子窗口是缺省可見的如果應用程序在運行進創建子窗口不要讓Delphi自動地創建

  創建子窗口時將窗體的FormStyle屬性設置為fsMDIChild如果程序在運行時創建子窗口

   選擇OPtions|Project菜單系統彈出自動創建列表對話框

   在自動創建列表中選中子窗口

   單擊>按鈕將子窗口移至可得到(Available)窗體列表

   並單擊OK按鈕退出

   創建應用程序菜單與菜單融合

  父窗口的菜單應作為應用程序主菜單如果子窗口有菜單 則當子窗口在運行獲得焦點並最大化時子窗口的菜單項將融合父窗口菜單

  創建父窗口與子窗口菜單的方法與創建普通窗體菜單類似 詳細步驟見第一章菜單融合是指程序運行過程中子菜單與父窗口菜單的相互作用 如當子窗口獲得焦點時子窗口的菜單或插入主窗口的菜單中或將替換部分或全部的父窗口菜單

  進行菜單融合需設置的兩個屬性

  ● 窗體的Menu屬性

  ● 菜單項的GroupIndex屬性

  Menu屬性定義窗體的活動菜單而菜單融合只對活動菜單進行如果窗體有多個菜單部件運行時可通過以下代碼進行改變

  FormMenu := SecondMenu;

  GroupIndex屬性決定出現在菜單條中各菜單項的位置在菜單融合中GroupIndex 將

  決定融合菜單是插入還是替換主窗體菜單條中的菜單

  GroupIndex的缺省值是可以用下規則確定其值

   數值越小菜單的位置越靠左

  例如GroupIndex為的菜單將出現在菜單條中的最左端隨著GroupIndex數值的增大菜單項依次向右排列

   若需替換主菜單中的某一菜單項則將子菜單相應菜單項的GroupIndex設為與之相等的值這條規則適合一個或多個菜單項例如主菜單中的Edit菜單項的GroupIndex 的值為將子菜單的一個或多個菜單項的GroupIndext的值設為則在運行時這些菜單項替換主窗口的Edit菜單

  將同一窗體的多個菜單項的GroupIndex設為相同值原有的排列順序在菜單融合時將保持不變

   若要在菜單融合時插入菜單項需在主菜單中預留數值位置例如主菜單的兩菜單項數值為則子菜單GroupIndex數值為的菜單在融合時將插入其中

  在使用MDI界面時用戶通常會打開多個窗體為了使用戶方便地進行窗體切換常設有一個進行切換的菜單項此菜單列出了打開窗體的名稱當用戶選擇其中的一個時程序進行相應的窗體切換在Delphi的MDI設計時可非常方便地實現這一功能方法是將父窗口的WindowMenu設置成該菜單項的名字即可

   多頁面界面

  多頁面界面是一種非常友好的界面形式它由一個窗體和多個頁面組成 關於每個頁面的信息列在窗體底部的標簽(Tabs)上用戶可通過選擇標簽來進行頁面切換 每次只有一個頁面顯示在窗體中MPI較MDI使用更為方便且切換速度更快本章例程就是多頁面界面的例子另外Delphi集成開發環境中的代碼編輯(Code Editor)窗體是MPI應用在文本編輯中的實例在MPI中一個窗體內的多個文件可以方便地進行切換和交換數據

  多頁面界面分為靜態MPI和動態MPI兩種形式靜態MPI的標簽數量固定用戶在事先設計好的多個頁面上進行切換象選擇對話框(Option Dialog)就屬於靜MPI動態MPI的標簽數量不固定由程序根據需要動態的產生或消除象代碼編輯窗體就是動態MPI程序可根據用戶的需要產生多個文本頁面也可以動態地關閉頁面利用Delphi的TNotebook和Ttabset 可十分方便地設計靜態MPI設計動態MPI則需要編寫專門的代碼

   靜態多頁面界面

  TNotebookTTabSet可用來開發靜態多頁面界面TNotebook部件能顯示多頁 每頁都有相應的控制通常TNotebook與TTabset配合進行控制TTabset 有一組水平的標簽每個標簽可通過創建字符串列表進行某種控制

  MPIEDit例程中的主窗體中有一個TNotebook 部件和 TTabSet 部件 把兩個部件的Aglin屬性設置成bsTop和bsBotton使它們分別處在窗體的上下兩部分為了使TTabSet與TNotebook配合工作使用下代碼

  TabSetTabs := NotebookPage;

  另外在TabSet的OnClick事件中定義下如下代碼可使用戶在選擇標簽時開打相應的頁

  procedure TEditFormTabSetClick(Sender : TObject)

  begin

  NotebookPageIndex := TabSetTabIndex;

  …

  end;

  設計靜態MPI時可在部件窗體(Component Palette)的WIN頁面中選中TNotebook 部件然後在Object inspector窗體中雙擊TNotebook的Pages屬性Dephi 將彈出對話框用戶可以在此確定Notebook的頁數和字符串列表如圖關閉對話框後 可對每一頁進行設計使用鼠標右按鈕彈出快速菜單進行頁面切換

   動態多頁面界面

  使用Delphi進行靜態MPI設計非常簡單進行動態MPI設計則需編寫專門的代碼 對於一個多頁面文本編輯器應能實現以下功能

  ● 動態生成頁面每個頁面均能進行文本編輯

  ● 動態關閉頁面直到窗體中只有一個頁面為止

  ● 頁面切換不影響各種文本編輯操作

[]  []  []  


From:http://tw.wingwit.com/Article/program/Delphi/201311/25254.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.