AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TMemo: Zeilenindex der Cursorposition ermitteln
Thema durchsuchen
Ansicht
Themen-Optionen

TMemo: Zeilenindex der Cursorposition ermitteln

Ein Thema von little-x · begonnen am 18. Mai 2007 · letzter Beitrag vom 18. Mai 2007
Antwort Antwort
little-x

Registriert seit: 13. Apr 2007
Ort: Brandenburg
60 Beiträge
 
Delphi 6 Enterprise
 
#1

TMemo: Zeilenindex der Cursorposition ermitteln

  Alt 18. Mai 2007, 14:04
Damit meine ich aber nicht das Y von
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?
manchmal machts mich mürbe
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: TMemo: Zeilenindex der Cursorposition ermitteln

  Alt 18. Mai 2007, 14:14
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
Klaus
  Mit Zitat antworten Zitat
little-x

Registriert seit: 13. Apr 2007
Ort: Brandenburg
60 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: TMemo: Zeilenindex der Cursorposition ermitteln

  Alt 18. Mai 2007, 14:41
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...
manchmal machts mich mürbe
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: TMemo: Zeilenindex der Cursorposition ermitteln

  Alt 18. Mai 2007, 15:05
Nun, ein etwas merkwürdiges Konstrukt zur Ermittlung
der Zeilenposition.

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
Klaus
  Mit Zitat antworten Zitat
little-x

Registriert seit: 13. Apr 2007
Ort: Brandenburg
60 Beiträge
 
Delphi 6 Enterprise
 
#5

Re: TMemo: Zeilenindex der Cursorposition ermitteln

  Alt 18. Mai 2007, 15:41
So danke noch einmal; hab den Term 1:1 übernommen.

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

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

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.
manchmal machts mich mürbe
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#6

Re: TMemo: Zeilenindex der Cursorposition ermitteln

  Alt 18. Mai 2007, 15:48
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
  Mit Zitat antworten Zitat
little-x

Registriert seit: 13. Apr 2007
Ort: Brandenburg
60 Beiträge
 
Delphi 6 Enterprise
 
#7

Re: TMemo: Zeilenindex der Cursorposition ermitteln

  Alt 18. Mai 2007, 15:58
Ohne es ausprobiert zu haben:

Ich denke, das ist es!

Dreimal danke!
manchmal machts mich mürbe
  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 19:47 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