![]() |
Sucheergebnisse zur Laufzeit in Popupmenu übertragen
hallo erstma,
mein problem ist folgendes : ich will einen bestimmten ordner nach (unter-)verzeichnissen und Dateien durchsuchen, die sollen dann zur laufzeit in ein popupmenu hinzugefügt werden. bisher hab ich das so realisiert :
Delphi-Quellcode:
Jetzt krieg ich das aber nur so hin, dass der Inhalt des Verzeichnisses in das Popupmenu übertragen wird, allerdings nicht die Unterverzeichnisse. Ich weiss auch nicht, wie ich die Unterverzeichnisse dann in Untermenüs des Popupmenus bekommen soll.i:=0; PopupMenu:=TPopupMenu.Create(Self); pfad := 'D:\irgendeinordner\*'; iattr := fadirectory; if FindFirst(pfad, iattr, sr) = 0 then begin repeat if (sr.Attr and iAttr) = sr.Attr then begin with PopupMenu do begin inc(i); if i > 2 then begin NeuesItem := TMenuItem.Create(PopupMenu); // Neuen Eintrag erzeugen Items.Add(neuesitem);// dem Popup-Menü hinzufügen NeuesItem.Tag:=i; NeuesItem.Caption := sr.Name; // onclick := PopupMenuItemsClick; end; end; end; until FindNext(sr) <> 0; end; FindClose(sr); Form1.PopupMenu := Popupmenu; end; Wäre für jede Hilfestellung dankbar !! Gruß |
Re: Sucheergebnisse zur Laufzeit in Popupmenu übertragen
Am besten durch Verschachtelung der Funktion:
Delphi-Quellcode:
procedure DirTreeToMenu(pfad : String; Parent : TMenuItem);
var i : integer; NeuesItem : TMenuItem; iattr : integer; sr : TSearchRec; begin NeuesItem := TMenuItem.Create(Parent); // Neuen Eintrag mit Pfadnamen erzeugen Parent.Add(neuesitem);// dem Popup-Menü hinzufügen NeuesItem.Tag:=0; NeuesItem.Caption := '"' + pfad + '"' + ' auswählen'; // NeuesItem.Enabled := false; NeuesItem := TMenuItem.Create(Parent); // Neuen Seperator erzeugen Parent.Add(neuesitem);// dem Popup-Menü hinzufügen NeuesItem.Tag:=0; NeuesItem.Caption := '-'; i:=0; iattr := fadirectory; if FindFirst(pfad + '\*.*', iattr, sr) = 0 then begin repeat if (sr.Attr and iAttr) = sr.Attr then begin inc(i); if i > 2 then begin NeuesItem := TMenuItem.Create(Parent); // Neuen Eintrag erzeugen Parent.Add(neuesitem);// dem Popup-Menü hinzufügen NeuesItem.Tag:=i; NeuesItem.Caption := sr.Name; DirTreeToMenu(pfad + '\' + sr.Name, NeuesItem); // Nach Unterordnern suchen // onclick := PopupMenuItemsClick; end; end; until FindNext(sr) <> 0; end; FindClose(sr); end;
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var PopupMenu:TPopupMenu; begin PopupMenu:=TPopupMenu.Create(Self); DirTreeToMenu('D:\source', PopupMenu.Items); // Suchanfrage starten, ohne * und ohne \ am Ende Form1.PopupMenu := Popupmenu; end; |
Re: Sucheergebnisse zur Laufzeit in Popupmenu übertragen
WOW funktionier super danke ! :thuimb: :thuimb:
wie kann ich jetzt noch zusätlich die dateien anzeigen ? meiner erfahrung nach zeigt er bei faanyfile nur noch dateien na und keine verzeichnisse mehr, genauso wie bei fadirectory + faanyfile ... ?!? vielen dank scp ! edit : hab jetzt einfach noch ne procedure FilestoMenu dazugemacht, scheint zu funzen :
Delphi-Quellcode:
blabla ...
DirTreeToMenu(pfad + '\' + sr.Name, NeuesItem); // Nach Unterordnern suchen FilesToMenu(pfad + '\' + sr.Name, NeuesItem); blabla ...
Delphi-Quellcode:
procedure FilesToMenu(pfad : String; Parent : TMenuItem); var i : integer; NeuesItem : TMenuItem; iattr : integer; sr : TSearchRec; begin NeuesItem := TMenuItem.Create(Parent); // Neuen Seperator erzeugen Parent.Add(neuesitem);// dem Popup-Menü hinzufügen NeuesItem.Tag:=0; NeuesItem.Caption := '-'; i:=0; iattr := faanyfile; if FindFirst(pfad + '\*.mp3', iattr, sr) = 0 then begin repeat if (sr.Attr and iAttr) = sr.Attr then begin inc(i); NeuesItem := TMenuItem.Create(Parent); // Neuen Eintrag erzeugen Parent.Add(neuesitem);// dem Popup-Menü hinzufügen NeuesItem.Caption := sr.Name; end; until FindNext(sr) <> 0; end; FindClose(sr); end; |
Re: Sucheergebnisse zur Laufzeit in Popupmenu übertragen
also, jez hab ich noch folgendes problem, und zwar die onlick-prozedur zur laufzeit.
das geht ja eigentlich so :
Delphi-Quellcode:
Wenn ich jez das so einer Prozedur zuweis, dann bekomme ich die Fehlermeldung des Compilers : Inkompatible Typen:'Methodenzeiger und reguläre Prozedur'
NeuesItem.OnClick := Prozedur;
Jemand ne Ahnung was ich falsch mach ? |
Re: Sucheergebnisse zur Laufzeit in Popupmenu übertragen
Die Prozedur muss von einem Object, also z.B. vom Form abstammen:
Delphi-Quellcode:
type
TForm1 = class(TForm) procedure MenuClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.MenuClick(Sender: TObject); begin {} end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:31 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 by Thomas Breitkreuz