AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Sucheergebnisse zur Laufzeit in Popupmenu übertragen
Thema durchsuchen
Ansicht
Themen-Optionen

Sucheergebnisse zur Laufzeit in Popupmenu übertragen

Ein Thema von Zackebarsch · begonnen am 25. Nov 2003 · letzter Beitrag vom 27. Nov 2003
Antwort Antwort
Zackebarsch

Registriert seit: 25. Nov 2003
7 Beiträge
 
#1

Sucheergebnisse zur Laufzeit in Popupmenu übertragen

  Alt 25. Nov 2003, 16:51
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ß
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#2

Re: Sucheergebnisse zur Laufzeit in Popupmenu übertragen

  Alt 25. Nov 2003, 23:56
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;
  Mit Zitat antworten Zitat
Zackebarsch

Registriert seit: 25. Nov 2003
7 Beiträge
 
#3

Re: Sucheergebnisse zur Laufzeit in Popupmenu übertragen

  Alt 26. Nov 2003, 17:42
WOW funktionier super danke !
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;
  Mit Zitat antworten Zitat
Zackebarsch

Registriert seit: 25. Nov 2003
7 Beiträge
 
#4

Re: Sucheergebnisse zur Laufzeit in Popupmenu übertragen

  Alt 27. Nov 2003, 17:08
also, jez hab ich noch folgendes problem, und zwar die onlick-prozedur zur laufzeit.
das geht ja eigentlich so :
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 ?
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#5

Re: Sucheergebnisse zur Laufzeit in Popupmenu übertragen

  Alt 27. Nov 2003, 19:13
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;
  Mit Zitat antworten Zitat
Antwort Antwort


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