Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi RichText und Scrollen mit Mausrad (https://www.delphipraxis.net/214711-richtext-und-scrollen-mit-mausrad.html)

haentschman 26. Feb 2024 07:40

RichText und Scrollen mit Mausrad
 
Hallöle...8-)

Ich habe einen Frame mit einem RichEdit drin... eingebettet auf einem Panel in der Oberfläche. Unter D11 konnte man, wenn das Edit den Focus hatte, mit dem Mausrad scrollen. Seit D12 srollt das Edit nicht mehr sondern der Parent auf dem der Frame liegt.

Was hat sich verändert? Die Properties haben sich nicht verändert. :roll:

PS: Seit D12 habe ich auch DevExpress aktualisiert. :gruebel:
PS: Ein normales Memo läßt sich mit dem Mausrad scollen...in der gleichen Ansicht.

Danke für Infos...

haentschman 27. Feb 2024 09:47

AW: RichText und Scrollen mit Mausrad
 
:cry: ...keiner hat eine Idee?

haentschman 29. Feb 2024 10:54

AW: RichText und Scrollen mit Mausrad
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin...:P

Klarstellung: Es hat nichts mit D12 zu tun. :zwinker:

Im Video (Scroll.zip) ist zu sehen, dass das Mausrad auf das Layout Control reagiert und nicht auf das Control mit dem Focus. Wenn das Layout Control so groß ist, das kein Scrollbalken erscheint, scrollt auch das RTF Feld. :zwinker:

Wie bekomme ich die Message an das Active RTF weitergeleitet? ...ich kann damit leben das Layout Control nicht mehr scrollt. :zwinker:

Danke...:wink:

Ausprobiert:
Wenn das Active Control ein RichEdit ist, dann wird das Scrollen des Layouts unterbunden. Soweit ok. Aber das Senden an das RichEdit funtioniert nicht...:cry:
Delphi-Quellcode:
procedure TfoReceipt.dxLayoutMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
  inherited;
  if Self.ActiveControl is TCustomRichEdit then
  begin
    Handled := True;
    SendMessage(Self.ActiveControl.Handle, CM_MOUSEWHEEL, WheelDelta, 0); // -> scrollt nicht
  end;
end;
...wo ist der Fehler?

PS: Ich habe gefühlt alle Varianten, auch mit Perform, mit verschiedenen Parameter Konstellationen durch.

peterbelow 1. Mär 2024 13:10

AW: RichText und Scrollen mit Mausrad
 
Warum schickst Du dem richedit ein CM_MOUSEWHEEL und nicht WM_MOUSEWHEEL?

haentschman 2. Mär 2024 07:51

AW: RichText und Scrollen mit Mausrad
 
Danke...:P
Zitat:

Warum schickst Du dem richedit ein CM_MOUSEWHEEL und nicht WM_MOUSEWHEEL?
Ich habe gefühlt alle SendMessage Varianten (CM_MOUSEWHEEL + WM_MOUSEWHEEL) und Perform durch.
...egal wo ich das SendMessage plaziere...das RichEdit reagiert nicht. :? Im OnMouseWheel, auch im Frame nach Handled := True, die gleiche Message zum RichEdit absetzen führt zu einem Stack Overflow. (Schleife imho logisch)
Dann habe ich ScrollBy im MousewheelUp/Down versucht. ScrollBy reagiert aber die Oberfläche zeichnet nicht richtig...Mit Invalidate wird der Cursor wieder auf Anfang gesetzt. :roll:

Mir gehen die Ideen aus... :cry:

himitsu 2. Mär 2024 10:34

AW: RichText und Scrollen mit Mausrad
 
Der Eingabefokus liegt aber beim RichEdit?
Viele Komponenten reagieren nichts auf's Scrollen, wenn sie nicht aktiv sind,

haentschman 3. Mär 2024 07:05

AW: RichText und Scrollen mit Mausrad
 
Zitat:

Der Eingabefokus liegt aber beim RichEdit?
...definitiv. Ich kann schreiben...aber nicht scrollen. :zwinker:

jaenicke 3. Mär 2024 15:29

AW: RichText und Scrollen mit Mausrad
 
Zitat:

Zitat von haentschman (Beitrag 1533996)
Aber das Senden an das RichEdit funtioniert nicht...:cry:
Delphi-Quellcode:
procedure TfoReceipt.dxLayoutMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
  inherited;
  if Self.ActiveControl is TCustomRichEdit then
  begin
    Handled := True;
    SendMessage(Self.ActiveControl.Handle, CM_MOUSEWHEEL, WheelDelta, 0); // -> scrollt nicht
  end;
end;
...wo ist der Fehler?

PS: Ich habe gefühlt alle Varianten, auch mit Perform, mit verschiedenen Parameter Konstellationen durch.

Wie wäre es so?
Delphi-Quellcode:
const
  EM_GETSCROLLPOS = $04DD;
  EM_SETSCROLLPOS = $04DE;
var
  ScrollPos: TPoint;
begin
  RichEdit1.Perform(EM_GETSCROLLPOS, 0, @ScrollPos);
  ScrollPos.Offset(0, 50);
  RichEdit1.Perform(EM_SETSCROLLPOS, 0, @ScrollPos);
end;

haentschman 5. Mär 2024 07:14

AW: RichText und Scrollen mit Mausrad
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin...8-)

Heureka...ich habs...mit Hilfe. (jaenicke) :zwinker: :love:
Delphi-Quellcode:
procedure TfrRTFBase.edtRTFMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); // #1462
const
  EM_GETSCROLLPOS = $04DD;
  EM_SETSCROLLPOS = $04DE;
var
  ScrollPos: TPoint;
begin
  Handled := True;
  if GetWindowLong(edtRTF.Handle, GWL_STYLE) = conScrollbarVisible then
  begin
    edtRTF.Perform(EM_GETSCROLLPOS, 0, @ScrollPos);
    ScrollPos.Offset(0, 50);
    edtRTF.Perform(EM_SETSCROLLPOS, 0, @ScrollPos);
  end;
end;

procedure TfrRTFBase.edtRTFMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); // #1462
const
  EM_GETSCROLLPOS = $04DD;
  EM_SETSCROLLPOS = $04DE;
var
  ScrollPos: TPoint;
begin
  Handled := True;
  if GetWindowLong(edtRTF.Handle, GWL_STYLE) = conScrollbarVisible then
  begin
    edtRTF.Perform(EM_GETSCROLLPOS, 0, @ScrollPos);
    ScrollPos.Offset(0, -50);
    edtRTF.Perform(EM_SETSCROLLPOS, 0, @ScrollPos);
  end;
end;
siehe Video

Danke. :wink:

jaenicke 5. Mär 2024 14:23

AW: RichText und Scrollen mit Mausrad
 
Das sieht so aus, als ob es sinnvoll wäre, bei der äußeren Scrollbar Smooth auf True zu setzen. Zumindest bei einer TScrollBox sieht es dann viel besser aus.

Ich meine die Scrollgeschwindigkeit, wenn du im rechten Bereich scrollst.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:25 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