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 Sucheergebnisse zur Laufzeit in Popupmenu übertragen (https://www.delphipraxis.net/12343-sucheergebnisse-zur-laufzeit-popupmenu-uebertragen.html)

Zackebarsch 25. Nov 2003 16:51


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

Wäre für jede Hilfestellung dankbar !!
Gruß

scp 25. Nov 2003 23:56

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;

Zackebarsch 26. Nov 2003 17:42

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;

Zackebarsch 27. Nov 2003 17:08

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:
NeuesItem.OnClick := Prozedur;
Wenn ich jez das so einer Prozedur zuweis, dann bekomme ich die Fehlermeldung des Compilers : Inkompatible Typen:'Methodenzeiger und reguläre Prozedur'

Jemand ne Ahnung was ich falsch mach ?

scp 27. Nov 2003 19:13

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 21:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz