![]() |
AW: VirtualTreeView Editfelder, ComboBox und andere
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo haentschman,
Danke für den Tip. Das ist auch meine aktuelle Lösung. Zwar nicht so hübsch wie bei Dir, aber siehe hierzu auch den Screenshot. Ich hätte es halt nur gerne anders gelöst, und dachte, dass das VST das können muss. Trotzdem danke. Ich denke, ich werde mein Formular ein wenig aufhübschen und es dann so realisieren. Gruß Jens |
AW: VirtualTreeView Editfelder, ComboBox und andere
Gern geschehen...8-)
Ich denke, das wichtigste an diesem Konstrukt ist die Unabhängigkeit vom "Parent" darunter. Wie man das dann gestaltet ist die Kür. :P |
AW: VirtualTreeView Editfelder, ComboBox und andere
Hallo haentschman,
wie Positionierst Du die Form auf dem VST. Ich habe das ganze wie folgt versucht, die Position passt aber nicht...
Delphi-Quellcode:
var
CellRect : TRect; Node : PVirtualNode; begin ... CellRect := vst.GetDisplayPosition(Node, Column, false); fForm2.Top := CellRect.Top; fForm2.Left := CellRect.Left; fForm2.ShowModal; end; |
AW: VirtualTreeView Editfelder, ComboBox und andere
Moin...:P
aktuell habe ich noch eine TAdvListview drunter. Die Umstellung auf VT steht auf der TodoListe. :wink: Vieleicht können dir die Brocken ein paar Ansätze liefern. :zwinker: 1. Positionierung Form
Delphi-Quellcode:
2. Im constructor bekommt der Editor(Form) den Parent mit:
class procedure TdTools.SetEditorPositions(ParentListView: TAdvListView; Editor: TForm);
var I: Integer; CurrentPoint: TPoint; CurrentTop: Integer; begin CurrentPoint:= ParentListview.ClientToScreen(Point(30,0)); // 30 = um erste Spalte eingerückt CurrentTop:= CurrentPoint.Y + ParentListview.Selected.Top; // beim Listview hat der selektierte Eintrag Top... VT ? if (CurrentTop + Editor.Height) > Screen.WorkAreaHeight then // klappt den Editor entweder nach unten oder nach oben wenn er nicht mehr auf den Screen paßt begin CurrentTop:= (CurrentTop + ParentListview.ItemHeight) - Editor.Height + 4; end; Editor.Top:= CurrentTop; Editor.Left:= CurrentPoint.X; Editor.Width:= 0; for I := 1 to ParentListView.Columns.Count -1 do begin Editor.Width:= Editor.Width + ParentListView.Column[I].Width; end; Editor.Width:= Editor.Width + conEditorOffsetWidth; // Offset = Feinjustierung für Liniendicke des Grids end;
Delphi-Quellcode:
3. Positionierung auf Spalten
constructor TfoInlineEditorProfiles.Create(Preferences: TdVAPreferences; Database: IdVA_Database; Profile: TProfile; ParentListview: TAdvListView);
begin inherited Create(nil); FLogic:= TInlineEditorProfile.Create(Preferences, Database, Profile); // die BL zum Form FLogic.OnGetProfileGroups:= DoOnGetProfileGroups; FLogic.OnGetParameters:= DoOnGetParameters; FLogic.GetData; pgrProfileProperties.ActivePageIndex:= 0; tvDevices.Width:= FLogic.Preferences.PositionsVA.SplitterEditorProfiles; TdTools.SetControlPosition(ParentListview, 1, True, edtProfileNameLong, daLeft); // Positionierung der 1. Reihe auf die Spalten TdTools.SetControlPosition(ParentListview, 2, True, cbbProfileGroup, daLeft); TdTools.SetControlPosition(ParentListview, 3, True, cbbBatchJob, daLeft); TdTools.SetControlPosition(ParentListview, 4, True, cbbVisualType, daLeft); TdTools.SetControlPosition(ParentListview, 5, True, cbbActive, daLeft); if FLogic.Preferences.PositionsVA.SplitterEditorProfiles > pnlDevices.Width then begin pnlDevices.Width:= FLogic.Preferences.PositionsVA.SplitterEditorProfiles; end else begin FLogic.Preferences.PositionsVA.SplitterEditorProfiles:= pnlDevices.Width; end; end;
Delphi-Quellcode:
class procedure TdTools.SetControlPosition(ParentListView: TAdvListView; ColumnIndex: Integer; SetWidth: Boolean; Control: TControl; Align: TdAlign);
var I: Integer; begin // Todo: Berücksichtigung wenn Control größer als Column Control.Left:= 0; for I := 1 to ColumnIndex do begin if I = 1 then begin Control.Left:= Control.Left; end else begin Control.Left:= Control.Left + ParentListView.Column[I - 1].Width; end; if (I = ColumnIndex) and not (ColumnIndex = 1) then begin Control.Left:= Control.Left - 1; end; end; if SetWidth then begin Control.Width:= ParentListView.Column[ColumnIndex].Width + 1; if Control is TAdvSmoothComboBox then begin TAdvSmoothComboBox(Control).DropDownWidth:= Control.Width; end; end; case Align of daLeft: Control.Left:= Control.Left; daRight: Control.Left:= Control.Left + (ParentListView.Column[ColumnIndex].Width - Control.Width); daCenter: Control.Left:= Control.Left + ((ParentListView.Column[ColumnIndex].Width - Control.Width) div 2); end; end; |
AW: VirtualTreeView Editfelder, ComboBox und andere
Zitat:
|
AW: VirtualTreeView Editfelder, ComboBox und andere
Zitat:
Aber leider bin ich was dass TAB und LEFT/RIGHT Thema angeht noch nicht wirklich weiter. |
AW: VirtualTreeView Editfelder, ComboBox und andere
Also so richtig weiter gekommen bin ich bislang noch. Noch jemand einen Vorschlag?
|
AW: VirtualTreeView Editfelder, ComboBox und andere
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
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:
So, ich hoffe das du damit was anfangen kannst. Solltest du hierzu noch Fragen haben, dann meld dich einfach nochmal.
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; [...] |
AW: VirtualTreeView Editfelder, ComboBox und andere
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:
bekomme ich eine Fehlermeldung.
ActiveControl
//z.B. wie bei Dir if (ActiveControl = vstMain) and (Ord(Key) = VK_TAB) then Key := #0; Die
Delphi-Quellcode:
befindet sich ja in der
property ActiveControl;
Delphi-Quellcode:
. 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
Delphi-Quellcode:
eingebunden.
vcl.Forms
|
AW: VirtualTreeView Editfelder, ComboBox und andere
ActiveControl ist eine Eigenschaft von TForm und funktioniert deshalb auch nur im Kontext des jeweiligen Formulars.
|
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