Avatar billede jes_petersen Nybegynder
17. august 2000 - 18:36 Der er 9 kommentarer og
1 løsning

Cursorposition

Hvordan får jeg cursorens position i et richedit-felt i pixels (evt. top og left).
Avatar billede speedy Nybegynder
17. august 2000 - 19:13 #1
Gå ind i onMouseMove Event\'et og derfra kan du aflæse X og Y.

fx. sådan her

procedure TForm1.RichEdit1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  RichEdit1.Text := IntToStr(X) + \',\' + IntToStr(Y);
end;


/SpEeDy
Avatar billede jes_petersen Nybegynder
17. august 2000 - 19:48 #2
Jeg mener ikke musen, men cursoren, altså den lille pind, der blinker ud for det, man skriver.

Her kommer lige det konkrete problem:

jeg har en listbox, som skal flytte sig i forhold til, hvor cursoren står. For at kunne få den til det, skal jeg jo bruge cursorens position.
Avatar billede el_gnu Nybegynder
17. august 2000 - 20:03 #3
Den lille blinkende streg hedder en caret, hvor cursor\'en er musens markør (og derfor er speedy\'s svar ganske rigtigt)
Avatar billede jes_petersen Nybegynder
17. august 2000 - 21:24 #4
Okay, men i så fald mener jeg altså en caret.
Avatar billede delphij Nybegynder
17. august 2000 - 21:54 #5
Det er ret enkelt når man ved det!

Jeg har sammenfattet det til følgende lille funktion som du kan benytte.

Function PosFromChar(Handle: Hwnd; CaretPos: Integer): TPoint;
begin
  SendMessage(Handle, EM_POSFROMCHAR, longint(@Result), CaretPos);
end;

Funktionen tager parametrene handle, der richeditens handle og en caretposition.
Caret positionen er nem at hente da den er lig selstart.
Resultatet er en TPoint type med positionen relativ til richeditens øverste venstre hjørne.

Et eks.

procedure TForm1.Button1Click(Sender: TObject);
Begin
Showmessage(\'x \' + IntToStr(PosFromChar(Richedit1.Handle, Richedit1.selstart).x) + \'; y \' + IntToStr(PosFromChar(Richedit1.Handle, Richedit1.selstart).y));
end;

Håber det hjælper.
Avatar billede borrisholt Novice
19. august 2000 - 14:08 #6
Som delphijj så ganske rigtigt siger så er det ret enkelt nå man ved det !

PÅ den anden side er der ingen grund til at gøre tingende mere besværligt end de i virkeligheden er .....

delphijj svar er rigtigt, men efter min smag for besværligt .... Der findes en property på en RichEdit der hedder CarretPos. Jeg foreslår man benytter sig af denne.

Jeg vil foreslå det følgende :

procedure TForm1.RichEdit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
with RichEdit1.CaretPos do
  Caption := Format(\'Carret pos (x,y) = (%d,%d)\',[x,y]);
end;


Jens B
Avatar billede borrisholt Novice
22. august 2000 - 20:04 #7
Der er blot det \"lille\" problem at delphijj eksemple ikke virker ... Hvis nu du markerer noget tekst over 2 eller flere linjer så viser den noget forkert :o(

Jens B
Avatar billede borrisholt Novice
22. august 2000 - 20:17 #8
problemer er jo at du kører Delphiu 3 og ikke mindst Delphi 4. Du er derfor nød til selv at implemtere en funktion der kan giver dig positionen på en Cursor ...
ref. Mit svar på \"Funktion ved linieskift\"  (http://www.eksperten.dk/spm/23635)

Jens B
Avatar billede delphij Nybegynder
23. august 2000 - 18:23 #9
Som jeg opfatter spørgsmålet er det et spørgsmål om hvilket koordinat careten har.
Jens B dit forslag giver ikke dette men noget andet, hvad aner jeg ikke, jeg er ikke ekspert på dette område, men jeg kan se at y-koordinaten er lig linjenummeret!!!
Mit forslag er ikke smukt, men giver den rette x og y-koordinat.

Prøv at checke deklarationen af TRichedit.CaretPos og skriv din vurdering af den.

Mvh.
J
Avatar billede borrisholt Novice
23. august 2000 - 22:12 #10
delphij>> Vi er så fulstendig enig .. Der er bare flere måder at implemtere svaret på. Hvis du kigger på mit svar i http://www.eksperten.dk/spm/23635 vil du opdage at jes_petersen i jævne træk spørger om det samme og det svar jeg til sidst har givfet ham der minder meget om det du har giver her ...

Jens B
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Politiets Efterretningstjeneste

IT-løsningsarkitekt i PET

Politiets Efterretningstjeneste

Platform Engineer hos PET

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Applikationsarkitekt til stor applikationstransformation i Forsvaret