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 VST alle Hidden Rows wieder einblenden (https://www.delphipraxis.net/109911-vst-alle-hidden-rows-wieder-einblenden.html)

richard_boderich 10. Mär 2008 06:29


VST alle Hidden Rows wieder einblenden
 
Moin

Ich habe mit InterateSubtree mehrere Nodes ausgeblendet. Nun möchte ich diese wieder einblenden. Also er soll wieder alle Einträge
anzeigen. Ich könnte das ja über ein zweites Callback machen, jedoch scheint mir diese Vorgehensweise sehr aufwendig.
Gibt es eventuell eine Procedure oder Function die alle Einträge wieder anzeigt. Vst.showallnodes oder sowas. Ich habe schon versucht die Callback Procedure-Definition zu ändern um Nutzer-Variablen mitgeben zu können, die die Ausblendungskriterien im Callback steuern sollen, bin jedoch gescheitert.

Da ich nach einigen Kriterien Nodes ausblenden will, müsste ich ja für jeden Fall ein eigenes Callback samt Umkehrcallback definieren?

mfG Richard

Sharky 10. Mär 2008 06:39

Re: VST alle Hidden Rows wieder einblenden
 
Zitat:

Zitat von richard_boderich
... Ich habe schon versucht die Callback Procedure-Definition zu ändern um Nutzer-Variablen mitgeben zu können, die die Ausblendungskriterien im Callback steuern sollen, bin jedoch gescheitert. ...

Hai Richard,

der Callbackprocedure wird doch ein Pointer übergeben.
Delphi-Quellcode:
procedure HideNodes(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
Du kannst jetzt ja z.B. ein Integer in den Pointer casten und darüber die Auswertung machen.
Delphi-Quellcode:
  vst.BeginUpdate;
  try
    vst.IterateSubtree(NIL, HideNodes, Pointer(2), [], True);
  finally
    vst.EndUpdate;
  end;
Delphi-Quellcode:
procedure TFrm_Objektliste.HideNodes(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Data: Pointer; var Abort: Boolean);
begin
  if (Integer(Data) = 0) then // Alle Anzeigen
  begin
      Sender.IsVisible[node] := True;
  end;

  if (Integer(Data) = 2) then
  begin
    if (Irgendeinvergleich) then
    begin
      Sender.IsVisible[node] := False;
    end;
  end;
end;

richard_boderich 10. Mär 2008 06:58

Re: VST alle Hidden Rows wieder einblenden
 
Mensch Danke Sharky :)

Manchmal sieht man die einfachsten Lösungen nicht. Funktioniert alles bestens. Eine kleine Fragen sei noch gestattet.
Kannst du mir Sagen, welche Bedeutung der Filterparameter im InterateSubtree Funktionsaufruf hat?

mfG Richard

Sharky 10. Mär 2008 07:35

Re: VST alle Hidden Rows wieder einblenden
 
Zitat:

Zitat von richard_boderich
... welche Bedeutung der Filterparameter im InterateSubtree Funktionsaufruf hat? ...

Ein Blick in den Sourcecode sagt:

Delphi-Quellcode:
function TBaseVirtualTree.IterateSubtree(Node: PVirtualNode; Callback: TVTGetNodeProc; Data: Pointer;
  Filter: TVirtualNodeStates = []; DoInit: Boolean = False; ChildNodesOnly: Boolean = False): PVirtualNode;
Delphi-Quellcode:
  TVirtualNodeState = (
    vsInitialized,      // Set after the node has been initialized.
    vsChecking,         // Node's check state is changing, avoid propagation.
    vsCutOrCopy,        // Node is selected as cut or copy and paste source.
    vsDisabled,         // Set if node is disabled.
    vsDeleting,         // Set when the node is about to be freed.
    vsExpanded,         // Set if the node is expanded.
    vsHasChildren,      // Indicates the presence of child nodes without actually setting them.
    vsVisible,          // Indicate whether the node is visible or not (independant of the expand states of its parents).
    vsSelected,         // Set if the node is in the current selection.
    vsInitialUserData,  // Set if (via AddChild or InsertNode) initial user data has been set which requires OnFreeNode.
    vsAllChildrenHidden, // Set if vsHasChildren is set and no child node has the vsVisible flag set.
    vsClearing,         // A node's children are being deleted. Don't register structure change event.
    vsMultiline,        // Node text is wrapped at the cell boundaries instead of being shorted.
    vsHeightMeasured,   // Node height has been determined and does not need a recalculation.
    vsToggling          // Set when a node is expanded/collapsed to prevent recursive calls.
  );
  TVirtualNodeStates = set of TVirtualNodeState;
Man kann also angeben auf welche Nodes die Callbackfunktion angewendet wird.


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