AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

RichText und Scrollen mit Mausrad

Ein Thema von haentschman · begonnen am 26. Feb 2024 · letzter Beitrag vom 5. Mär 2024
Antwort Antwort
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#1

RichText und Scrollen mit Mausrad

  Alt 26. Feb 2024, 07:40
Hallöle...

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.

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

Danke für Infos...
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#2

AW: RichText und Scrollen mit Mausrad

  Alt 27. Feb 2024, 09:47
...keiner hat eine Idee?
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#3

AW: RichText und Scrollen mit Mausrad

  Alt 29. Feb 2024, 10:54
Moin...

Klarstellung: Es hat nichts mit D12 zu tun.

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.

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

Danke...

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...
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.
Angehängte Dateien
Dateityp: zip Scroll.zip (419,0 KB, 2x aufgerufen)

Geändert von haentschman (29. Feb 2024 um 14:51 Uhr)
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
672 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: RichText und Scrollen mit Mausrad

  Alt 1. Mär 2024, 13:10
Warum schickst Du dem richedit ein CM_MOUSEWHEEL und nicht WM_MOUSEWHEEL?
Peter Below
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#5

AW: RichText und Scrollen mit Mausrad

  Alt 2. Mär 2024, 07:51
Danke...
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.

Mir gehen die Ideen aus...

Geändert von haentschman ( 2. Mär 2024 um 08:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#6

AW: RichText und Scrollen mit Mausrad

  Alt 2. Mär 2024, 10:34
Der Eingabefokus liegt aber beim RichEdit?
Viele Komponenten reagieren nichts auf's Scrollen, wenn sie nicht aktiv sind,
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#7

AW: RichText und Scrollen mit Mausrad

  Alt 3. Mär 2024, 07:05
Zitat:
Der Eingabefokus liegt aber beim RichEdit?
...definitiv. Ich kann schreiben...aber nicht scrollen.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.349 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: RichText und Scrollen mit Mausrad

  Alt 3. Mär 2024, 15:29
Aber das Senden an das RichEdit funtioniert nicht...
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;
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#9

AW: RichText und Scrollen mit Mausrad

  Alt 5. Mär 2024, 07:14
Moin...

Heureka...ich habs...mit Hilfe. (jaenicke)
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.
Angehängte Dateien
Dateityp: zip Scroll.zip (540,4 KB, 2x aufgerufen)

Geändert von haentschman ( 5. Mär 2024 um 07:18 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.349 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: RichText und Scrollen mit Mausrad

  Alt 5. Mär 2024, 14:23
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:08 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