Delphi-PRAXiS
Seite 5 von 5   « Erste     345   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi VirtualTreeView Editfelder, ComboBox und andere (https://www.delphipraxis.net/188689-virtualtreeview-editfelder-combobox-und-andere.html)

Jens Hartmann 18. Apr 2016 13:11

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;

Jens Hartmann 18. Apr 2016 20:31

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

stahli 18. Apr 2016 20:46

AW: VirtualTreeView Editfelder, ComboBox und andere
 
DevExpress bietet für .net und VCL entsprechende Komponenten an.
https://www.devexpress.com/Products/VCL/ExSpreadSheet/

Jens Hartmann 18. Apr 2016 21:38

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

https://www.tmssoftware.com/site/gridpack.asp

jaenicke 19. Apr 2016 08:48

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?

Jens Hartmann 19. Apr 2016 09:28

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:

VK_ENTER = NextNode
VK_ENTER/Shift = PriorNode
VK_DOWN = NextNode
VK_UP = PriorNode
VK_LEFT = PriorColumn
VK_RIGHT = NextColumn
Strg+C/V/X in Column X "kopiert"/"fügt ein"/"schneidet aus" - "die Zelle"
Strg+C/V/X bei FullRowSelect "kopiert"/"fügt ein"/"schneidet aus" - "die gesamte Zeile"
Gruß Jens

Ghostwalker 29. Okt 2016 23:27

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:
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;
Dann im Editor statt TEdit, TMyEdit benutzen und einen Event-Handler für KeyDown des Edit-Felds
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.

Ghostwalker 1. Nov 2016 14:28

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:
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. :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:37 Uhr.
Seite 5 von 5   « Erste     345   

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