Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Dialog, um Verzeichnis zu wählen


GuaAck - Sa 23.04.11 23:07
Titel: Dialog, um Verzeichnis zu wählen
Hallo,

mein Programm soll eine Datei speichern. Der Name steht fest, aber der Benuztzer soll das Verzeichnis wählen können. Mit TOpenDialog muss man aber wohl zwingend eine Datei anwählen, oder habe ich einen Schalter übersehen?

Ich behelfe mich jetzt vorläufig so, dass man eine beliebige Datei anwählen muss, und nehme dann per extractfilepath das, was ich brauche. Ist aber keine schöne Lösung.

Grüße
Günther


bummi - Sa 23.04.11 23:58

FileCtrl.SelectDirectory


ALF - So 24.04.11 10:30

user profile iconGuaAck hat folgendes geschrieben Zum zitierten Posting springen:
mein Programm soll eine Datei speichern. Der Name steht fest, aber der Benuztzer soll das Verzeichnis wählen können. Mit TOpenDialog muss man aber wohl....


ähmm.. nimmt man da nicht TSaveDialog?


Delete - So 24.04.11 11:44

Wenn der Name vorgegeben ist, dann braucht er doch nur den Ordner auswählen lassen.


ALF - So 24.04.11 12:01

Jo richtig, als Standard einrichten den 'Arbeitsplatz', falls man das Lw wechseln möchte/muss. :wink:

[OT]Persöhnlich komm ich damit irgendwie nicht klar, fehlt immer was (Verzeichniss erstellen) :lol: [/OT]

Gruss Alf


jaenicke - So 24.04.11 12:14

user profile iconALF hat folgendes geschrieben Zum zitierten Posting springen:
Jo richtig, als Standard einrichten den 'Arbeitsplatz', falls man das Lw wechseln möchte/muss. :wink:
Wie meinst du das? :gruebel:

Im Anhang einmal ein Beispiel wie der Dialog direkt nach der Anzeige aussieht, wenn das Startverzeichnis c:\program files (x86)\cnpack ist...
Da kann man dann natürlich das Verzeichnis des eigenen Programms oder den Ordner Eigene Dateien stattdessen zuerst auswählen, je nach Anwendungszweck.


ALF - So 24.04.11 12:46

@jaenicke
So schön sieht er unter D7 WinXp nicht aus :wink:
(meinte ja nur mit 'Arbeitsplatz', so hab ich es immer bei mir eingerichtet)
und es fehlt halt neues Verzeichnis erstellen.

user profile iconGuaAck hat folgendes geschrieben Zum zitierten Posting springen:
aber der Benuztzer soll das Verzeichnis wählen können.

Der nächste Wunsch ist, 'möchte aber noch ein Verzeichnis erstellen können' im Dialog, ist meistens so.

Gruss Alf


jaenicke - So 24.04.11 13:12

user profile iconALF hat folgendes geschrieben Zum zitierten Posting springen:
Der nächste Wunsch ist, 'möchte aber noch ein Verzeichnis erstellen können' im Dialog, ist meistens so.
Dann aktiviert man die Funktion eben auch noch, und? :nixweiss:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
var
  Test: string;
begin
  Test := 'C:\Program Files (x86)\CnPack';
  if SelectDirectory('Zielverzeichnis wählen...''', Test, [sdShowEdit, sdNewFolder, sdShowShares, sdNewUI]) then
    ShowMessage(Test);


ALF - So 24.04.11 13:38

komischerweise zickt er in D7 rum!
Auszug aus der D7 Hilfe.

Quelltext
1:
2:
3:
4:
5:
6:
function SelectDirectory(var Directory: string; Options: TSelectDirOpts; HelpCtx: Longint): Boolean;


type
  TSelectDirOpt = (sdAllowCreate, sdPerformCreate, sdPrompt);
  TSelectDirOpts = set of TSelectDirOpt;


Darum hab ich es nie verwendet! besser gesagt bin nie klar gekommen :cry:

Ist aber OT ;)

Gruss Alf


jaenicke - So 24.04.11 13:55

Naja, gut, Delphi 7 unterstützt dann die ganzen Optionen der API-Funktion noch nicht. Da bleibt dann nur die selbst zu nutzen. :lol:

// EDIT:
Aber da gibts ja auch was hier in der Library.

Und nebenbei aus XE:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  TSelectDirExtOpt = (sdNewFolder, sdShowEdit, sdShowShares, sdNewUI, sdShowFiles,
    sdValidateDir);
  TSelectDirExtOpts = set of TSelectDirExtOpt;

function SelectDirectory(const Caption: stringconst Root: WideString;
  var Directory: string; Options: TSelectDirExtOpts = [sdNewUI]; Parent: TWinControl = nil): Boolean; overload;
Die Optionen bieten also die Auswahl, ob ein neuer Ordner angelegt werden kann, das Editfeld zur manuellen Eingabe da ist, Netzwerkfreigaben angezeigt werden, die neue Oberfläche benutzt werden soll, auch Dateien zu sehen sein sollen und es gibt die Möglichkeit eine Eingabe im Editfeld über ein Callback zu validieren.