AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

FileOpendialog

Ein Thema von Peter Berlin · begonnen am 27. Jun 2007 · letzter Beitrag vom 8. Mär 2010
Antwort Antwort
Seite 2 von 2     12   
Muetze1
(Gast)

n/a Beiträge
 
#11

Re: FileOpendialog

  Alt 24. Sep 2009, 19:43
Zitat von Hansa:
..., was der da macht, ...
Grundlegend Copy&Paste. Denn wie heisst es immer so schön? Nicht wissen sondern wissen wo was steht :wink:

Aber hier mal kommentiert:
Delphi-Quellcode:
procedure TForm1.OpenDialog1FolderChange(Sender: TObject);
var
  H, H2: THandle;
begin
    // Der OpenDialog macht ein Sub-Classing auf den Shell Open Dialog. Um nun den Shell Dialog
    // zu erhalten muss man sich den Parent des OpenDialog.Handle holen. In diesem suchen wir dann
    // ein Element der Klasse "SHELLDLL_DefView" was der Dateilistenbereich des Shell Dialoges ist.
  H := FindWindowEx(GetParent(OpenDialog1.Handle), 0, PChar('SHELLDLL_DefView'), nil);

    // Dann suchen wir innerhalb dieses Dateilistenbereiches nach einem Element der Klasse "SysListView32",
    // da ein ListView Element die Dateiliste bereitstellt.
  H2 := FindWindowEx(H, 0, PChar('SysListView32'), nil);

    // wenn wir beide Fenster gefunden haben, dann...
  if (H <> 0) and (H2 <> 0) then
  begin
      // senden wir dem ListView eine Botschaft vom Typ WM_COMMAND. Diese ist eigentlich eine Botschaft
      // welche Windows Elementen schickt bei Standardaktionen oder auch Elemente sich selbst bei Handlung
      // auf sogenannten Aktionselementen. Der Opendialog kann ein Popup öffnen wo der Nutzer die Ansichten
      // umstellen kann. Jeder dieser Einträge in dem Popup hat eine eigene WM_COMMAND ID welches dieses dann
      // an das ListView sendet. Der dahinter im Shell Dialog hinterlegte Handler erkennt anhand der ID
      // welche Ansicht ausgewählt wurde. Was für IDs vorhanden sind wurde in den folgenden Beiträgen
      // aufgeführt.
    SendMessage(H, WM_COMMAND, $702C, 0);

      // Und zuletzt wird der Fokus (das aktuell ausgewählte Aktionselement im Shell Open Dialog) auf die
      // ListView gesetzt. Dies hat nur einen kosmetischen Effekt, damit der Nutzer z.B. direkt mit dem
      // eintippen eines Namens loslegen kann und das ListView ihn dann sofort dahingeleitet. Da dies ein
      // Ereignishandler von TForm ist gibt es hier einen Namenskonflikt mit der Methode SetFocus, welche
      // hier sogar als Member eine höhere Priorität hat als die klassenlose Funktion SetFocus der Windows
      // Unit. Von daher wird hier mit "Windows." der Scope eindeutig auf die Windows Funktion gelegt.
    Windows.SetFocus(H2);
  end;
end;
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#12

Re: FileOpendialog

  Alt 27. Sep 2009, 20:35
Thx Muetze,

dank den Kommentaren ist jetzt klar, was da genau los ist. Das aus #10 angesprochene muss ich aber wohl näher erläutern : es geht darum, dieses Ansichts-Verhalten gezielt zu steuern und, ob das überhaupt geht. In Windows selbst gehts anscheinend nämlich nicht ohne weiteres. Bei mir stellt sich der Opendialog normalerweise im Detail-Stil dar. Zur Zeit jedenfalls. Gehe ich da in ein Unterverzeichnis und ändere die Ansicht in "Miniaturansicht" und dann wieder eine Ebene höher, dann gilt die Miniaturansicht auch da. Das Problem ist jetzt eben folgendes : kann die Miniaturansicht vom Programm aus für ein bestimmtes Unterverzeichnis eingestellt/geändert werden ?
Gruß
Hansa
  Mit Zitat antworten Zitat
waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#13

Re: FileOpendialog

  Alt 7. Mär 2010, 16:44
Hallo,
die bisher beschriebene Umstellung des Opendialogs funktioniert einwand frei.

Nun würde ich gerne die Darstellung wählen, welche der User selber im Explorer unter extras, Ordneroption, Ansicht festgelegt hat.


Ich würde gerne diesen Wert übernehmen, damit mein Opendialog in der vom User festgelegten Darstellung geöffnet wird.
Wo wird diese Festlegung hingeschrieben ?
Wie kann ich diese auslesen ?
  Mit Zitat antworten Zitat
waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#14

Re: FileOpendialog

  Alt 8. Mär 2010, 07:01
Hallo,
ich glaube den Schlüssel gefunden zu haben.
\Software\Microsoft\Windows\ShellNoRoam\Bags\326\S hell
Mode

Delphi-Quellcode:
Procedure TForm1.Button1Click(Sender: TObject);
var mode :integer ;
begin
with TRegistry.Create do begin
    RootKey := HKEY_CURRENT_USER;
    Access := KEY_READ;
    if OpenKey('\Software\Microsoft\Windows\ShellNoRoam\Bags\2\Shell', False) then
// achtung Wert 2 ändert sich
    begin
      mode := readinteger('Mode');
      case mode of
      1: Showmessage('Symbole');
      3: Showmessage('Liste');
      4: Showmessage('Details');
      6: Showmessage('Kacheln');
      else
        Showmessage('Miniaturansicht/unbestimmt');
      end;
     end
    else
          ShowMessage('Ooops...')
  end;
end;
Allerdings habe ich festegstellt, dass der Wert 2 bei \Bags\2 ändert und die letzte Ordnernummer annimmt, aus der als Basis für die Aneige genommen wurde. Gint´s ne andere Möglichkeit ???

Hierzu habe ich ergänzend folgende Infos im Netz gefunden.
Configure the default Folder Type template for all users
If having dynamic / roaming users and want and want to configure the default Folder view for all users through the registry:
[HKEY_LOCAL_MACHINE \Software \Microsoft \Windows \ShellNoRoam \Bags \AllFolders \Shell]
WFlags = 0
Mode = 4
vid = "{137E7700-3573-11CF-AE69-08002B2E1262}"


Note the following table can be used to configure the above values (WFlags should always be 0)
View Mode vid
Icons 1 {0057D0E0-3573-11CF-AE69-08002B2E1262}
List 3 {0E1FA5E0-3573-11CF-AE69-08002B2E1262}
Details 4 {137E7700-3573-11CF-AE69-08002B2E1262}
Thumbnail 5 {8BEBB290-52D0-11D0-B7F4-00C04FD706EC}
Tiles 6 {65F125E5-7BE1-4810-BA9D-D271C8432CE3}
Filmstrip 7 {8EEFA624-D1E9-445B-94B7-74FBCE2EA11A}
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 07:41 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