// Mit dem folgenden Code kann man in einem TRichEdit
// UNDO pausieren lassen. Dazu benötigt man die
// Unit RichOLE.


// Getestet mit RS 10.4 unter
Win11

uses System.Win.ComObj, RichOLE; 
 
var 
  State: Boolean = True; 
 
function UndoLock(Box: TCustomEdit; Lock: Boolean): Boolean; 
const 
  UndoSuspend = -9999995; 
  UndoResume = UndoSuspend + 1; 
var 
  EditOle: IRichEditOle; 
  Dispatch: IDispatch; 
  Edt: OleVariant; 
  Which: Integer; 
begin 
  if Lock then 
    Which := UndoSuspend 
  else 
    Which := UndoResume; 
  if RichEdit_GetOleInterface(Box.Handle, EditOle) then 
  begin 
    OleCheck(EditOle.QueryInterface(IDispatch, Dispatch)); 
    Edt := Dispatch; 
    Edt.Undo(Which); 
    Result := True; 
  end 
  else 
    Result := False; 
end; 
 
// Beispielaufrufe 
 
procedure TForm1.Button1Click(Sender: TObject); 
begin 
  if not UndoLock(RichEdit1, True) then 
    ShowMessage('Locking error') 
  else 
    State := False; 
end; 
 
procedure TForm1.Button2Click(Sender: TObject); 
begin 
  if not UndoLock(RichEdit1, False) then 
    ShowMessage('Unlocking error') 
  else 
    State := True; 
end; 
 
procedure TForm1.Button3Click(Sender: TObject); 
begin 
  if not State then 
    ShowMessage('Undo is not possible') 
  else 
    RichEdit1.Undo; 
end;


 

Zugriffe seit 6.9.2001 auf Delphi-Ecke