Rozszerzony OpenDialog

0

Mam taki oto problem (pytanie):

Mam na formie:

  • OpenPanel : TPanel
  • OpenDialog : TOpenDialog

Na panelu 3 przyciski TButton
W OpenDialogu w zdarzeniu onShow i onClose wstawiam taki kod:

procedure TForm1.OpenDialogShow(Sender: TObject);
var
   hDlg  : DWORD;
   r     : TRect;
begin
hDlg := GetParent(OpenDialog.Handle);
GetWindowRect(hDlg, r);
SetWindowPos(hDlg, 0, 0, 0, r.Right - r.Left, r.Bottom - r.Top + 55, SWP_NOMOVE or SWP_NOZORDER);

Windows.SetParent(OpenPanel.Handle, hDlg);
with OpenPanel do
   begin
     Left := 6;
     Top := r.Bottom - r.Top - 30;
     Width := r.Left + 83;
     Height := 50;
     Visible := True;
   end;
end;

procedure TForm1.OpenDialogClose(Sender: TObject);
begin
OpenPanel.Visible := False;
Windows.SetParent(OpenPanel.Handle, Handle);
end;

Uzyskuję w ten sposób rozszerzony OpenDialog, dokładnie taki jaki potrzebuję.
Problem jest jednak z przyciskami. Chciałbym żeby po wciśnięciu jednego OpenDialog przechodził automatycznie w inne miejsce, do innej lokalizacji na dysku np. C:\Program Files\Java
po naciśnięciu drugiego np. do C:\Documents and Settings\All Users
Czy ktoś wie jak coś takiego zrobić

0

po wcisnieciu jednego przycisku przed wywołaniem OpenDialog.Execute robisz

OpenDialog.InitialDir := 'C:\Program Files\Java';

a dla drugiego przycisku

OpenDialog.InitialDir := 'C:\Documents and Settings\All Users';
0

Nie mogę użyć

OpenDialog.InitialDir := 'C:\Program Files\Java';
lub
OpenDialog.InitialDir := 'C:\Documents and Settings\All Users';
przed wywołaniem OpenDialog.Execute.

Te przyciski po skompilowaniu tego programu wskakują na OpenDialog wraz z całym panelem OpenPanel.
Panelowi OpenPanel proszę domyślnie parametr Visible przestawić na FALSE, skompilowaći zobaczyć jak to działa.
Problem polega na tym że chciałbym zmieniać folder w oknie OpenDialog po jego uruchomieniu, nie przed. Ma to być taki rozszerzony OpenDialog o dodatkowe przyciski umożliwiające szybką zmianę lokalizacji.

Wszelka pomoc będzie niezbędna

0

Witaj miałem ten sam problem co Ty, nigdy go nie rozwiązałem do dziś, gdy doznałem inspiracji.
Wklej ten kod w zdarzenie onClick w OpenPanel

var HOdialog, HCB32:Thandle;
   bufor: array [0..MAX_PATH] of Char;
begin
HOdialog := GetParent(OpenDialog1.Handle);
HCB32:=FindWindowEx(HOdialog, 0, 'ComboBoxEx32' ,nil);
  bufor:='c:\';
  SendMessage(hcb32, WM_SETTEXT , MAX_PATH, LONGINT(@bufor[0]));
  keybd_event(vk_return, 0, 0, 0);
  keybd_event(vk_Return, 0, KEYEVENTF_KEYUP, 0);

end;

Oczywiście jest tam drobny błąd, ponieważ nie maże mi w nazwie pliku ścieżki do katalogu... ;-P
Ale mam nadzieje, że kiedyś się poprawi ale działa, i to jest ważne...

0

Wielkie dzięki, za chwilę testuję.

P.S. Zainstalowałem i przetestowałem Twój E-Net. Bardzo przyjemny.
Zapraszam do zerknięcia na mój edytorek OS NotePad 2.0 na stronie http://www.opiumsoft.ovh.org

Pozdrawiam i dziękuję

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