![]() |
AW: VirtualTreeView Editfelder, ComboBox und andere
Hallo nochmal zusammen,
also das mit dem "Links" / "Rechts" habe ich jetzt soweit hinbekommen. Das ganze funktioniert auch meiner Auffassung nach sehr gut. Ich werde (wenn ich in den nächsten Tagen Zeit finden) mal ein Musterprojekt zusammenstellen. Was ich jedoch gerne vorher noch umsetzte würde, ist das Thema mit der TAB Taste. Ich komme hier allerdings absolute nicht weiter. Eingebunde habe ich das ganze aktuell wie folgt...
Delphi-Quellcode:
//Der Editor der vom BaseEditor abgeleitet ist. Als, das eigenliche Control
type TTxtEditLink = class(TEditEditLink) private procedure WMGetDlgCode(var Message: TWMGetDlgCode); message WM_GETDLGCODE; protected procedure EditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); override; procedure GetNodeText; override; procedure SaveChanges; override; end; //Die eingebunden Methode "WMGetDlgCode..." procedure TTxtEditLink.WMGetDlgCode(var Message: TWMGetDlgCode); begin Inherited; Message.Result := Message.Result or DLGC_WANTTAB; end; //Und die Methode "EditKeyDown..." als ...override procedure TTxtEditLink.EditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin inherited; if Key = VK_TAB then ShowMessage('VK_TAB'); end; |
AW: VirtualTreeView Editfelder, ComboBox und andere
Mal noch so ein Frage...
Also ich verzweifel jetzt schon wieder den ganzen Abend... Gibt es eine Grid/ListView Komponente, die theoretisch so aufgebaut ist wie Excel. Kann auc Geld kosten... Nur mal so als alternative. Irgendwie finde ich den VST echt umständlich was die Editoren angeht... Gruß Jens |
AW: VirtualTreeView Editfelder, ComboBox und andere
DevExpress bietet für .net und VCL entsprechende Komponenten an.
![]() |
AW: VirtualTreeView Editfelder, ComboBox und andere
Gut, übersteigt wahrscheinlich bei weitem meine gewünschte Funktionalität. Vieleicht nochmal anders beschrieben, ich benötige ein Grid/ListView welches die Bedienung wie Excel erlaubt. Soll heißen, Tastenkombinationen, Copy and Paste etc. Selektieren, markieren, übertragen...
Was ist denn mit dem Grid Set von tms Software ![]() |
AW: VirtualTreeView Editfelder, ComboBox und andere
Ich wollte es mir anschauen, habe aber keine Zeit mir selbst ein Projekt zusammenzubauen aus den aktuellen Codeschnippseln. Hast du vielleicht noch einmal ein kleines Testprojekt, das ich einfach starten kann um das zu debuggen?
|
AW: VirtualTreeView Editfelder, ComboBox und andere
Aktuell nur das, welches Du unter #14 findest. Dies entspricht aber nicht mehr dem aktuellen Stand. Ich versuche heute Abend / eher im laufe der Woche mal ein Projekt mit dem aktuellen Stand zusammen zustellen. Grundlegend sind jetzt folgenden Funktionen/Tasten augenscheinlich i.O.
Zitat:
|
AW: VirtualTreeView Editfelder, ComboBox und andere
Auch wenn der Thread schon was älter ist, stand ich auch grad vor dem Problem.
Nach langem Grübeln, studieren und suchen bin ich drauf gekommen, das das Problem mit TAB,Arrows usw, eigentlich garnicht am VST liegt, sondern an den Eingabe-Controls. Ein TEdit kann halt nix mit TAB anfangen :) Also verfolge ich grad folgenden Lösungs-Ansatz:
Delphi-Quellcode:
Dann im Editor statt TEdit, TMyEdit benutzen und einen Event-Handler für KeyDown des Edit-Felds
INTERFACE
TYPE TMyEdit = class(TEdit) PRIVATE procedure WMGetDlgCode(var Message: TWMGetDlgCode); message WM_GETDLGCODE; end; IMPLEMENTATION procedure TMyEdit.WMGetDlgCode(var Message: TWMGetDlgCode); begin Message.Result := DLGC_WANTCHARS or DLGC_WANTARROWS or DLGC_WANTTAB; end; reinhängen und schon kannst du die entprechenden Aktionen ausführen :) Fehlt also eigentlich nur das weiterswitchen auf die nächste Column oder das beenden des Edit-Modes. |
AW: VirtualTreeView Editfelder, ComboBox und andere
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:
ftype/edittype sind hier nur die Kennungen für verschiedene Eingaben/Controls; Der Rest sollte hoffe ich soweit Klar sein. :)
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; Und hier nun die CallBack-Routine, die den Tab nun eigentlich erst behandelt:
Delphi-Quellcode:
Das ganze Vorgehen sollte auch mit den Pfeil-Tasten u.ä. funktionieren. :)
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz