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