AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Dialog an bestimmter Stelle erscheinen lassen
Thema durchsuchen
Ansicht
Themen-Optionen

Dialog an bestimmter Stelle erscheinen lassen

Ein Thema von Delbor · begonnen am 9. Jul 2018 · letzter Beitrag vom 10. Jul 2018
Antwort Antwort
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#1

Dialog an bestimmter Stelle erscheinen lassen

  Alt 9. Jul 2018, 21:07
Delphi-Version: 10.2 Tokyo
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
Miniaturansicht angehängter Grafiken
20_25_59-mainformcenternormal.jpg   mainformcentermaximized.jpg  
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Dialog an bestimmter Stelle erscheinen lassen

  Alt 9. Jul 2018, 22:08
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...
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Dialog an bestimmter Stelle erscheinen lassen

  Alt 9. Jul 2018, 23:16
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:
tpathfinder.jpg

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
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Dialog an bestimmter Stelle erscheinen lassen

  Alt 9. Jul 2018, 23:28
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

AW: Dialog an bestimmter Stelle erscheinen lassen

  Alt 10. Jul 2018, 02:05
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Dialog an bestimmter Stelle erscheinen lassen

  Alt 10. Jul 2018, 09:18
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
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Dialog an bestimmter Stelle erscheinen lassen

  Alt 10. Jul 2018, 10:03
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  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 06:59 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