Windows Explorer är det du använder i Windows-operativsystemet för att söka efter filer och mappar. Du kan skapa en liknande struktur med Delphi så att samma innehåll fylls i programmets användargränssnitt.
Vanliga dialogrutor används i Delphi till öppna och spara en fil i ett program. Om du vill använda anpassade filhanterare och katalogsökande dialogrutor måste du ta itu med Delphi-komponenter i filsystemet.
Palettgruppen Win 3.1 VCL innehåller flera komponenter som låter dig bygga din egen "File Open" eller "File Save" -dialogrutan: TFileListBox, TDirectoryListBox, TDriveComboBox, och TFilterComboBox.
Navigera filer
Filsystemets komponenter tillåter oss att välja en enhet, se den hierarkiska katalogstrukturen på en disk och se namnen på filerna i en given katalog. Alla filsystemkomponenter är utformade för att fungera tillsammans.
Till exempel kontrollerar din kod vad användaren har gjort för att säga en DriveComboBox och överför sedan denna information till en DirectoryListBox. Ändringarna i DirectoryListBox överförs sedan till en FileListBox där användaren kan välja den eller de filer som behövs.
Utforma dialogformuläret
Börja på nytt Delphi-ansökan och välj fliken Win 3.1 i Komponentpalett. Gör sedan följande:
- Placera en TFileListBox-, TDirectoryListBox-, TDriveComboBox- och TFilterComboBox-komponent på ett formulär med alla standardnamn.
- Lägg till en TEdit (med namnet "FileNameEdit") och en TLabel (kalla det "DirLabel").
- Inkludera några etiketter med bildtexter, som "Filnamn", "Katalog", "Lista filer av typ" och "Enheter."
För att visa den för närvarande valda sökvägen som en sträng i en rubriktitel för DirLabel-komponenter tilldelar du etikettens namn till DirectoryListBox: s DirLabel-egendom.
Om du vill visa det valda filnamnet i en EditBox (FileNameEdit) måste du tilldela Edit Object-namnet (FileNameEdit) till FileListBox's FileEdit-egenskap.
Fler koder
När du har alla filsystemkomponenter på formuläret måste du bara ställa in DirectoryListBox. Drive-egenskapen och FileListBox. Katalogegenskap för att komponenterna ska kommunicera och visa vad användaren vill se.
När användaren till exempel väljer en ny enhet aktiverar Delphi DriveComboBox OnChange händelsehanterare. Få det att se ut så här:
procedur TForm1.DriveComboBox1Change (avsändare: TObject);
beginDirectoryListBox1.Drive: = DriveComboBox1.Drive;
slutet;
Den här koden ändrar displayen i DirectoryListBox genom att aktivera dess OnChange händelsehanterare:
procedur TForm1.DirectoryListBox1Change (avsändare: TObject);
beginFileListBox1.Directory: = DirectoryListBox1.Directory;
slutet;
För att se vilken fil användaren har valt måste du använda OnDblClick händelse av FileListBox:
procedur TForm1.FileListBox1DblClick (avsändare: TObject);
beginShowmessage ('vald:' + FileListBox1.FileName);
slutet;
Kom ihåg att Windows-konventionen är att låta dubbelklicka välja filen, inte ett enda klick. Detta är viktigt när du arbetar med en FileListBox, eftersom du använder en piltangent för att flytta igenom en FileListBox skulle ringa alla OnClick-hanterare som du har skrivit.
Filtrera skärmen
Använd en FilterComboBox för att kontrollera filtypen som visas i en FileListBox. När du har ställt in FileCist-egenskapen FilterComboBox till namnet på en FileListBox, ställer du in egenskapen Filter till de filtyper som du vill visa.
Här är ett exempelfilter:
FilterComboBox1.Filter: = 'Alla filer (*. *) | *. * | Projektfiler (* .dpr) | * .dpr | Pascal-enheter (* .pas) | * .pas ';
Tips och tips
Ställa in DirectoryListBox. Drive-egenskapen och FileListBox. Katalogegenskap (i tidigare skrivna OnChange-händelseshanterare) vid körning kan också göras vid designtid. Du kan uppnå denna typ av anslutning vid designtid genom att ställa in följande egenskaper (från Objektinspektören):
DriveComboBox1.DirList: = DirectoryListBox1
DirectoryListBox1.FileList: = FileListBox1
Användare kan välja flera filer i en FileListBox om egenskapen MultiSelect är sann. Följande kod visar hur man skapar en lista med flera val i en FileListBox och visar den i en SimpleListBox (någon "vanlig" ListBox-kontroll).
var k: heltal; ...
med FileListBox1 gör
om SelCount> 0 då
för k: = 0 till artiklar. Count-1 do
om vald [k] då
SimpleListBox. Poster. Lägg till (Artiklar [k]);
För att visa hela sökvägsnamn som inte är förkortade med en ellips, tilldelar du inte ett Label-objektnamn till egenskapen DirLabel i en DirectoryListBox. Istället sätter du in en etikett i ett formulär och ställer in dess bildtextegenskap i DirectoryListBox OnChange-händelse till DirectoryListBox. Katalogegendom.