AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

TreeView / TreeNode filtern

Ein Thema von Delbor · begonnen am 1. Mär 2020
Antwort Antwort
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
876 Beiträge
 
Delphi 10.3 Rio
 
#1

TreeView / TreeNode filtern

  Alt 1. Mär 2020, 21:48
Delphi-Version: 10.3 Rio
Hi zusammen
Wiedermal ist mein TOpenFileFrame mit im Spiel. Dessen Container besitzt eine Combobox, um Filter auszuwählen (BMP etc).
Grundsätzlich wird dieser Filter schon berücksichtigt, wenn die Nodes in der Prozedur AddNewNode das erste mal erstellt werden. Hier das Codeschnipsel, das dies tun sollte: (nur, wenn Node.HasChilds False ist):
Delphi-Quellcode:
  Node.Enabled := False; // Datefilter (Dateiendung) festgestellt. Wenn nein,
  Lextension := ExtractFileExt(aRealName);
  if SameText(FFileType,Lextension) then
    Node.Enabled := True;
  if (FFileType = 'alle Dateien') then
    Node.Enabled := true;
So siehts aus, nachdem ich den Parentnode das erste Mal geöffnet habe:

embarcadero-images-alle-dateien.jpg
Eigentlich sollten die Datei-Nodes Enabled dargestellt werden - ich vermute hier einen Initialisierungsfehler. habe aber vorerst keine Idee, an was dies liegen könnte.
Ein weiteres Problem zeigt sich bei MausDown:
embarcadero-images-bmp.jpg
Hier habe ich über die FilterCombo einen neuen Filter gewählt und einen weiteren Node (das erste mal) geöffnet - hier sind die Datei-Nodes nun enabled dargestellt.

Schliesse ich nun den Ordner 'Backgrnd' aus dem ersten Jpeg und öffne ihn wieder, wird der erste Dateinode korrekt Enabled (schwarz) dargestellt, alle andern sind weiterhin disabled.

Der Code, der dies tut:
Delphi-Quellcode:
procedure TOpenFileFrame.TVFilesExplorerMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  var AnItem, AnChild : TTreeNode; P: TPoint; I: integer;
      LRealName, Lextension : String;
begin
  if Button =(mbLeft) then
  begin
    AnItem := TVFilesExplorer.GetNodeAt(X, Y);
    if AnItem.HasChildren then
    begin
      For I := 0 to AnItem.Count -1 do
      begin
        if i = 0 then
          AnChild := AnItem.getFirstChild
        else
          AnChild := AnItem.getNextSibling;
        LRealName := PNameRec(AnChild.Data)^.RealName;
        AnChild.Enabled := False;
        Lextension := ExtractFileExt(LRealName);
        if SameText(FFileType,Lextension) then
          AnChild.Enabled := True;
        if (FFileType = 'alle Dateien') then
          AnChild.Enabled := true;
        end;
      end;
  end;
  if Button =(mbRight) then
  begin
    ...
    ...
  end;
end;
Ursprünglich hatte ich die ersten Zeilen der Schleife so, habe dies aber anhand dieses Scnipsels angepasst:
Delphi-Quellcode:
  if i = 0 then
    AnChild := AnItem.getFirstChild
  else
    AnChild := AnItem.GetNext;
  end;
Was mache ich sonst noch falsch?

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch

Geändert von Delbor ( 2. Mär 2020 um 11:14 Uhr) Grund: Titel angepasst
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 10:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf