Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Opendialog, eigene Navigation? (https://www.delphipraxis.net/108114-opendialog-eigene-navigation.html)

Centrii 7. Feb 2008 09:00


Opendialog, eigene Navigation?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,

hab da mal wieder ne kleine Frage....

Ist es möglich bei einem Opendialog (angehängtes Bild) das im roten Rahmen selber zu verändern ?

Also spezielle Ordner zu Verfügung stellen und nicht den Standard (Desktop, Eigene Dateien, usw.)

Gruß Ruben

teebee 7. Feb 2008 09:21

Re: Opendialog, eigene Navigation?
 
Dieser Bereich heißt "Places Bar".Hier findest Du einen Artikel dazu, und hier eine Anpassung an Delphi.

Centrii 7. Feb 2008 09:48

Re: Opendialog, eigene Navigation?
 
Danke teebee, funktioniert bestens :thumb:

Centrii 7. Feb 2008 10:35

Re: Opendialog, eigene Navigation?
 
kleines Problem hab ich noch damit.

Wenn ich den Opendialog öffne, ist er im Win2000 Style, öffne ich aber erst einen anderen Opendialog dann ist auch mein Opendialog im XP Style...
wie kann ich das ändern?

Centrii 7. Feb 2008 15:14

Re: Opendialog, eigene Navigation?
 
Zitat:

Zitat von teebee
Dieser Bereich heißt "Places Bar".Hier findest Du einen Artikel dazu, und hier eine Anpassung an Delphi.


das hat bei mir nicht wirklich funktioniert, hab den OPendialog nur noch im Win2000 Style bekommen, vielleicht habe ich auch was falsch gemacht...

Ich hab mir jetzt was eigenes geschrieben...

Delphi-Quellcode:
uses Registry;

procedure TFormFab.Oeffnen1Click(Sender: TObject);
var Filename : String;
begin
 SetPlacesBar;
 try
   if Opendialog1.Execute then
    begin
        // mach was
    end;
 finally
   ResetPlacesBar;
 end;
end;

//*********************************************************************************************************************

Procedure TFormFab.SetPlacesBar;
begin
  with TRegistry.Create do
  try
    RootKey := HKEY_CURRENT_USER;
    if OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\ComDlg32\Placesbar',True) then
    begin
      WriteString('Place0', 'O:\OFC-FileStorage\FabSources\');
      WriteString('Place1', 'O:\Prodator 2\');
      WriteString('Place2', 'O:\');
      WriteInteger('Place3', 17); //Arbeitsplatz
      WriteString('Place4', 'Desktop');
      CloseKey;
    end;
  finally
    Free;
  end;
end;

//*********************************************************************************************************************

procedure TFormFab.ResetPlacesBar; //setzt die PlacesBar wieder auf den Standard
 begin
  with TRegistry.Create do
  try
    RootKey := HKEY_CURRENT_USER;
    if OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\ComDlg32\Placesbar',True) then
    begin
      WriteInteger('Place0', 8);    //Verlauf
      WriteInteger('Place1', 0);    //Desktop
      WriteInteger('Place2', 5);    //Eigene Dateien
      WriteInteger('Place3', 17);   //Arbeitsplatz
      WriteInteger('Place4', 18);   //Netzwerkumgebung
      CloseKey;
    end;
  finally
    Free;
  end;
end;
damit funktioniert es.

Viel Spaß damit, sollte es jemand brauchen können :-D

Gruß Ruben

arbu man 7. Feb 2008 15:26

Re: Opendialog, eigene Navigation?
 
Nein, der Code ist nicht schön! Was ist wenn der Benutzer sich seine Eigenen Einträge definiert hat ?
Da setzt du ihn wieder auf des OS Standard zurück und diser wird sich dafür bedanken.
Lies lieber die Einträge aus...

mfg, Björn

Centrii 7. Feb 2008 15:57

Re: Opendialog, eigene Navigation?
 
hi Björn,

da hast du Recht, aber bis jetzt hatte ich bei mir nichts definiert und kannte nur den OS Standard.
Deshalb stört mich das im moment nicht wirklich, ich hab das halt heute mittag kurz rein gemacht.
Werde es aber in naher Zukunft umschreiben und auslesen.

Gruß Ruben

Centrii 7. Feb 2008 16:46

Re: Opendialog, eigene Navigation?
 
so, jetzt eine Version mit auslesen...

Delphi-Quellcode:

uses Registry;

var  KeyList : TStrings;

procedure TForm1.Oeffnen1Click(Sender: TObject);
var Filename : String;
begin
SetPlacesBar;
try
   if Opendialog1.Execute then
    begin
        // mach was
    end;
finally
   ResetPlacesBar;
end;
end;

//*********************************************************************************************************************

function TForm1.ReadKey(Key:String): String;
var Reg   : TRegistry;
    sHelp : String;
begin
  Reg := TRegistry.Create;
  Result := '';
  try
    Reg.RootKey := HKEY_CURRENT_USER;
    if Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\ComDlg32\Placesbar',false) then
    begin
      try
        sHelp := Reg.ReadString(Key);
      except
        sHelp := IntToStr(Reg.ReadInteger(Key));
      end;
    end;
  finally
    Reg.Free;
  end;
  Result := sHelp;
end;

//*********************************************************************************************************************

Procedure TForm1.SetPlacesBar;
var Key : String;
     i  : Integer;
begin
  KeyList := TSTringlist.Create;
  KeyList.Clear;
  for i := 0 to 4 do begin
    Key := 'Place'+IntToStr(i);
    KeyList.Add(ReadKey(Key));
  end;

  with TRegistry.Create do
  try
    RootKey := HKEY_CURRENT_USER;
    if OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\ComDlg32\Placesbar',True) then
    begin
      WriteString('Place0', 'O:\OFC-FileStorage\FabSources\');
      WriteString('Place1', 'O:\Prodator 2\');
      WriteString('Place2', 'O:\');
      WriteInteger('Place3', 17); //Arbeitsplatz
      WriteString('Place4', 'Desktop');
      CloseKey;
    end;
  finally
    Free;
  end;
end;

//*********************************************************************************************************************

procedure TForm1.ResetPlacesBar;
var i  : Integer;
    Reg : TRegistry;
    Key : String;
begin
  Reg := Tregistry.Create;
  try
    Reg.RootKey := HKEY_CURRENT_USER;
    if Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\ComDlg32\Placesbar',True) then
    begin
      for i := 0 to KeyList.count -1 do begin
        Key := 'Place'+IntToStr(i);
        try
          Reg.WriteInteger(Key,StrToInt(KeyList[i]));
        except
          Reg.WriteString(Key,KeyList[i]);
        end;
      end;
      Reg.CloseKey;
    end;
  finally
    Reg.Free;
    KeyList.Free;
  end;
end;

//*********************************************************************************************************************
hoffe das die Version jetzt eher den Ansprüchen der Allgemeinheit dient :-D
nehme Verbessungsvorschläge gerne an...

Gruß Ruben

Apollonius 7. Feb 2008 16:50

Re: Opendialog, eigene Navigation?
 
Warum verwendest du nicht RegOverridePredefKey? Damit kannst du dir das Auslesen schenken. Außerdem gibt es in der jetzigen Version Probleme, wenn zwei Programme, die so vorgehen wie du, gleichzeitig laufen, da diese dann gegenseitig ihre Einstellungen überschreiben.

Centrii 7. Feb 2008 19:13

Re: Opendialog, eigene Navigation?
 
Hi Apollonius,

Die Wahscheinlichkeit das zwei Programme, die so vor gehen wie ich, zur gleichen Zeit in die Registry schreiben, halte ich für sehr gering. Wie gesagt, mein erster versuch war mit RegOverridePredefKey, da hatte ich aber das Problem, dass sich der OpenDialog mit dem alten Win2000 Style öffnete. Ich konnte aber nicht rausfinden an was es gelegen hat.
Ich habe es mit dem weiter oben von teebee vorgeschlagenen versucht,

Zitat:

Zitat von teebee
Dieser Bereich heißt "Places Bar".Hier findest Du einen Artikel dazu, und hier eine Anpassung an Delphi.

aber mit dem Projekt von dem Link habe ich das Verhalten mit dem alten Style. Kannst ja mal ausprobieren, wenn du das Projekt laufen lässt. Wie gesagt, wenn ich zuerst einen anderen OpenDialog starte habe ich das XP-Style. Keine Ahnung an was das liegt.

Gruß Ruben


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