![]() |
seltext in trichedit imitieren
Hallo,
eine Frage zur Methodik der Textmarkierung z.b. in Trichedit oder Tmemo: Shift+Pos1 markiert zum Zeilenanfang - Shift+Ende zum Zeilenende. Je nachdem, ob man vorher schon eine Markierung z.b. per Shift+-> oder Shift+<- erzeugt hat, wird seltext entweder in die gleiche Richtung verlängert oder "flippt" um einen Fixpunkt (im letzten Fall muß man vorher seltext in die entgegengesetzte Richtung verlängert haben). Weiß jemand, woran Trichedit erkennt, in welche Richtung man vorher markiert hat - eine Eigenschaft, die die Tastenbewegungen mit protokoliert? Ich würde dieses Verhalten gerne genauso simulieren, kann mir aber keinen Algorithums vorstellen, der diese Entscheidung alleine anhand von selstart und sellength bieten kann. Bin gespannt MfG Uwe |
AW: seltext in trichedit imitieren
Ich vermute mal, dass das über die Eigenschaft SelStart vom RichEdit abbildbar ist. Wenn du weißt, wo der Anfang ist (SelStart) kann man leicht anhand der Cursor-Position die Markierung bestimmen
|
AW: seltext in trichedit imitieren
Danke, Thomas,
aber das löst das Problem eben nicht! Selstart liegt ja immer "links", eben am anfang der Markierung, egal, ob man mit z.b. shift+-> oder shift+<- die Markierung erzeugt. Benutzt man dann zusätzlich die Pos1- oder Ende-Taste, verhält sich die veränderte Markierung unterschiedlich - je nach dem, ob man vorher in die gleiche Richtung markiert hat, wird dies bis zum Zeilenanfang (Ende) verlängert oder "flippt" um den Fixpunkt. MfG Uwe |
AW: seltext in trichedit imitieren
Das RichEdit geht nunmal aber von der Cursorposition aus ... daß SelStart leider nicht mit der Cursorposition übereinstimmt, ist bei deiner gewünschten Vorgehensweise ein großes Problem,
welches sich ohne Kenntnis der richtigen Cursorposition nur schwer nicht lösen läßt. |
AW: seltext in trichedit imitieren
Zitat:
Es handelt sich um zwei voneinander unabhängige Selektionen, die den gleichen "Fixpunkt" haben. Diesen Fixpunkt kann man bestimmen indem man Selstart in Relation zur Cursorbewegung (CursorTasten) setzt oder selstart permanent beobachtet. Wird Selstart kleiner und SelLength größer Wird zum Satzanfang hin selektiert. Fixpunkt ist also Selstart+Sellength. Nur frage ich mich wofür das gut sein soll, denn letztlich wird die Selektion weiter verarbeitet. Egal ob von links oder rechts selektiert wurde. Gruß K-H |
AW: seltext in trichedit imitieren
Hallo,
Der Ankerpunkt ist der Punkt am dem zuletzt SelLength 0 war. Im Richedit läßt es sich einfach prüfen:
Delphi-Quellcode:
Ist Ankerpunkt > SelStart geht die Markierung in die "negative" Richtung.
procedure TForm1.RichEdit1SelectionChange(Sender: TObject);
begin if RichEdit1.SelLength = 0 then Caption := IntToStr(RichEdit1.SelStart) //Ankerpunkt else Label1.Caption := IntToStr(RichEdit1.SelStart); end; |
AW: seltext in trichedit imitieren
Danke erst mal allen für die Ideen!
Habe für mich selbst noch keine Lösung gefunden - muß wohl noch etwas brüten! Eigentlich wollte ich ja nur das Verhalten von Trichedit bei shift+ende (Markierung von selstart bis Zeilenende incl. Zeilenumbruch) ändern, so daß der Zeilenumbruch nicht mitmarkiert wird (wie in tmemo)- die Berechnugen dazu sind einfach - aber die Beeinflussung der key-Routinen nicht so. Auch eine Änderung von key in vk_left und shift in [ssshift,ssctrl] (im trichedit wird dann bis zum Zeilenende OHNE Zeilenumbruch markiert) hilft nicht - dann wird nur Zeichenweise markiert.
Delphi-Quellcode:
Vielleicht darf man auf diese weise die Variablen nicht ändern - oder liegt's an shift - keine Variable?
procedure keyup(var Key: Word; Shift: TShiftState);override;
procedure TRichEditTab_ua.keydown(var Key: Word; Shift: TShiftState); begin case key of VK_END: if (shift=[ssshift]) then begin shift:=ssshift,ssctrl];key:=VK_RIGHT;end; end; inherited; end; MfG Uwe |
AW: seltext in trichedit imitieren
hmmmm, man muss ja nicht alles verstehen :spin2:
Zitat:
Zitat:
So wird das letzte Zeichen wieder aus der Markierung herrausgenommen:
Delphi-Quellcode:
(alternativ auf das erste #10 nach Selstart prüfen und entsprechend markieren)
case key of
VK_END: if ssShift in Shift then RichEdit.SelLength := RichEdit.SelLength -1; end; ... aber ob das dein Ziel ist :gruebel: |
AW: seltext in trichedit imitieren
Danke Lannes,
zu Deiner Anmerkung: nachbauen wäre mir lieber - das sind eben solche Probleme, die einem nicht aus dem Kopf gehen - man möchte wissen, wie's geht! zu Deinem Beispiel der Verkürzung von sellength um 1: geht, wenn man's in keyup unterbringt
Delphi-Quellcode:
Sieht zwar etwas lustig aus - in keydown wird ja erst die Berechnung incl. Zeilenumbruch ausgeführt - und das sieht man - und danach nehme ich wieder eine Verkürzung um 1 vor. Aber so geht's.
procedure TRichEditTab_ua.keyup(var Key: Word;Shift: TShiftState);
begin case key of VK_END: if (shift=[ssshift]) then begin sellength:=SelLength-1;{key:=0;}end; end; inherited; end; Gerade probiert: In keyup muß man key:=0 auch nicht mehr einfügen. MfG Uwe |
AW: seltext in trichedit imitieren
Zitat:
(alternativ auf das erste #10 nach Selstart prüfen und entsprechend markieren) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 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