Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   InplaceEdit in Databound Grid (https://www.delphipraxis.net/195345-inplaceedit-databound-grid.html)

Gremlin 21. Feb 2018 07:34

Delphi-Version: 7

InplaceEdit in Databound Grid
 
Hallöchen,


vielleicht kann mir jemand zu diesem Problem helfen?

Ich habe hier einen abgeleiteten Databound Grid, mit zusätzlichem abgeleiteten TInplaceEdit. Leider ist es im InplaceEdit nicht möglich, wenn sich der Grid im dauerhaften Bearbeitungsmodus befindet, die Zelleninhalte über die Tastaturkombinationen SHIFT+<VK_LEFT><VK_RIGHT>, resp. CTRL+SHIFT+<VK_LEFT><VK_RIGHT> zu markieren, da diese im originalen TInplaceEdit des Databound Grid nicht, anders oder fehlerhaft implementiert sind. Daher bin ich auf die Idee gekommen, dieses Verhalten zu ermöglichen, in dem ich einfach die KeyDown-Methode des abegeleiteten TInplaceEdit überschreibe und selbst auf diese Keycodes reagiere.

Leider klappt dies nicht zu 100%, da ich nicht herausfinden kann, in welcher Richtung (nach links oder rechts) die Markierung des TInplaceEdit erstellt wurde (SelStart und SelLength enthalten dann immer die gleichen Werte). Die Markierung des Textes wäre in beiden Fällen unterschiedlich und kann mit jedem TEdit nachvollzogen werden.

Beispiel:

abcde 1234 9999

ist der Bereich "34_99" von links nach rechts markiert, dann selektiert ein CTRL-SHIFT-LEFT "34_" und CTRL-SHIFT-RIGHT "34_9999"
ist der Bereich "34_99" von rechts nach links markiert, dann selektiert ein CTRL-SHIFT-LEFT "1234_99" und CTRL-SHIFT-RIGHT "99"


Kann mir bitte jemand weiterhelfen?

Vielen Dank

Gremlin 23. Feb 2018 08:30

AW: InplaceEdit in Databound Grid
 
ich habe die Lösung in der Zwischenzeit selbst herausgefunden.

Wenn es interessiert:

Nach dem Zwischenspeichern der aktuellen SelStart und SelLength-Angaben, kann über diese Message die Selektion gelöscht werden und anschließend die Position des Cursors ermittelt werden.


Code:
[...]
SendMessage(Handle, EM_GETSEL, LongInt(@StartPos), LongInt(@EndPos));
SendMessage(Handle, EM_SETSEL, -1, 0);
SendMessage(Handle, EM_GETSEL, LongInt(@CurPos), 0);
SendMessage(Handle, EM_SETSEL, StartPos, EndPos);
[...]


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