Wolfgang Chien's Homepage | Delphi學習筆記 - 問答篇 |
如何才能判讀RichEdit編輯器目前的編輯狀態是處於 [插入] or [覆蓋] 模式
這個新的 Windows common control 它內部肯定有一個機制在管 Insert/Overwrite, 我發現在別的程式中按下 insert 鍵時, 它還記得自己原先的ins/ovr 狀態. 可惜不清楚如何存取其內部的機制... :(
以下有一個 TTestRTF, 請試試看合不合用:
![]() |
1. Runtime 時有一 boolean 型態的 InsertState 屬性. |
![]() |
2. Insert/Overwrite 模式改變時, 將觸發 OnInsertChanged 事件. |
unit TestRTF; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls; type TTestRTF = class(TRichEdit) private { Private declarations } FStartupInsState: SHORT; FInsertState: boolean; FOnInsertChanged: TNotifyEvent; procedure WMKeyUp(var Message: TWMKeyUp); message WM_KEYUP; protected { Protected declarations } public { Public declarations } constructor Create(AOwner: TComponent); override; property InsertState: boolean read FInsertState; published { Published declarations } property OnInsertChanged: TNotifyEvent read FOnInsertChanged write FOnInsertChanged; end; procedure Register; implementation procedure Register; begin RegisterComponents('Samples', [TTestRTF]); end; constructor TTestRTF.Create(AOwner: TComponent); begin inherited Create(AOwner); FStartupInsState := GetKeyState(VK_INSERT); FInsertState := True; end; procedure TTestRTF.WMKeyUp(var Message: TWMKeyUp); var FCurrentInsState: SHORT; begin inherited; if Message.CharCode = VK_INSERT then begin FInsertState := FStartupInsState = GetKeyState(VK_INSERT); if Assigned(FOnInsertChanged) then FOnInsertChanged(Self); end; end; end.
首頁 | 學習筆記 | 主題公園 | 軟體下載 | 關於本站 | 討論信群 | 相約下次 |