Wolfgang Chien's Homepage | Delphi學習筆記 - 問答篇 |
本士最近在學習
Delphi 時有一個問題, 如何將 MDIChild Form 底下 Memo 中的 Mark 複製到 ClipBoard,
我使用的程式碼如下 , 觸動 Copy 事件時
ActiveMDIChild.Memo1.CutToClipboard;
但是出錯了 , 問題在那裡 ?
假設您的 MDI 子視窗名為 TForm2, 那這列程式可以改成這樣:
TForm2(ActiveMDIChild).Memo1.CutToClipboard;
如果這樣子還不能通過Compiler, 那要檢查是不是interface節中漏了 uses 子視窗的程式單元
原因是: ActiveMDIChild 傳回值的確是 TForm 沒錯,但是原始的 TForm 並沒有 Memo1 這個內嵌物件, 是不是? 因此會在 Compile 時失敗TForm2 也是 TForm, 不過它是繼承自TForm後再加上TMemo等物件的另一個 Form 了, 上述的寫法, 是將ActiveMDIChild 傳回的參考以 Typecast 的方式轉成 TForm2
還有, CutToClipboard 是剪到剪貼簿, 不是複製到剪貼簿, 也是要提出來請您留意的-可能是您發信前不小心打錯字 :)
有人說我回答問題好聽是比較詳細, 難聽一點是囉唆,現在又要多囉唆幾句:
MDI 的程式並不容易, 如果是自己從頭寫到尾, 那倒單純, 如果MDI子視窗有好幾種類型, 而這幾個類型又分別交給不同的程式設計師時, 父子視窗的合作關係就更複雜了(例如上述的剪貼功能), 最近我規劃一個系統的程式架構時, 乾脆就訂出一套 Windows 訊息, 然後父子程式對送服務訊息, 讓子視窗各自完成自己知道的事, 以上述的例子, 如果子視窗收到來自主視窗要求剪貼的訊息, TForm2 自己最清楚自己的資料成員與處理要求, 父視窗就負責對 ActiveMDIChild 提出例如存檔. 剪貼等訊息就好了
請問當我在使用
MDI form 時,在母視窗中有個 MDIChild 的 property 它是一個 TForm 的 形態,那若我要用我自己定義的子視窗中的一些副程式時要怎麼辦呢?MDIChild
可否使其傳回形態為我自己定義的 form 形態呢?
假設 TForm1 為主視窗, TForm2 為子視窗, MethodA 為子視窗的一個方法, 而 TForm1 的單元已 uses TFrom2的所在單元, 那麼, 您不妨試試下列的寫法吧:
TForm2(Form1.ActiveMDIChild).MethodA
首頁 | 學習筆記 | 主題公園 | 軟體下載 | 關於本站 | 討論信群 | 相約下次 |