Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi VirtualStringTree Descendants (https://www.delphipraxis.net/138700-virtualstringtree-descendants.html)

stOrM 15. Aug 2009 17:38


VirtualStringTree Descendants
 
Hi,
ich stehe gerade vor dem Problem, daß ich innerhalb des VST's (Cellrect) diverse Controls benötige (TProgressbar, TCombobox, TButton usw)
Die Editoren sind da für mich gerade nicht praktikabel weil die ja nur erscheinen wenn editiert wird ich muss die Sachen aber immer sichtbar haben, oder gibt es dafür eine andere Möglichkeit?

Das ganze hab ich zur Zeit so gelöst das ich im AfterCellpaint die ganzen Controls ins CellRect verschiebe, wobei sich dann da die Frage gestellt hat, ob man nicht lieber einen Descendant des VST's schreibt der dem User die Arbeit abnimmt?
Dort könnte man vielleicht ein paar Proceduren in der art aufbauen das der User dann nur noch folgendes aufruft:

Delphi-Quellcode:
  Vst.AddProgress(ColumIdx : TColumnIndex);
  Vst.AddButton(ColumIdx : TColumnIndex; DefaultImgIdx : Integer; HotImgIdx: Integer; DownImgIdx: Integer; DisabledImgIdx : Integer);
Delphi-Quellcode:
type
  PItemData = ^TItemData;
  TItemData = record
    Version : string;
    ButtonCheckout,
    ButtonUpdate : TJvImgBtn;
    Progress : TProgressBar;
  end;
Eins der größten Probleme wäre dazu auch noch folgendes, ich muß ja erkennen wo sich die Maus gerade befindet, soll heißen, wenn ich 2 Buttons nutze wie oben aus dem Record ersichtlich, wie erkenne ich welchen Button der User geklickt hat oder welcher Button gerade OnMouseOver / Leave ausgelöst hat. Daher dachte ich halt ggf. besser nen Descendant zu bauen?

Nur wie kann ich die Controls dem Descendant zur Verfügung stellen?

Vielleicht kann mmir jemand kurz erklären wie man die ganzen Controls in so einem Decendant dann richtig verwaltet respektive die Ereignisse: OnMouseLeave/Enter Click abfragt, damit z.b. der ImageIndex der Buttons geändert werden könnte?

Gruß,
s!

anse 15. Aug 2009 20:01

Re: VirtualStringTree Descendants
 
Falls du den Code weitergeben willst wäre ein Descendant hübscher, da du deinen Code vom "User-Code" schön abkapseln kannst. Ansonsten, wenn du es nicht weitergibst, hört sich ein Descendant eher an wie Kanonen auf Spatzen schießen. Aber wenn dir das viel Code einspart oder kapselt, kann das trotzdem sinnvoll sein.

Was ich nicht verstehe: Stehen in jeder Node-Zelle irgendwelche Controls oder nur in der FocusedNode bzw. einer bestimmten Zelle oder in allen Zellen einer Spalte?

stOrM 15. Aug 2009 20:07

Re: VirtualStringTree Descendants
 
Ja Code wird öffentlich sein.
Es kann in jeder Node ein Control auftauchen Ja.

mkinzler 15. Aug 2009 20:11

Re: VirtualStringTree Descendants
 
Dann drängt sich die abgeleitete Komponente ja förmlich auf

stOrM 15. Aug 2009 20:20

Re: VirtualStringTree Descendants
 
Seh ich ganz genauso ich brauch nur mal nen Startpunkt irgendwie, wie ich die Controls in den Vst Descendant route usw...
So das der user später wie gesagt die benötigten Funktionen aufrufen kann da blick ich grad ned durch

anse 15. Aug 2009 20:40

Re: VirtualStringTree Descendants
 
Vorschlag, Idee:

Delphi-Quellcode:
uses Contnrs;

...

function TMyVST.AddProgressBarToCell(Sender: TMyVST; Node: PVirtualNode; Column: TColumnIndex): TProgressBar;
begin
  Result := TProgressBar.Create;
  ...
  GetTextInfo(Node, Column, f, CellRect, Text);
  Result.BoundsRect := CellRect;
end;

procedure TMyVST.AddProgressBarsToColumn(Sender: TMyVST; Column: TColumnIndex): TObjectList;
var
  List: TObjectList;
  Node: PVirtualNode;
begin
  List := TObjectList.Create;
  Node := Sender.GetFirst;
  while Assigned(Node) do begin
    List.Add(AddProgressBarToCell(Sender, Node, Column));
    Node := Sender.GetNextSibling(Node);
  end;
end;

stOrM 15. Aug 2009 20:51

Re: VirtualStringTree Descendants
 
Ah ok verstehe, das sollte erstmal reichen vielen dank, werds morgen mal testen!

Gruss
Marc

semo 23. Nov 2009 19:00

Re: VirtualStringTree Descendants
 
Und wie weit bist du gekommen?
Ich bin auch gerade am recherchieren wie man sowas am besten umsetzt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18: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