Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   TRichedit, Horizontal-Scrolling von markiertem Text (https://www.delphipraxis.net/194562-trichedit-horizontal-scrolling-von-markiertem-text.html)

Maekkelrajter 7. Dez 2017 13:43

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:
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);
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?

Redeemer 7. Dez 2017 15:28

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).

Uwe Raabe 7. Dez 2017 16:34

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;

Maekkelrajter 7. Dez 2017 21:41

AW: TRichedit, Horizontal-Scrolling von markiertem Text
 
Delphi-Quellcode:
   selstart:= Hpos + len;
   sellength:= -len;
War tatsächlich die Lösung. So einfach kann das sein!

Zitat:

Warum eine Listenansicht mit TRichEdit und nicht mit TListView?
Wahrscheinlich wäre in der Tat ein TListview von Anfang an die bessere Wahl gewesen. Aber mein Workflow als Hobby-Programmierer, der fast ausschließlich für den Eigenbedarf arbeitet, dürfte sich etwas von dem eines Professionals unterscheiden. Da wird zunächst quick & dirty ein Programm hingerotzt, das gerade mal die beabsichtigte Funktion erfüllt. Dabei wird soviel wie möglich aus schon vorhandenen Projekten übernommen. Nach und nach wird dann sowohl das GUI als auch der Code optimiert und 'verschönert'. Deshalb hatte mir auch zunächst ein TMemo für die Textausgabe völlig ausgereicht. Aber einige optische Gimmicks wie z.B. mehrfarbiger Text waren damit anscheinend nicht zu realisieren, weshalb ich das TMemo durch ein TRichedit ersetzt habe, das ja dank gemeinsamer Vorfahren fast 'Pin-kompatibel' ist. Im gegenwärtigen fortgeschrittenen Stadium des Projektes das Design auf TListview umzustellen wäre dagegen ein enormer Aufwand, ja geradezu Overkill.
Noch mal vielen Dank für die Hilfe!


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