Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   SelectDirectory mit Positionsangabe? (https://www.delphipraxis.net/157399-selectdirectory-mit-positionsangabe.html)

p80286 10. Jan 2011 17:40

Delphi-Version: 7

SelectDirectory mit Positionsangabe?
 
Hallo zusammen,

Gibt es eine Möglichkeit SelectDirectory zu übermitteln, wo das entsprechende Fester geöffnet werden soll?
Irgendwo auf dem Bildschirm ist irgendwie nicht so der Bringer.

Gruß
K-H

Bummi 10. Jan 2011 21:25

AW: SelectDirectory mit Positionsangabe?
 
Zum fertigbasteln ;-)
Delphi-Quellcode:
uses shlObj;

function BrowseCallbackProc(hwnd: HWND; MessageID: UINT; lParam: LPARAM; lpData: LPARAM): Integer; stdcall;
var
    DirName: array[0..MAX_PATH] of Char;
    pIDL  : pItemIDList;
    p:tagWINDOWPOS;
begin

  case MessageID   of
    BFFM_INITIALIZED:begin
                     SendMessage(hwnd, BFFM_SETSELECTION, 1, lpData);
                     SetWindowPos(hwnd,hwnd,10,10,800,400,sw_show);
                     end;
    BFFM_SELCHANGED :begin
                        pIDL := Pointer(lParam);
                        if Assigned(PIDL) then
                        begin
                          SHGetPathFromIDList(pIDL, DirName);
                          if DirectoryExists(DirName) then
                           if 1=1 then //(ExtractFileName(DirName)='Windows') then
                            SendMessage(hwnd, BFFM_ENABLEOK, 0, 1)
                           else
                            SendMessage(hwnd, BFFM_ENABLEOK, 0, 0)
                          else
                          SendMessage(hwnd, BFFM_ENABLEOK, 0, 0);
                        end
                        else
                          SendMessage(hwnd, BFFM_ENABLEOK, 0, 0);
                     end;
  end;

  Result := 0;
end;

function SelectFolderDialogExt(Handle: Integer; var SelectedFolder: string): Boolean;
var
  ItemIDList: PItemIDList;
  JtemIDList: PItemIDList;
  DialogInfo: TBrowseInfo;
  Path: PChar;
begin
  Result := False;
  Path  := StrAlloc(MAX_PATH);
  SHGetSpecialFolderLocation(Handle, CSIDL_DRIVES, JtemIDList);
  with DialogInfo do
  begin
    pidlRoot     := JtemIDList;
    //ulFlags      := BIF_RETURNONLYFSDIRS;    //only select directories
    hwndOwner    := GetActiveWindow;
    SHGetSpecialFolderLocation(hwndOwner, CSIDL_DRIVES, JtemIDList);
    pszDisplayName := StrAlloc(MAX_PATH);
    lpszTitle      := PChar('Select a folder');
    lpfn           := @BrowseCallbackProc;
    lParam           := LongInt(PChar(SelectedFolder));
  end;

  ItemIDList := SHBrowseForFolder(DialogInfo);

  if (ItemIDList <> nil) then
    if SHGetPathFromIDList(ItemIDList, Path) then
    begin
      SelectedFolder := Path;
      Result        := True;
    end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
  dir:String;
  f:Tform;
begin
  SelectFolderDialogExt(Panel1.Handle,dir);
  Caption := Dir;
end;

p80286 11. Jan 2011 10:38

AW: SelectDirectory mit Positionsangabe?
 
mal sehen was sich daraus machen läßt!

vielen Dank!

K-H

Jetzt sieht es wesentlich besser aus, und ich kann mich an den feinschliff machen.
Nur hiermit habe ich noch ein Verständnisproblem:

Delphi-Quellcode:
if 1=1 then //(ExtractFileName(DirName)='Windows') then
                            SendMessage(hwnd, BFFM_ENABLEOK, 0, 1)
                           else
                            SendMessage(hwnd, BFFM_ENABLEOK, 0, 0)
Das sieht aus wie Reste, die ich eigentlich garnicht brauche, oder hab ich da etwas übersehen?

Gruß
K-H

himitsu 11. Jan 2011 13:01

AW: SelectDirectory mit Positionsangabe?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Eine ähnliche Version ist auch da noch mit drin (ich hoff mal ich hab nicht zuviel rausgelöscht)

[edit]
vorhin hatte ich's nicht gefunden :gruebel:
http://www.delphipraxis.net/96316-op...ml#post1046009

p80286 11. Jan 2011 13:10

AW: SelectDirectory mit Positionsangabe?
 
Danke!
aber die Fensterpositionierung fehlte,
aber sonst sehr interessant.

Gruß
K-H
Edith:
Zitat:

Zitat von himitsu (Beitrag 1073839)
vorhin hatte ich's nicht gefunden :gruebel:
http://www.delphipraxis.net/96316-op...ml#post1046009

Ok wer suchen kann, braucht das Rad nicht neu zu erfinden!

Bummi 11. Jan 2011 20:06

AW: SelectDirectory mit Positionsangabe?
 
@p80286

das sind Reste die Du gegf. nicht brauchst.., da löschen immer einfacher ist als suchen, habe ich mal drin gelassen..

p80286 12. Jan 2011 09:22

AW: SelectDirectory mit Positionsangabe?
 
Ja Danke,
ich hab gestern Abend ein wenig damit rumgespielt, "Ausschlachtsoftware" ist ganz gut zum lernen zu gebrauchen.

Gruße
K-H

Edith:
Das Fenster zu positionieren ist etwas umständlich:
Delphi-Quellcode:
xpos:=Left+E_SrcDir.left+10;
ypos:=Top+Height-Clientheight+E_SrcDir.Top+E_SrcDir.Height ;
Gibt es da keine übersichtlichere Möglichkeit?
(Bitte nicht schlagen aber dafür einen neuen Tread?)


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