Autor Beitrag
Hanna Bubiskopf
Hält's aus hier
Beiträge: 14

XP
D7
BeitragVerfasst: Do 12.05.05 19:30 
diesen Code habe ich aus dem Internet
er zeigt die Zeilen und Spalten ungenau
oder falsch an.
Wer weiss den richtigen Code?
Im Internet gab's nichts anderes.
Ich möchte die aktuelle Zeile und Spalte
beim "Browsen" mit den Cursortasten im Memo angezeigt bekommen.
Wenn ich "Enter" drücke sollte die Nummer
der Zeile eins größer werden. Das klappt bei
diesem Code komischerweise auch nicht.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
Z, V: LongInt;
begin
Z := SendMessage(Memo1.Handle, EM_LINEFROMCHAR, Memo1.SelStart, 0);
V := Memo1.SelStart - SendMessage (Memo1.Handle, EM_LINEINDEX, Z, 0);
statusbar1.Panels[1].Text:='  Zeile ' + inttostr(Z+1) + ', Spalte ' + inttostr(V+1);
end;


Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt.
feivel3333
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 190

W7
Delphi XE prof
BeitragVerfasst: Do 12.05.05 19:41 
Titel: Koordinaten im Memo anzeigen
Hi,
prinzipiell klappt das schon, was du da geschrieben hast, also

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TMainForm.Memo1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);

var Z : integer;
    V : integer;

begin
   Z := SendMessage(Memo1.Handle, EM_LINEFROMCHAR, Memo1.SelStart, 0);
   V := Memo1.SelStart - SendMessage (Memo1.Handle, EM_LINEINDEX, Z, 0);
   Label16.Caption := ' Zeile ' + inttostr(Z+1) + ', Spalte ' + inttostr(V+1);
end;



Du hast das nur an die falsche Stelle positioniert. Nimm mal KeyUp, denn dann ist die aktuelle Stelle auch wirklich aktuell. Und bedenke folgendes:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TMainForm.Memo1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var Z : integer;
    V : integer;

begin
   Z := SendMessage(Memo1.Handle, EM_LINEFROMCHAR, Memo1.SelStart, 0);
   V := Memo1.SelStart - SendMessage (Memo1.Handle, EM_LINEINDEX, Z, 0);
   Label16.Caption := ' Zeile ' + inttostr(Z+1) + ', Spalte ' + inttostr(V+1);
end;


In das MouseDown habe ich es auch noch mal gepackt. Wäre ja zu schön gewesen, wenn man es als MouseDown-Event direkt aufrufen kann. Nein, da stimmen die Parameter wohl nicht. Aber es funktioniert, ich habe es getestet!
Schließlich kannst du ja auch ins Memo klicken. Dann muss die Position ja auch wieder angezeigt werden.

Gruß, AS

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.