Komponent wyswietlający okno dialogowe z folderami i tworze

0

chce sie dowiedziec czy jest taki komponent albo procedura ktora wyswitlala by okienko z wyborem do jakiego folderu na jakim dysku ma byc zainstalowany program - chodzi mi o to zeby byly pokazane istniejące foldery i klika sie na jakis folder i na ok i sciezka do tego folderu pokazuje sie w TEdit.

Jest Cos Takiego??

AHA jaka procedura odpowiada za utworzenie skrotu?? chce utworzyc w instalatorze skrot do programu i umiescic go na pulpicie a najlepiej w pasku startowym.

0

Zawsze możesz wykorzystać komponenty z palety Win3.1x.

0

SHBrowseForFolder

0

oo nie wiedzialem ze są takie komponenty w 3.1 eheh

BERL - jak pobrać scieżke do folderu?? kozystając z DriveComboBox i DirectoryListBox??

PS. Powie mi ktos cos o tworzeniu skrotow?? (zadalem pytanie w pierwszym poscie - edytowalem go i moze ktos nie zauwazyl)

0

Poszukaj we właściwościach, tam jest takie połączenie między DirectoryListBox a DriveComboBox i innymi - nie pamiętam dokładnie, bo używałem tego dość dawno.

//DOPISANE
Co do skrótów - patrz http://4programmers.net/article.php?id=55

0

BERL - a wesz moze jak mozna to zmienic ze jesli wejde tam glebiej w te foldery to zaczyna sie takie cos np pokazywac C:...\Delphi a do poprawnego dzialania mojego programu potrzebna jest cala sciezka czy da sie jakos to zrobic??

amoze da sie zamiast w evencie DirectoryListBoxa pokazywac TLabel na jakim ma byc pokazywane da sie dobrac jakos kodem zeby na np TEdicie wyswietlalo CAŁĄ sciezke dostepu?

PS dzieki za linka do skrotow

0

Cześć
A nie można prościej wywoływać tego okienka ? np:

Uses FileCtrl, //itd....
 
//Najprostrza instrukcja wywołania okna wyboru katalogów
PROCEDURE TForm1.Button1Click(Sender: TObject);
var
 katalog :String;
Begin
 SelectDirectory('Wybierz katalog', '',katalog );
 Edit1.Text:=katalog;
End;

A gdy chcesz mieć większe możliwości z opcjami tego okna to podaje przykładowy kod:


UNIT OknoWybierzKatalog_Form;
Uses
 ActiveX, ShlObj,  Windows, StdCtrls, Classes, Controls, Forms;
Type
  TForm1 = class(TForm)
    Edit1: TEdit;
    btnWybierzKatalog: TButton;
    PROCEDURE btnWybierzKatalogClick(Sender: TObject);
  Private
    { Private declarations }
  Public
    { Public declarations }
  End;
 {Funkcja wywołuje systemowe okienko wyboru katalogu i pobiera nazwę katalogu.
  W zmienną Uchwyt wpisujemy uchwyt okna dla którego mamy przypisać te okienko,
  np: WybierzKatalog(Form1.Handle); }
 FUNCTION WybierzKatalog(uchwyt :THandle) :String;

VAR
 Form1 :TForm1;
IMPLEMENTATION {$R *.DFM}

PROCEDURE TForm1.btnWybierzKatalogClick(Sender: TObject);
Begin
 Edit1.Text:= WybierzKatalog(Form1.handle);
end; //ok

//Okienko systemowe wyboru katalogu 
FUNCTION WybierzKatalog(uchwyt :THandle) :String;
var
 browser   :TBrowseInfo;
 buf       :PChar;
 dirs,root :PItemIDList;
 alloc     :IMalloc;
Begin
 SHGetMalloc(alloc);               //pobieranie obiektu zarządzającego pamięcią
 buf:= Alloc.Alloc(Max_Path);                 //przydzielenie pamięci na string
 //ograniczenie wybóru tylko do katalogu "Menu Start\Programs"
 SHGetSpecialFolderLocation(uchwyt,CSIDL_DESKTOP,root);
 //ustawianie parametrów okienka systemowego...
 with browser do
 begin
   HwndOwner:= uchwyt;                               //przydzielony uchwyt okna
   //pidlRoot:= root;                      //pokazuje zamkniętą gałąź katalogów
   PidlRoot:= nil;                           //pokazuje otwartą gałąź katalogów
   PszDisplayName:= buf;
   LpszTitle:= 'Wybierz katalog :';            //etykieta przed listą katalogów
   UlFlags:= 0;   //Ulflags =1 powoduje schowanie kat. drukarek,panelu ster itp.
   Lpfn:= nil;
 end;
 //pobieranie nazwy...
 try
   dirs:=SHBrowseForFolder(browser);            //pokazanie okienka systemowego
   SHGetPathFromIDList(dirs ,buf);       //pobiernie pełnej ścieżki do katalogu
   Result:= buf;                         //pobieranie nazwy katalogu do funkcji
 finally
   Alloc.Free(root);
   Alloc.Free(buf);
 end;
End; 
//------------------------------------------------------------------------------------
//PS. To w razie potrzeby zależne od wersji Delphi - u mnie działa bez tego:
initialization      //uaktywnienie kontrolki OCX potrzebnej do opcji kopiowania
 OleInitialize(nil);
finalization
 OleUninitialize;
END.

0

wielkie dzieki dokladnie o to mi chodzilo [hurra] [cya]

1 użytkowników online, w tym zalogowanych: 0, gości: 1