Du hast selbstverständlich Recht, das die Datenhaltung im Grid nicht unbedingt die beste Wahl ist. Im Normalfall befinden sich die Matritzen und Tabellen auch jeweils in einem eigenen Objekt. Der Editor ist nur dazu da, damit man die Werte kontrollieren kann und gegebenenfalls leicht korrigieren. Dabei stört mich halt das Problem der Nachkommastellen. Ich habe diese Form gewählt, weil ich dann nicht ein extra Datenhaltungsmodell schaffen muss, welches zusammen mit dem Stringgrid aktualisiert wird (z.B. Spalten verschieben).
Die Maus spielt eine Rolle in der Art, daß sie die Parameter des Options-Set des StringGrids steuert. Damit wird die Unterscheidung realisiert zwischen Spalten/Zeilenverschieben, Indexfeldern, Zeilen/Spaltentiteln und Datenfeldern, die sich alle ein wenig unterscheiden. Befinde ich mich über einer Datenzelle ist natürlich goEditing im Set. Hole ich jetzt mit OnGetEditText/OnSetEditText eine Editierung starte, passiert (meiner Überlegung nach) folgendes:
- String wird geholt und im In-Place-Editor dargestellt. - Der erste Tastendruck löst SetText aus. - Der Text wird aktualisiert und neu bereitgestellt (dann aber wieder komplett markiert). - MouseOver wird aktualisiert und wenn die jetzt nicht mehr über einer bearbeitbaren Zelle steht, dann fehlt goEditing und Editierung wird kalt abgebrochen....
Formulieren wir das ursprüngliche Problem doch mal anders:
Wie setze ich einen Editor auf eine StringGridzelle und bekomme den Wert dieses Editors zurück, NACHDEM der Nutzer den Editor beendet hat (z.B. Return drückt, eine Zelle weiter 'tabt', oder ESC drückt).
Jan
PS: Schönen Dank, aber die angehängten Properties kenne ich bereits. Arbeite seit gut 15 Jahren mit StringGrids in Delphi (bzw. seinen Vorläufern
) Allerdings habe ich mich noch nie um das hier angesprochene Problem kümmern dürfen/wollen/müssen....