AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi VirtualTreeView Editfelder, ComboBox und andere
Thema durchsuchen
Ansicht
Themen-Optionen

VirtualTreeView Editfelder, ComboBox und andere

Ein Thema von Jens Hartmann · begonnen am 28. Mär 2016 · letzter Beitrag vom 1. Nov 2016
Antwort Antwort
Seite 5 von 5   « Erste     345   
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#41

AW: VirtualTreeView Editfelder, ComboBox und andere

  Alt 18. Apr 2016, 13:11
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
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#42

AW: VirtualTreeView Editfelder, ComboBox und andere

  Alt 18. Apr 2016, 20:31
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
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#43

AW: VirtualTreeView Editfelder, ComboBox und andere

  Alt 18. Apr 2016, 20:46
DevExpress bietet für .net und VCL entsprechende Komponenten an.
https://www.devexpress.com/Products/VCL/ExSpreadSheet/
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#44

AW: VirtualTreeView Editfelder, ComboBox und andere

  Alt 18. Apr 2016, 21:38
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
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.344 Beiträge
 
Delphi 11 Alexandria
 
#45

AW: VirtualTreeView Editfelder, ComboBox und andere

  Alt 19. Apr 2016, 08:48
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?
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#46

AW: VirtualTreeView Editfelder, ComboBox und andere

  Alt 19. Apr 2016, 09:28
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
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#47

AW: VirtualTreeView Editfelder, ComboBox und andere

  Alt 29. Okt 2016, 23:27
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.
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#48

AW: VirtualTreeView Editfelder, ComboBox und andere

  Alt 1. Nov 2016, 14:28
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.
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 5   « Erste     345   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz