Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dialog an bestimmter Stelle erscheinen lassen (https://www.delphipraxis.net/197010-dialog-bestimmter-stelle-erscheinen-lassen.html)

Delbor 9. Jul 2018 20:07

Delphi-Version: 10.2 Tokyo

Dialog an bestimmter Stelle erscheinen lassen
 
Liste der Anhänge anzeigen (Anzahl: 2)
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

jaenicke 9. Jul 2018 21:08

AW: Dialog an bestimmter Stelle erscheinen lassen
 
So ganz verstehe ich das Problem noch nicht. Du könntest den Dialog ja zum Beispiel immer direkt links oder rechts vom Aufrufer anzeigen, je nachdem wo auf dem Bildschirm Platz ist.

Nebenbei zu deinem Dialog:
Für mich persönlich wäre diese eher für Win 9x typische Art der Ordnerauswahl ein NoGo, weil ich sehr viel über die Ordnerfavoriten, spezielle Ordner wie den Desktop, eingeklinkte Ordner wie OneDrive oder ein Handy / Tablet usw. mache. Die zeigst du in deiner Ordnerauswahl aber alle nicht an...

Delbor 9. Jul 2018 22:16

AW: Dialog an bestimmter Stelle erscheinen lassen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi jaenicke

Du meinst Ordner wie Users, Desktop oder Bilder? Oder sowas wie mein Handy, das meine Kiste alseigenes Laufwerk anzeigt? Meine Dialoge/Frames basieren alle auf der Filsever-Komponente von DeddyH, und die kennnt aktuell nur C:\ als Rootlaufwerk. Wobei - mich persönlich ärgert die Anordnung dieser Specialfolders im Exoplorer eher - dise Dinger sind da so angeordnet, als würden sie sich ausserhalb des C-Laufwerks befinden. Das tun sie selbstverständlich nicht, auch dann nicht, wenn sich auf der Hauptplatte aussser der C:\Partition noch weitere solche Dinger befinden.
Auf C:\ (eine SSD-Disk, 500GB) speichere ich selbst rein gar nichts - ich habe da nur begrenzten Platz zur Verfügung, und knapp die Hälfte davon wird von den installierten Programmen benötigt und von dem, was diese Programme da ablegen. Bilder, Texte, Datenbanken und dergleichen haben da nichts zu suchen.

Trozdem wäre es eine Idee, dieser Komponente das Aufffinden dieser Bentzer-Dateien noch beizubringen.

Wobei mir gerade einfällt: ich hab da bisllang noch gar nicht daarauf geachtet, ob diese Dateien da sind:
Anhang 49477

Wie du siehst, sind alle diese Dateien da, nur nicht da, wo sie vom Explorer dargestellt werden, sondern da, wo sie wirklich sind: unterhalbvon C:\. Zu Überlegen bleibt lediglich, ob diese benutzerabhängigen Ordner nicht anders dargestellt werden sollen.

was aber noch wirklich fehlt, ist die Möglichkeit, Verzeichnisse auf beliebigen Partitionen/Festplatten für nicht angemeldete User sperren zu können (Windows- und Programmbezogen).

Gruss
Delbor

jaenicke 9. Jul 2018 22:28

AW: Dialog an bestimmter Stelle erscheinen lassen
 
Zitat:

Zitat von Delbor (Beitrag 1406820)
dise Dinger sind da so angeordnet, als würden sie sich ausserhalb des C-Laufwerks befinden. Das tun sie selbstverständlich nicht, auch dann nicht, wenn sich auf der Hauptplatte aussser der C:\Partition noch weitere solche Dinger befinden

Es gibt aber auch Ordner, die nur dort angezeigt werden. Eben zum Beispiel moderne Handys, die nicht mehr als einfache USB-Laufwerke erkannt werden. (Hintergrund ist unter anderem, dass man USB-Laufwerke auswerfen muss, diese Geräte aber ohne Datenverlust einfach abziehen kann. Zudem kann man per einfachem USB-Laufwerk nicht mehrere Partitionen einblenden.)
An solche Ordner würde ich also gar nicht heran kommen.

Davon abgesehen mag man ja persönlich von der Anordnung halten was man will (ich halte sie z.B. für sehr praktisch), aber es macht als Entwickler schon Sinn an der Stelle dem Windows Standard zu folgen, wenn man ein Programm schreibt, das man nicht nur selbst benutzen möchte.

Luckie 10. Jul 2018 01:05

AW: Dialog an bestimmter Stelle erscheinen lassen
 
Zitat:

dise Dinger sind da so angeordnet, als würden sie sich ausserhalb des C-Laufwerks befinden
Es sind ja auch virtuelle Ordner. Und die müssen nicht auf C: liegen. Sie können genauso gut auf jeder beliebigen anderen Partition liegen oder auf dem Server.

Delbor 10. Jul 2018 08:18

AW: Dialog an bestimmter Stelle erscheinen lassen
 
Hi Luckie
Zitat:

Es sind ja auch virtuelle Ordner. Und die müssen nicht auf C: liegen. Sie können genauso gut auf jeder beliebigen anderen Partition liegen oder auf dem Server.
Dementsprechend habe ich mal versucht, solches auf andere Laufwerke zu verlegen - was mir Windows sehr sehr übel genommen hat.
Wenn ich das richtig verstanden habe, könnte in diesen virtuellen Ordnern eine Verknüpfung zu andern Verzeichnissen auf beliebigen Laufwerken hergestellt werden - wobei diese Zielverzeichnisse selbst nicht speziell geschützt sind. Natürlich lässt sich das im Explorer ändern, nur ist dieser Weg eine eher holprige Lösung. Wenn, dann müsste dies im Rahmen einer Benutzerverwaltung vom Programm aus geschehen.

Gruss
Delbor

jaenicke 10. Jul 2018 09:03

AW: Dialog an bestimmter Stelle erscheinen lassen
 
Zitat:

Zitat von Delbor (Beitrag 1406829)
Dementsprechend habe ich mal versucht, solches auf andere Laufwerke zu verlegen - was mir Windows sehr sehr übel genommen hat.

Dann bist du nicht den von Microsoft angebotenen Weg gegangen (z.B. rechte Maustaste auf Eigene Dokumente --> Eigenschaften --> Pfad --> Verschieben) oder hast Verzeichnisse verschoben, die nicht dafür vorgesehen sind. Es geht aber ja um die virtuellen Ordner, die in jeder Verzeichnisauswahl unter Windows normalerweise heutzutage angezeigt werden. Und die kann man problemlos verschieben.

Jedenfalls ist es schon ein erheblicher Mehraufwand, wenn man jeweils das physische Verzeichnis suchen muss (und wissen muss wo es liegt bzw. ansonsten zuerst im Windows Explorer nachschauen muss) anstatt einfach mit einem Klick über das virtuelle zu gehen...

Ich habe bei der Verzeichnisauswahl aber auch schon Probleme gehabt bzw. habe sie noch. Und zwar mit Delphi selbst. Ich weiß nicht warum, aber Delphi (auch die neueste Version) zeigt den Auswahldialog immer ganz unten rechts auf dem Bildschirm an und zwar so, dass der größte Teil des Dialogs außerhalb des Bildschirms liegt. Ich sehe also quasi genug um den Dialog an der Titelleiste in den sichtbaren Bereich zu ziehen...
Ob das nun an dem Windows-Dialog oder an Delphi liegt, weiß ich nicht.

Trotzdem würde ich nach Möglichkeit immer Standardanzeigen benutzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:32 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