So....geschafft
Nicht schön oder einfach, aber es tut
Wie schon im Post davor, das gewünschte Control erzeugen.
Zusätzlich brauchen wir noch eine Callback-Funktion, die wir beim erzeugen des EditLinks übergeben:
Delphi-Quellcode:
INTERFACE
:
Type
TonBackDirekt = Procedure (sender:TObject;var Key:word;Shift:TShiftState;node:PVirtualNode;Column:TColumnindex) of Object;
TRepStringEditLink = Class(TInterfacedObject,IVTEditLink)
PRIVATE
:
:
fCall : TOnBackDirekt;
procedure EditDoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
PUBLIC
:
:
Constructor Create(editType:TdbRepType;CallBack:TonBackDirekt);
END;
IMPLEMENTATION
:
:
procedure TRepStringEditLink.EditDoKeyDown(Sender:TObject; var key: word; shift: TShiftState);
begin
if (fcall <> nil) AND (key = VK_TAB) then
fcall(sender,key,shift,fnode,fCol);
end;
Constructor TRepStringEditLink.Create(editType:TDbRepType;CallBack:TOnBackDirekt);
begin
inherited Create;
fType := editType;
fcall := CallBack;
end;
ftype/edittype sind hier nur die Kennungen für verschiedene Eingaben/Controls; Der Rest sollte hoffe ich soweit Klar sein.
Und hier nun die CallBack-Routine, die den Tab nun eigentlich erst behandelt:
Delphi-Quellcode:
procedure TfrmDataBases.HandleBack(sender: TObject; var Key: word;
Shift: TShiftState; node: PVirtualNode; Column: TColumnindex);
begin
//Prüfung ob der Sender und Key auch wirklich zulässig sind
if ((sender.ClassName = 'TMyEdit') and (key = VK_TAB)) then
begin
//aktuellen Edit beenden und ggf. Werte speichern;
//WICHTIG: Immer über EndEditNode beenden. EndEdit vom Editor aufrufen funktioniert nicht !
vst.EndEditNode;
//Nächste zulässige Spalte ermitteln
inc(column);
//Wenn die Spalte gültig ist, in den Editor-Modus springen
if (column >= 0) and (column < vst.Header.Columns.Count) then
vst.EditNode(node,Column);
end;
end;
Das ganze Vorgehen sollte auch mit den Pfeil-Tasten u.ä. funktionieren.