AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein TRichedit, Horizontal-Scrolling von markiertem Text
Thema durchsuchen
Ansicht
Themen-Optionen

TRichedit, Horizontal-Scrolling von markiertem Text

Ein Thema von Maekkelrajter · begonnen am 7. Dez 2017 · letzter Beitrag vom 7. Dez 2017
Antwort Antwort
Maekkelrajter

Registriert seit: 8. Mär 2017
Ort: Köln
156 Beiträge
 
Delphi 12 Athens
 
#1

TRichedit, Horizontal-Scrolling von markiertem Text

  Alt 7. Dez 2017, 14:43
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?
Miniaturansicht angehängter Grafiken
screenshot1.jpg   screenshot2.jpg  
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.051 Beiträge
 
Delphi 2009 Professional
 
#2

AW: TRichedit, Horizontal-Scrolling von markiertem Text

  Alt 7. Dez 2017, 16:28
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).
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#3

AW: TRichedit, Horizontal-Scrolling von markiertem Text

  Alt 7. Dez 2017, 17:34
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;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Maekkelrajter

Registriert seit: 8. Mär 2017
Ort: Köln
156 Beiträge
 
Delphi 12 Athens
 
#4

AW: TRichedit, Horizontal-Scrolling von markiertem Text

  Alt 7. Dez 2017, 22:41
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!

Geändert von Maekkelrajter ( 7. Dez 2017 um 22:57 Uhr)
  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 12:17 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