Einzelnen Beitrag anzeigen

BoolString

Registriert seit: 2. Feb 2009
Ort: Varel
70 Beiträge
 
RAD-Studio 2009 Pro
 
#1

tStringGrid und In-Place-Editor Problem

  Alt 2. Aug 2010, 00:36
Moin!

Ich sitze derzeit daran und arbeite ein altes Projekt ein wenig auf. Ein wichtiger Abschnitt darin ist ein Dateneditorformular.

Meine eigentlichen Daten befinden sich alle in eine eigene Klasse gekapselt und werden zentral von einem Datenmanager verwaltet. In dem Fromular für die Editierung der Daten befindet sich ein StringGrid, welches ich nutze um die Daten darzustellen und editieren zu lassen. Neben Zahlen können auch Strings auftreten. Da bei den Zahlen teilweise viele Nachkommastellen auftreten würde ich gerne 2 StringGrids verwenden. Das eine beinhaltet die tatsächlichen Werte und Strings (die ich benötige um eine nötige numerische Genauigkeit zu erreichen). Das andere stellt Zahlen (nach Einstellung) auf eine definierte Anzahl an Nachkommastellen dar (im OnDrawCell nach den Werten aus dem exakten Grid)). Der Nutzer kann zwischen den beiden StringGrids umschalten (Visible Property über eine Checkbox realisiert). Wenn ich das Formular schließe, werden die aktuellen Werte aus dem exakt anzeigenden StringGrid an den Datenmanager zurückübermittelt. Das Ganze habe ich über ein filigranes Machwerk bewerkstelligt, welches mir ermöglicht sowohl Row/Col-Movings, Cell-Selection, Row/Col Selection und Editing Funktionalitäten bereitzustellen, ohne dass der Nutzer irgendwas umschalten muss.

Nun habe ich das folgende Problem:
Wenn ich im StringGrid mit den gerundeten Zahlen editiere (gilt andersrum genauso), dann kann ich für die Editierung der Zelle den genauen Inhalt über OnGetEditText aus dem exakten StringGrid holen und anzeigen. Das Problem liegt aber darin, wie ich den Wert nach abschließender Editierung in beide StringGrids bekomme, da mir ansonsten Inkohärenzen entstehen (wie gesagt, die Darstellung der gerundeten Zahlen im entsprechenden Grid wird im OnDraw gemacht). Mir fehlt jetzt so etwas wie eine OnExit Property des In-Place-Editors, von wo aus ich den Wert nach der Bearbeitung in beide StringGrids schreiben kann. OnSetEditText scheidet hier leider aus, da es den Wert immer wieder aktualisiert und neu markiert, da dann auch gleich wieder OnGetEditText aufgerufen wird. Zudem kann es dann auch noch sein, daß der Nutzer die Maus verschoben hat, so daß der Zeiger nicht mehr über einem Feld steht welches ich für Zelleingabe zulasse. In dem Fall wird die Editierung der Zelle nämlich komplett abgebrochen.

Ich bräuchte so etwas wie:
Eine OnExit Funktion des In-Place Editors, der mir in der Prozedur die Koordinaten im Grid mitliefert, damit ich den neuen Wert in beide Grids schreiben kann. Alternativ könnte man sicherlich auch ein normales tEdit da drüber legen. Die Frage ist nur wie und wie realisiere ich das dann. Kann man da nicht eine Trick/Cracker Klasse für nutzen, die die gewünschte Funktionalität für die StringGrids jetzt noch nachträglich bereitstellt? Wenn der Nutzer die Tab Taste drückt wäre es schön, wenn der Editor gleich in der nächsten logischen Reihung erneut aufgerufen wird. Dazu kann man doch dann sicherlich das TCMDialogKey Event abfangen und mit ActiveControl auf den entsprechenden Editor vergleichen, oder?


Die Frage ist nur WIE???
Vielleicht kann mir jemand helfen; momentan stehe ich ziemlich auf dem Schlauch. Ich schätze, daß man für ein normales StringGrid irgendwie den In-Place-Editor verbiegen kann oder durch eine andere Funktion ersetzt. Mir fehlt da derzeit allerdings komplett der Überblick. Ich habe schon viel im Netz gesucht und noch nicht wirklich was gefunden, was mir direkt nützt. Die Hilfe von meinem D2009 bringt mich derzeit auch nicht weiter. Zudem kommt noch, daß ich mehr auf der Numerikseite zu Hause bin als im Komponentendesign.

Beste Grüße und herzlichen Dank

Jan
  Mit Zitat antworten Zitat