Nja, es ist nicht schwer, nur ist die
API etwas schrottig.
(hätte man z.b. ein OnShowEditor angeboten, wäre es etwas einfacher)
Da das InplaceEdit quasi ein TMaskEdit ist, kann man ihm, über TStringGrid.OnGetEditMask auch eine ganz normale Maske zuweisen.
Der offizielle Weg, für ein eigenes InplaceEdit:
Delphi-Quellcode:
type
TMyInplaceEdit = class(TInplaceEdit)
...
end;
TMyStringGrid = class(TStringGrid)
protected
function CreateEditor: TInplaceEdit; override;
end;
function TMyStringGrid.CreateEditor: TInplaceEdit;
begin
// kein inherited
Result := TMyInplaceEdit.Create(Self);
end;
Mein kleiner Hack:
Delphi-Quellcode:
type
THackedStringGrid =
class(TStringGrid)
end;
// was das ist, verrat ich nicht :P
THackedInplaceEdit =
class(TInplaceEdit)
end;
procedure TForm1.FormCreate(Sender: TObject);
var
O: TGridOptions;
M: Boolean;
begin
with THackedStringGrid(StringGrid1)
do begin
Handle;
// *grins*
O := Options;
M := EditorMode;
try
Options := Options + [goEditing, goAlwaysShowEditor] - [goRowSelect];
EditorMode := True;
InvalidateEditor;
// den InlaceEditor erstellen lassen
finally
EditorMode := M;
Options := O;
end;
with THackedInplaceEdit(InplaceEditor)
do begin
//
// Hier kann man alles tun, was man mit einem TEdit/TMaskEdit auch machen kann.
NumbersOnly := True;
//OnChange := MyEditOnChange;
//
end;
end;
end;