Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TMemo: Zeilenindex der Cursorposition ermitteln (https://www.delphipraxis.net/92352-tmemo-zeilenindex-der-cursorposition-ermitteln.html)

little-x 18. Mai 2007 13:04


TMemo: Zeilenindex der Cursorposition ermitteln
 
Damit meine ich aber nicht das Y von
Delphi-Quellcode:
charetPos(X,Y)
Das sagt mir ja lediglich aus, welches Item der Stringliste ich gerade bearbeite.
Was ich brauche, ist die (vertikale) Position des Cursors im sichtbaren Bereich des Memofeldes, ganz unabhängig welche Zeile gerade bearbeitet wird.

Gibt's da Möglichkeiten?

Klaus01 18. Mai 2007 13:14

Re: TMemo: Zeilenindex der Cursorposition ermitteln
 
Aus der Hilfe:

Zitat:

Use CaretPos to determine the coordinates of the cursor. TPoint type defines a pixel location onscreen, with the origin in the top left corner. X specifies the horizontal coordinate of the point, Y specifies the vertical coordinate. CaretPos indicates the X and Y position relative to the client origin of the memo.

To determine the position of the caret in terms of characters of text only (rather than X/Y location), use the SelStart property.

Zitat:

Read SelStart to determine the position of the first selected character, where 0 indicates the first character. If there is no selected text, SelStart indicates the position of the cursor. Set SelStart to remove the current selection and position the cursor just before the indicated character.

To select a particular range of the text, first set SelStart to position the cursor, and then set SelLength to extend the selection.
Grüße
Klaus

little-x 18. Mai 2007 13:41

Re: TMemo: Zeilenindex der Cursorposition ermitteln
 
Hallo, danke für die Antwort. Hilft mir aber leider nicht weiter. Zugegeben, ich habe das Problem unglücklich formuliert. Nochmal ein Beispiel zum Unterstreichen was ich wirklich ermitteln möchte:

Angenommen ich habe ein MemoFeld mit einer vertikalen Länge von 10 Zeilen. Vom enthaltenen Text (100 Zeilen lang) sind momentan die Zeilen 21-30 sichtbar. Die CharetPos-Y lautet 25, das bedeutet von den sichtbaren Zeilen befindet sich der Cursor in der Fünften. Und genau diese "5" ist es, die ich ermitteln muss! Einen funktionalen Zusammenhang zu CharetPos-Y kann ich leider nicht zu 100% herstellen: Wenn nämlich der User 1 Zeile zurück scrollt, dann ist mein gesuchter Wert nur noch 4, CharetPos-Y ist aber immer noch 25!

Oder hast Du das schon so verstanden, und ich habe nur Deine Hinweise falsch interpretiert? Wenn dem so ist, kannst Du mir noch einen Tipp geben?

Grüße...

Klaus01 18. Mai 2007 14:05

Re: TMemo: Zeilenindex der Cursorposition ermitteln
 
Nun, ein etwas merkwürdiges Konstrukt zur Ermittlung
der Zeilenposition.

Delphi-Quellcode:
Edit1.Text:=IntToStr(Memo1.Lines.IndexOf(Memo1.Lines.Strings[Memo1.CaretPos.y]));
Noch eine Anmerkung zum Code, er funktioniert nur richtig wenn alle Zeilen einen unterschiedlichen Inhalt haben.

Noch eine Anmerkung, es ist Freitag und der obige Code macht nicht das was Du willst.
Habe nun auch noch keine Lösung zu Deinem Problem.


Grüße
Klaus

little-x 18. Mai 2007 14:41

Re: TMemo: Zeilenindex der Cursorposition ermitteln
 
So danke noch einmal; hab den Term 1:1 übernommen.

Ich würde jetzt eigentlich erwarten, dass folgende beiden Terms dasselbe zurückgeben sollten...

Delphi-Quellcode:
Memo1.Lines.IndexOf(Memo1.Lines.Strings[Memo1.CaretPos.y]);
ist bei mir irgendwie gleichbedeutend mit

Delphi-Quellcode:
Memo1.CaretPos.y
weil ja "Memo1.Lines" nix anderes als ein "TStrings"-Objekt ist und ja auch nicht wissen kann, welche der z.B. insgesamt 100 Zeilen gerade im Memofeld sichtbar sind und welche weggescrollt.

Das Programm bestätigt meine Befürchtung.
Sprich auf mein voriges Beispiel bezogen, gibt mir das eben auch die 25 zurück, anstelle die 5.

Es müsste ein Objekt der Klasse TStrings geben, welche immer nur die im Memofeld gerade
sichtbaren Zeilen beinhaltet, das wär's. Aber dafür scheint es wohl zu wenig sinnvolle Anwendungsmöglichkeiten zu geben... (meine ist aber sinnvoll).

Ich fürchte für mein Problem gibt es keine Lösung, höchstens mit irgendeiner Win32-API, die ich aber nicht kenne.

Hawkeye219 18. Mai 2007 14:48

Re: TMemo: Zeilenindex der Cursorposition ermitteln
 
Hallo,

vielleicht hilft dir diese Funktion. Sie ermittelt die (0-basierte) Nummer der ersten sichtbaren Zeile in einem Memo:

Delphi-Quellcode:
function GetFirstVisibleLine (aMemo: TCustomMemo): Integer;
begin
  Result := aMemo.Perform(EM_GETFIRSTVISIBLELINE, 0, 0);
end;
Gruß Hawkeye

little-x 18. Mai 2007 14:58

Re: TMemo: Zeilenindex der Cursorposition ermitteln
 
Ohne es ausprobiert zu haben:

Ich denke, das ist es!

Dreimal danke! :hello:


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