![]() |
TRichedit, Horizontal-Scrolling von markiertem Text
Liste der Anhänge anzeigen (Anzahl: 2)
In einem TRichedit soll beim Betätigen der rechten Maustaste die Zeile unter dem Mauscursor markiert und ein Kontextmenü (Popup-Menu) geöffnet werden. Das Richedit ist 'ReadOnly' und Wordwrap ist auf 'False' gesetzt. Die Textanzeige dient hauptsächlich zur Information über den Programmfortschritt und kann kurze 'Info'-Zeilen enthalten die auf jeden Fall lesbar bleiben sollen (siehe Anhang)
Code:
Das funktioniert im Prinzip korrekt. Wie kann man aber verhindern, dass der Text automatisch nach links scrollt, wenn die markierte Zeile über den Rand des Clientbereiches hinausragt?
procedure TGL4Mainform.Richedit1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); var RE: TRichedit; Line, Offset, Hpos, len:Integer; P: TPointL; begin RE:= sender as TRichedit; if (button = mbright) and (RE.Lines.Count > 0) Then with RE do begin p.x:= x; p.y:= y; Offset := Perform(EM_CHARFROMPOS, 0, Integer(@p)); Line := Perform(EM_LINEFROMCHAR, Offset, 0); HPos := Perform(EM_LINEINDEX, Line, 0); len:= perform(EM_LINELENGTH,Hpos,0); selstart:= Hpos; sellength:= len; x:= clientorigin.x + x; y:= clientorigin.y + y; end; popupmenu4.Popupcomponent:= RE; popupmenu4.Popup(x,y); |
AW: TRichedit, Horizontal-Scrolling von markiertem Text
Links-Rechts-Schwäche?
Warum eine Listenansicht mit TRichEdit und nicht mit TListView? (TListBox kann nicht horizontal scrollen, aber TListView kann das, wenn man es auf Report stellt und nach dem Einfügen von Elementen die Breite der einzigen Spalte (Header ausblenden) auf -1 oder -2 (vergessen, welches) setzt.) Wenn du unbedingt bei TRichEdit bleiben möchtest: * SelLength := Len + 1 (oder 2), je nach Plattform. Markiert den "Absatz" mit. * Es gibt einen ScrollBy-Befehl (keine Ahnung, ob der hier geht), ansonsten WinApi-Calls wie SetScrollPos/SetScrollInfo (hatte damit einige Stabilitätsprobleme glaube ich). |
AW: TRichedit, Horizontal-Scrolling von markiertem Text
Der Cursor wird immer an das Ende der Selektion gesetzt und in den sichtbaren Bereich gescrollt. Wenn du die Selektion umdrehst, bleibt der Anfang der Zeile sichtbar:
Delphi-Quellcode:
selstart:= Hpos + len;
sellength:= -len; |
AW: TRichedit, Horizontal-Scrolling von markiertem Text
Delphi-Quellcode:
War tatsächlich die Lösung. So einfach kann das sein!
selstart:= Hpos + len;
sellength:= -len; Zitat:
Noch mal vielen Dank für die Hilfe! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz