Sorry, daß meine Antwort so lange gedauerthat. Hab im schwedischen Nirgendwo gesessen und ein sporadisch aufploppends WLAN genutzt. Bin aber inzwischen wieder da...
@ibp
Danke für den Hinweis. Ich bin selbst schon einmal über auf den Link gestoßen; habe aber ob der Vielzahl von käuflich erwerbbaren StringGrid Komponenten damals etwas den Überblick verloren. Inzwischen habe ich mir das Manual runtergeladen und bin doch von der Mächtigkeit etwas angetan. Habe die gut 200 Seiten zwar bisher nur überflogen. Aber auf lange Sicht scheint das eine Option zu sein.
Mir geht es hier aber auch ein wenig darum zu lernen wie man diesen verflixten InplaceEditor richtig anspricht. Ich verstehe solche Sachen ehrlich gesagt am Besten, wenn ich Code dazu habe; bin inzwischen etwas eingerostet und begreife an Hand der aufgezeigten Herangehensweise dann doch etwas schneller
@plusplus
Ganz klar ist mir noch nicht wie du das Edit ansprichst. Ich denke mal, daß du nicht so eine oben im Formular gelagerte Eingabezeile wie unter Excel meinst. Bohrst du dann das Create auf und schickst ein Destroy beim onExit los? Hast du da evtl. ein paar Zeilen Quelltext?
Ich habe gerade (relativ vergeblich) versucht mit einem eigenen (KlassenCracker-)StringGrid eine entsprechende Funktionalität zu erzeugen. Aber irgendwie brachte das auch nicht den gewünschten Erfolg. Zudem ist es auch ein kleines Monster geworden:
Delphi-Quellcode:
type
tTrickGrid = class;
tExitCellEvent = Procedure (Sender: tTrickGrid; aCol, aRow: Integer; const edittext: string) of object;
tTrickGrid = class (tStringGrid)
private
FExitCell : TExitCellEvent;
protected
Function CreateEditor: TInplaceEdit; override;
Procedure ExitCell (const edittext: String; aCol, aRow: Integer); virtual;
public
property InplaceEditor;
published
property OnExitCell: TExitCellEvent read FExitCell write FExitCell;
end;
TForm1 = class (TForm)
StringGrid1: TStringGrid;
procedure StringGrid1GetEditText(Sender: TObject; ACol, ARow: Integer;
var Value: string);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
type
tTrickInplaceEditor = class (tInplaceEdit)
private
FLastCol, FLastRow: Integer;
procedure WMKillFocus(var msg: TMessage); message WM_KILLFOCUS;
procedure WMSetFocus(var msg: TMessage); message WM_SETFOCUS;
public
end;
// ----------------------------------------------------------tTrickInplaceEditor
procedure tTrickInplaceEditor.WMKillFocus (Var msg: TMessage);
begin
tTrickGrid(Grid).ExitCell (Text, FLastCol, FLastRow);
inherited;
end;
procedure tTrickInplaceEditor.WMSetFocus (Var msg: TMessage);
begin
FLastCol := tTrickGrid (Grid).Col;
FLastRow := tTrickGrid (Grid).Row;
inherited;
end;
// -------------------------------------------------------------------tTrickGrid
Function tTrickGrid.CreateEditor: tInplaceEdit;
begin
result := tTrickInplaceEditor.Create (Self);
end;
procedure tTrickGrid.ExitCell (Const EditText: String; aCol, aRow: Integer);
begin
If Assigned (fExitCell) THen
Begin
fExitCell (Self, aCol, aRow, EditText);
fExitCell (Self, 0, 0, EditText);
end;
end;
// -------------------------------------------------------------------StringGrid
procedure TForm1.StringGrid1GetEditText(Sender: TObject; ACol, ARow: Integer;
var Value: string);
begin
// tTrickGrid (StringGrid1).SetEditText (aCol, aRow, Value);
// tTrickGrid (StringGrid1).CreateEditor;
end;
Vielleicht kann mir ja jemand hierbei noch einmal erklären, wie ich meinen Gedankengang sortieren müsste, damit so etwas funktioniert...
Beste Grüße
Jan