Hi zusammen
Zur Zeit arbeite ich an einer Einstellungsseite. Aktuell sollen verschiedenen (SQLite-) Datenbankpfade definiert werden können, die in einem StringGrid angezeigt werden.
Ursprünglich wollte ich mit Selectdirectory arbeiten, hab das aber ziemlich schnell wieder verworfen.
So hab ich mir denn einen eigenen FolderDialogFrame gebaut (TFileSearcher, der nur die Ordner findet). Angezeigt wird dieser, auf einem Fenster klebend, so:
Delphi-Quellcode:
function TSettingsFrame.CreateFolderDlg: String;
var FolderDlg : TFolderDialog;
begin
FolderDlg := TFolderDialog.Create(Self);
try
FolderDlg.SelectDirectoryFrame1.FileSearcher1.RootDir := 'C:\';
FolderDlg.Left := ClientToScreen(); //<==
if FolderDlg.ShowModal = mrOK then
Result := FolderDlg.FolderName;
finally
FreeAndNil(FolderDlg);
end;
end;
TFolderDialog ist ein normales Fenster, das Modal angezeigt werden soll. TSettingsFrame ist der Basisframe, von dem eine Instanz auf der Mainform platziert wurde. Wo auf dieser Form er angelegt wird/werden muss, darf nicht bestimmend sein - der durch obige function erzeugte FolderDialog darf den aufrufenden SettingsFrame aber nicht verdecken, höchstens jedoch etwas anschneiden, sollte aber auch nicht komplett unabhängig von der Position des Aufrufers angeziegt werden.
Im Anhang noch 2 jpegs, die die Mainform normal und Maximized mit jeweils Mainformzentriertem Dialog zeigen. Die Lösung mit demm Positionproperty ist mir nachträglich eingefallen - wirklich befriedigend ist sie aber nicht. Das Stringgrid sollte im Endeffekt gross genug sein, um einen kompletten Pfad anzuzeigen (der in Node.Data meines TFolderFrames steht).
Hat jemand eine Idee für eine befriedigendere Lösung?
Gruss
Delbor