Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   TRichEdit Zoom deaktivieren (https://www.delphipraxis.net/174261-trichedit-zoom-deaktivieren.html)

dust258 12. Apr 2013 13:54

TRichEdit Zoom deaktivieren
 
Hallo Leute,
ich habe ein "kleines" Problem an dem ich schon ein paar Stunden sitze. Ich möchte das automatische Zoomen in einem Richedit (linke Maustaste + Mausrad) deaktivieren.

Es gibt keine Option dafür und das überschreiben der Methoden (OnMouseWheel) hat auch keinen Effekt.

Mein 2. Ansatz war es die WndProc in meiner Ableitung zu überschreiben:
Code:
procedure TRichEditSpellCheck.WndProc(var Message: TMessage);
const
  EM_SETZOOM = (WM_USER + 225);
begin
  if Message.Msg <> EM_SETZOOM then
    inherited;
end;
Das funktioniert leider nur zum Teil. Ein paar Messages werden abgefangen, aber nicht alle. So kann man durch wildes Klicken und Scrollen immer noch zoomen...

Hat Jemand eine Idee?

Volker Z. 12. Apr 2013 19:29

AW: TRichEdit Zoom deaktivieren
 
Hallo,

Du könntest einen der beiden folgenden Wege gehen
Delphi-Quellcode:
type
  TRichEdit = class (Vcl.ComCtrls.TRichEdit)
  private
    procedure WMMouseWheel (var Msg : TWMMouseWheel); message WM_MOUSEWHEEL;
  end;

  TForm1 = class(TForm)
    RichEdit1: TRichEdit;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TRichEdit.WMMouseWheel (var Msg : TWMMouseWheel);
begin
  if not (ssShift in TCMMouseWheel (Msg).ShiftState) then
    inherited;

  Msg.Result := 0
end;
oder
Delphi-Quellcode:
type
  TRichEdit = class (Vcl.ComCtrls.TRichEdit)
  private
    procedure CMMouseWheel (var Msg : TMessage); message CM_MOUSEWHEEL;
  end;

  TForm1 = class(TForm)
    RichEdit1: TRichEdit;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TRichEdit.CMMouseWheel (var Msg : TMessage);
begin
  if Msg.WParamLo and MK_CONTROL = 0 then
    Msg.Result := 0
  else
    Msg.Result := 1
end;
Die erste Variante verhindert den Aufruf der Methode MouseWheelHandler (in TControl), die zweite wird von der Methode MouseWheelHandler angestoßen.

Vielleicht kannst Du es bei Dir in Deine TRichEditSpellCheck Klasse einbauen.

Gruß


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz