Autor Beitrag
UweK
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51
Erhaltene Danke: 1

Win 7
Delphi Enterprise XE6
BeitragVerfasst: Fr 05.01.24 11:10 
Guten Tag,

Gibt es eine Möglichkeit, bei TOpenDialog und TSaveDialog die folgenden Funktionen zu realisieren? Falls nicht, müsste ich mir selbst äußerlich und funktionell gleiche Versionen davon schreiben, die das zusätzlich können. Das macht natürlich Arbeit.

- Für jedes Anzeigen soll die Sprache einstellbar sein. Mein Programm ist zur Laufzeit zwischen deutsch und englisch umschaltbar. TOpenDialog und TSaveDialog sind in meiner deutschen Installation von Delphi XE6 immer deutsch.
- Der Benutzer soll nur ein voreingestelltes Verzeichnis "T***Dialog.InitialDir" und Unterverzeichnisse davon erreichen können, aber soll nicht weiter hoch in die Verzeichnisstruktur gehen können.

Für Tipps bin ich dankbar.
Gruß Uwe
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19274
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 05.01.24 15:05 
Es gibt mittlerweile (seit Delphi 2009) den TFileOpenDialog, der auch ein Event OnFolderChanging hat. Dort kannst du mit CanChange steuern, ob der Wechsel erlaubt sein soll. Mehr dazu findest du hier: TFileOpenDialog

Moderiert von user profile iconTh69: Delphi-Tags hinzugefügt
Moderiert von user profile iconTh69: URL-Titel hinzugefügt
UweK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51
Erhaltene Danke: 1

Win 7
Delphi Enterprise XE6
BeitragVerfasst: Do 22.02.24 15:37 
Hallo jaenicke,

Vielen Dank. Für das Sperren des Verzeichnisses ist das die Lösung.

Bleibt noch das Problem mit dem Umschalten der Sprache zur Laufzeit. Nach ergiebigem Googeln sieht es für mich so aus, dass da gar kein direkter Weg vorgesehen ist. Diese Notlösung habe ich gefunden, wo alle Komponenten der Reihe nach angeschaut und gezielt verändert werden: Sprache umstellen (zB auf Englisch)

So etwas habe ich jetzt auch probiert. Mit einem meiner eigenen Programme funktioniert das auch:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
MyForm: TForm

...

with MyForm do
  for I:= 0 to ComponentCount - 1 do
    if Components[I] is TBitBtn then
      (Components[I] as TBitBtn).Caption:= 'Test';


Probiere ich dasselbe aber mit dem Dialog:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
MyDialog: TFileOpenDialog

...

with MyDialog do
  for I:= 0 to ComponentCount - 1 do
...

scheitert die Sache schon daran, dass "ComponentCount = 0" geliefert wird. Was ist hier anders?

Gruß Uwe

Moderiert von user profile iconTh69: URL-Titel hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 22.02.24 16:13 
Dies sind Windows-Dialoge, und daher werden diese in der aktuellen Sprache angezeigt. Es gibt daher auch keine VCL-Unterkomponenten.

Probiere aber mal SetThreadUILanguage (dies habe ich von Localization for Common Dialogs in Winform).
Laut [MS-LCID]: Windows Language Code Identifier (LCID) Reference (Kapitel 2.2 LCID Structure) sollte man für die LangId folgende Werte benutzen:
  • deutsch: 0x0007
  • englisch: 0x0009

Der Anwender deines Programms muß aber wohl beide Windows-Sprachpakete installiert haben.

Für diesen Beitrag haben gedankt: Sinspin