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
Benutzerbild von Jens Hartmann
Jens Hartmann

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

AW: VirtualTreeView Editfelder, ComboBox und andere

  Alt 7. Apr 2016, 22:08
Also so richtig weiter gekommen bin ich bislang noch. Noch jemand einen Vorschlag?
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: VirtualTreeView Editfelder, ComboBox und andere

  Alt 8. Apr 2016, 18:49
Also so richtig weiter gekommen bin ich bislang noch. Noch jemand einen Vorschlag?
Also ich habe da jetzt mal was zusammengebastelt und hoffe, dass es dir weiter hilft. Im Prinzip ist das jetzt ein Konstrukt, dass du für alles immer wieder verwenden könntest wenn du willst. Speziell in diesem Programm habe ich die Funktion mit Pfeiltaste hoch, runter, links und rechts implementiert. Auch Enter führt dazu, dass die nächste Node unterhalb der aktuellen ausgewählt und direkt editiert wird. Die Sache mit der Tab-Taste habe ich nur beim ersten Mal beachtet da dies einfach nur ein(e) Haken/Property beim VirtualStringTree ist (WantsTabs). Sobald diese Property auf True steht, wird allerdings nur eine Message abgefangen und entsprechen "modifiziert". Das könnte man dan dementsprechend in den abgeleiteten Editorklassen einbauen. War ich jetzt aber zu faul zu.

Das hier ist die Methode die bewirkt, dass beim Drücken der Tab-Taste die Komponente nicht verlassen wird. Das kann man dann ja analog dazu in seiner eigenen Editorklasse auch machen und stattdessen in die nächste Column springen.
Delphi-Quellcode:
interface
[...]
  procedure WMGetDlgCode(var Message: TWMGetDlgCode); message WM_GETDLGCODE;
[...]
implementation
[...]
procedure TBaseVirtualTree.WMGetDlgCode(var Message: TWMGetDlgCode);

begin
  Message.Result := DLGC_WANTCHARS or DLGC_WANTARROWS;
  if FWantTabs then
    Message.Result := Message.Result or DLGC_WANTTAB;
end;

[...]
So, ich hoffe das du damit was anfangen kannst. Solltest du hierzu noch Fragen haben, dann meld dich einfach nochmal.
Angehängte Dateien
Dateityp: 7z VSTEditorSample.7z (64,2 KB, 41x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

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

AW: VirtualTreeView Editfelder, ComboBox und andere

  Alt 9. Apr 2016, 20:00
Hallo Aviator,

ich spiele gerade ein wenig meiner Deiner Version. Das meiste davon habe ich ja bereits auch schon so gelöst. Allerdings bekomme ich z.B. wenn ich auf

Delphi-Quellcode:
ActiveControl

//z.B. wie bei Dir
  if (ActiveControl = vstMain) and (Ord(Key) = VK_TAB) then
    Key := #0;
bekomme ich eine Fehlermeldung.

Die property ActiveControl; befindet sich ja in der vcl.Forms . Doch auf diese habe ich scheinbar aus meiner eigenen Unit kein Zugriff. Ich habe den Editor in eine eigene Unit gelegt und dort die vcl.Forms eingebunden.
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.930 Beiträge
 
Delphi 12 Athens
 
#4

AW: VirtualTreeView Editfelder, ComboBox und andere

  Alt 9. Apr 2016, 21:05
ActiveControl ist eine Eigenschaft von TForm und funktioniert deshalb auch nur im Kontext des jeweiligen Formulars.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: VirtualTreeView Editfelder, ComboBox und andere

  Alt 10. Apr 2016, 11:04
ActiveControl ist eine Eigenschaft von TForm und funktioniert deshalb auch nur im Kontext des jeweiligen Formulars.
Korrekt. Und in dem Fall müsstest du dann die Form an deine Editorklasse übergeben und könntest dann wieder darauf prüfen. Nur kannst du dann immer nur auf die Klasse der Komponente prüfen und nicht direkt auf die Komponente da du ja sonst noch Zugriff auf deine Formklasse aus der Editorklasse bräuchtest.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

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

AW: VirtualTreeView Editfelder, ComboBox und andere

  Alt 10. Apr 2016, 14:07
Das habe ich jetzt auch schon so hinbekommen. Ich habe jetzt Deine Editorklasse bei mir integriert und angepasst. Ich kann jetzt komplett navigieren wie gewünscht. Aber das mit dem TAB bekomme ich nicht hin.

Starte ich mein Programm ohne

Delphi-Quellcode:
procedure TfKabellisten.vstKabelInEditing(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndex; var Allowed: Boolean);
begin
  //Allowed := true;
end;
Dann geht das navigieren auch mit der TAB Taste. Anders nicht. Ich habe jetzt versucht meine Klasse zu erweitern um die TAB Taste abzufangen.

Delphi-Quellcode:
  ...
  TEditEditLink = class abstract(TBaseDataEditLink)
  private
    procedure WMGetDlgCode(var Message: TWMGetDlgCode); message WM_GETDLGCODE;
  ...

procedure TEditEditLink.WMGetDlgCode(var Message: TWMGetDlgCode);
begin
  Inherited;
    Message.Result := Message.Result or DLGC_WANTTAB;
end;
Aber ich bin auch ehrlich, die Funktion verstehe ich absolut nicht. Und im
Delphi-Quellcode:
OnKeyDown,
OnKeyUp
OnKeyPress
Kann man die TAB Taste nicht abfangen. Entnehme ich zumindestens der Delphi Hilfe...

Delphi-Quellcode:
  case Key of
    VK_TAB:
      begin
        //geht so nicht
      end;
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.930 Beiträge
 
Delphi 12 Athens
 
#7

AW: VirtualTreeView Editfelder, ComboBox und andere

  Alt 11. Apr 2016, 07:30
Aber ich bin auch ehrlich, die Funktion verstehe ich absolut nicht.
[...]
Und im
Delphi-Quellcode:
OnKeyDown,
OnKeyUp
OnKeyPress
Kann man die TAB Taste nicht abfangen.
Hast du denn einmal in die Doku geschaut? Da ist das eigentlich sehr gut beschrieben:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms645425(v=vs.85).aspx
Wenn du die Tab Taste selber behandeln willst, musst du in dem Control, das die entsprechenden Messages bekommt, WM_GETDLGCODE entsprechend des bereits geposteten Codes implementieren. Damit sagst du Windows, dass es die Standardbehandlung für Tab (zum nächsten Steuerelement springen) nicht ausführen und stattdessen die Messages zur Behandlung des Tastendrucks schicken soll.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Antwort Antwort


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 13:47 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