AGB  ·  Datenschutz  ·  Impressum  







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

seltext in trichedit imitieren

Ein Thema von DrUArn · begonnen am 25. Mai 2011 · letzter Beitrag vom 1. Jun 2011
Antwort Antwort
DrUArn

Registriert seit: 20. Mär 2003
130 Beiträge
 
Delphi 10.3 Rio
 
#1

seltext in trichedit imitieren

  Alt 25. Mai 2011, 19:39
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
  Mit Zitat antworten Zitat
Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#2

AW: seltext in trichedit imitieren

  Alt 25. Mai 2011, 21:23
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
  Mit Zitat antworten Zitat
DrUArn

Registriert seit: 20. Mär 2003
130 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: seltext in trichedit imitieren

  Alt 26. Mai 2011, 13:35
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

Geändert von DrUArn (26. Mai 2011 um 13:53 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: seltext in trichedit imitieren

  Alt 26. Mai 2011, 14:01
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.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

AW: seltext in trichedit imitieren

  Alt 26. Mai 2011, 16:53
....wird dies bis zum Zeilenanfang (Ende) verlängert oder "flippt" um den Fixpunkt.
Diese Interpretation ist nicht ganz richtig.
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#6

AW: seltext in trichedit imitieren

  Alt 26. Mai 2011, 22:07
Hallo,

Der Ankerpunkt ist der Punkt am dem zuletzt SelLength 0 war.

Im Richedit läßt es sich einfach prüfen:
Delphi-Quellcode:
procedure TForm1.RichEdit1SelectionChange(Sender: TObject);
begin
  if RichEdit1.SelLength = 0 then
    Caption := IntToStr(RichEdit1.SelStart) //Ankerpunkt
    else
      Label1.Caption := IntToStr(RichEdit1.SelStart);
end;
Ist Ankerpunkt > SelStart geht die Markierung in die "negative" Richtung.
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
DrUArn

Registriert seit: 20. Mär 2003
130 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: seltext in trichedit imitieren

  Alt 31. Mai 2011, 16:52
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:
  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;
Vielleicht darf man auf diese weise die Variablen nicht ändern - oder liegt's an shift - keine Variable?

MfG
Uwe
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#8

AW: seltext in trichedit imitieren

  Alt 31. Mai 2011, 23:12
hmmmm, man muss ja nicht alles verstehen
... Ich würde dieses Verhalten gerne genauso simulieren, kann mir aber keinen Algorithums vorstellen, ...
...Eigentlich wollte ich ja nur das Verhalten von Trichedit bei shift+ende (Markierung von selstart bis Zeilenende incl. Zeilenumbruch) ändern
was möchtest Du denn nun? nachbauen oder ändern?

So wird das letzte Zeichen wieder aus der Markierung herrausgenommen:
Delphi-Quellcode:
case key of
  VK_END: if ssShift in Shift then
            RichEdit.SelLength := RichEdit.SelLength -1;
  end;
(alternativ auf das erste #10 nach Selstart prüfen und entsprechend markieren)
... aber ob das dein Ziel ist
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
DrUArn

Registriert seit: 20. Mär 2003
130 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: seltext in trichedit imitieren

  Alt 1. Jun 2011, 11:03
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:
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;
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.
Gerade probiert: In keyup muß man key:=0 auch nicht mehr einfügen.

MfG
Uwe
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#10

AW: seltext in trichedit imitieren

  Alt 1. Jun 2011, 21:17
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.
deshalb der Alternativvorschlag:

(alternativ auf das erste #10 nach Selstart prüfen und entsprechend markieren)
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  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 02:38 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