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: wenn Pfeil in der letzten Zeile -> wie Tab (https://www.delphipraxis.net/79109-tmemo-wenn-pfeil-der-letzten-zeile-wie-tab.html)

hoika 16. Okt 2006 16:47


TMemo: wenn Pfeil in der letzten Zeile -> wie Tab
 
Hallo #,

ich erweitere gerade ein Form.
Dort waren 3 Edits.
Wenn man im Edit "Pfeil nach unten" geklickt hatte,
wurde der nächste Editor markiert.

Delphi-Quellcode:
  if Key=VK_Down then theForm.Perform(WM_NEXTDLGCTL, 0, 0);
Jetzt wird einer der Edits durch ein TMemo ersetzt.
Wenn der Cursor in der letzten Zeile ist und der Nutzer vk_down drückt,
soll zum nächsten Edit springen.

EM_LINEFROMCHAR, EM_LINEINDEX habe ich schon rausgesucht,
aber so richtig keinen Plan, wie weiter.
Ich brauche sowas wie "CursorIsInLastLine".

Hat jemand sowas programmiert ?

Danke

Heiko

chrisw 17. Okt 2006 08:18

Re: TMemo: wenn Pfeil in der letzten Zeile -> wie Tab
 
im OnKeyDown oder OnKeyUp des MemoFeldes
Delphi-Quellcode:
if (Key = VK_Down) and (Memo1.SelStart = Length(Memo1.Text)) then theForm.Perform(WM_NEXTDLGCTL, 0, 0);

hoika 17. Okt 2006 08:34

Re: TMemo: wenn Pfeil in der letzten Zeile -> wie Tab
 
Hallo chrisw,

Danke, ich habe das inzwischen selbst herausgefunden.
Das Problem ist, der Code wird zwar ausgeführt, aber das nächste
Edit wird NICHT fokussiert.
In das Perform springt er aber.

Edit_Text ist vom Typ TMemo.
Ich hatte nur keine Lust, alle Verweise zu ändern.

Mit Tab geht es,
die folgenden Editoren werden auch brav angesprungen,
wenn vorher auch ein Editor fokussiert war.

Woran kann das liegen ?


Edit:
Key:= 0; war die Lösung


Heiko

Delphi-Quellcode:
procedure TForm_Terminal_IdText.Edit_TextKeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
var
  iCurLine : Integer;
  iMaxLines : Integer;
begin
 { starts with zero }
  iCurLine:= SendMessage(Edit_Text.Handle, EM_LINEFROMCHAR,
    Edit_Text.SelStart, 0)+1;
  iMaxLines:= SendMessage(Edit_Text.Handle, EM_GETLINECOUNT, 0, 0);

  if (Key=VK_UP) and
     (iCurLine=1) then
  begin
    Self.Perform(WM_NEXTDLGCTL, 1, 0);

   // ohne das klappt es nicht
    Key:= 0;
  end;

  if (Key=VK_DOWN) and
     (iCurLine=iMaxLines) then
  begin
    Self.Perform(WM_NEXTDLGCTL, 0, 0);

   // ohne das klappt es nicht
    Key:= 0;
  end;
end;

marabu 17. Okt 2006 08:52

Re: TMemo: wenn Pfeil in der letzten Zeile -> wie Tab
 
Hallo Heiko,

kennst du schon TMemo.CaretPos.Y?

Grüße vom marabu

hoika 17. Okt 2006 18:56

Re: TMemo: wenn Pfeil in der letzten Zeile -> wie Tab
 
Hallo marabu,

jetzt ja ;)

aber wozu ?
Das sind Bildschirmkoordinaten, keine Zeilen.

Aber egal, der Code oben läuft ja jetzt. :cheers:

Heiko

marabu 17. Okt 2006 19:10

Re: TMemo: wenn Pfeil in der letzten Zeile -> wie Tab
 
Zitat:

Zitat von hoika
Das sind Bildschirmkoordinaten, keine Zeilen.

Du darfst nicht alles glauben, was geschrieben steht.

Freundliche Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz