OpenDialogs otwarcie od wskazanego folderu

0

Siemka.
Pytanie do Was
Czy można w OpenDialogs w Properties lub w kodzie
podać ścieżkę do folderu który by się otwierał na początku za każdym razem
najlepiej relatywną np.: \Pictures
Jeśli tak to jak to zrobić?

procedure TForm2.Button12Click(Sender: TObject);
var
i : integer;
begin
if OpenDialog1.Execute then
 begin
   for I := 0 to OpenDialog1.Files.Count - 1 do
   begin
    //
   //
  //
   end;
 end;
end;
0

Do tego służy właściwość OpenDialog.InitialDir, którą możesz ustawić zarówno w oknie Inspektora Obiektów, jak i dowolnie uzupełniać z poziomu kodu.

0

Dobrze ścieżkę potrafię dodać

OpenDialog1.InitialDir := extractfilepath(paramstr(0)) + 'Picture\';
if OpenDialog1.Execute then

To mamy.
Tylko jeszcze jak zrobić żeby podczas działania programu zawsze zaczynał od tej ścieżki (po każdym btnOpenClick)
a nie zmieniał gdy wybraliśmy plik z innego folderu.

Znalazłem coś takiego w inspektorze obiektów ofNoChangeDir ustawiłem na True ale nic to nie dało.
Co jeszcze mogę zrobić?

0

Tylko jeszcze jak zrobić żeby podczas działania programu zawsze zaczynał od tej ścieżki (po każdym btnOpenClick)

W każdym btnOpenClick najpierw ustaw ścieżkę we właściwości OpenDialog.InitialDir, a dopiero po tym wyświetl okno dialogowe;

Znalazłem coś takiego w inspektorze obiektów ofNoChangeDir ustawiłem na True ale nic to nie dało.

Ta opcja służy do zablokowania możliwości zmiany katalogu w oknie dialogowym.

0

Wydawało mi się że mam więc jak to poprawnie zapisać bo teraz działa jednorazowo
przy pierwszym uruchomieniu procedury w programie dopóki nie wybierzemy pliku z innego katalogu.

procedure TForm2.Button12Click(Sender: TObject);
var
i : integer;
Begin
OpenDialog1.InitialDir := extractfilepath(paramstr(0)) + 'Picture\';
if OpenDialog1.Execute then
 begin
   for I := 0 to OpenDialog1.Files.Count - 1 do
   begin
    //
   //
  //
   end;
 end;
end;
0
OpenDialog.InitialDir := IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0))) + 'Pictures\';

To wrzuć do konstruktora formularza, a ze zdarzenia Button12Click usuń kod modyfikujący tę właściwość.

0

Tak ale gdzie bym nie wrzucił do private czy public podkreśla kropkę

Expected ':' but received '.'

i

(88): E2029 ',' or ':' expected but '.' found

kropkę między OpenDialog a InitialDir

0

Dlaczego chcesz to wrzucać do sekcji private/public? :|

0
Pinokio:

Tak ale gdzie bym nie wrzucił do private czy public podkreśla kropkę

Chyba wyraźnie napisałem, żebyś to wrzucił do konstruktora formularza:

procedure TForm1.FormCreate(Sender: TObject);
begin
  OpenDialog1.InitialDir := IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0))) + 'Pictures\';
end;

Zacznij myśleć, bo bez tego nawet gotowce nie pomogą.

0

Staram się myśleć i to było FormCreate było pierwsze gdzie to wrzuciłem ale też zadziałało jedno razowo
także pomyślałem że robię źle z tond te kombinacje..

Mimo szczerych Twoich chęci pomocy nic nie pomaga
Tak samo jak u mnie po wybraniu .pliku z innego katalogu przechwytuje ścieżkę do niego
i za następnym użyciem procedury otwiera folder z którego ostatnio otwarliśmy plik

0

być może używasz tego samego obiektu opendialog1 w różnych sytuacjach modyfikując przy tym jego własność InitialDir

podepnij podstawienie:

OpenDialog1.InitialDir :='coś tam';

przed KAŻDYM wywołaniem

OpenDialog1.execute 

czyli np. ....

procedure TForm2.Button12Click(Sender: TObject);
Begin
  OpenDialog1.InitialDir := extractfilepath(paramstr(0)) + 'Picture\';
  if OpenDialog1.Execute then
   begin
      /// tutaj akcja związana z wybraniem pliku lub plików 
    end;
end;

jest jeszcze jeden jeden problem, extractfilepath zwraca scieżkę do pliku bez znaku '' na końcu
wiec prawidłowo powinno tak to wygladać

procedure TForm2.Button12Click(Sender: TObject);
Begin
  OpenDialog1.InitialDir := extractfilepath(paramstr(0)) + '\Picture\';
  if OpenDialog1.Execute then
   begin
      /// tutaj akcja związana z wybraniem pliku lub plików 
    end;
end;
0

Chłopaki cały czas chce by otwierał się ten sam czyli: Picture
za każdym razem podczas działania programu.

I każdy sposób prowadzi do tego ze działa to tylko niestety jednorazowo
potem jakimś cudem OpenDialog automatycznie przechwytuje ścieżkę do folderu z kąd był pobrany ostatni plik
a ja chce dalej ustaloną ścieżkę picture\

0

więc zrób w konstruktorze formy podstawienie

OpenDialog.InitialDir := IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0))) + 'Pictures\';

albo

OpenDialog.InitialDir := ExtractFilePath(ParamStr(0)) + '\Pictures\';
0

(furious programming)
tak podawał za co Wam wszystkim dziękuje

Tak zrobiłem i dalej działa jednorazowo czyli przy pierwszym użyciu procedury lub dopóki nie wybierzemy pliku z innego foldery

Gdy wybierzemy plik z innego folderu przechwytuje nową ścieżkę i przy kolejnym użyciu procedury zamiast znów otworzyć picture\
to otwiera folder z którego ostatnio pobraliśmy plik
**Wyjaśniam za każdym razem chce by był otwierany folder **picture\ (by nie było nie porozumień)
Czy dam kod który podaliście do FormCreate czy to do procedury btnClick zadziała niestety tylko jednorazowo jak opisałem wyżej

0

możesz pkazać metodę btnClick

0
procedure TForm1.Button1Click(Sender: TObject);
Begin
  OpenDialog1.InitialDir := extractfilepath(paramstr(0)) + 'Picture\';
  if OpenDialog1.Execute then
   begin
      
    end;
end;

było też tak jak niżej tu i w FormCreate kombinuje na wszystkie sposoby

OpenDialog.InitialDir := IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0))) + 'Pictures\';
1

Zapamiętywanie ostatnio użytej lokalizacji i tak będzie wykonywane, bez względu na przestawianie właściwości InitialDir; Wszystko dlatego, że klasa TOpenDialog przed pokazaniem okna sprawdza, czy właściwość FileName jest wypełniona i jeśli tak - używa ścieżki ostatnio wybranego pliku, ignorując InitialDir;

Rozwiązaniem jest wyczyszczenie tej właściwości, jeśli jakikolwiek plik zostanie wybrany:

procedure TForm1.Button1Click(Sender: TObject);
begin
  OpenDialog1.InitialDir := IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0))) + 'Picture\';

  if OpenDialog1.Execute then
  begin
    { tu operacje wykorzystujące OpenDialog1.FileName }

    OpenDialog1.FileName := '';
  end;
end;

Wystarczyło trochę poeksperymentować; Przy okazji:

grzegorz_so

@furious programming: strasznie się trzeba opisać z IncludeTrailingPathDelimiter, chyba ponad 30 znaków :) prościej dopisać do ścieżki jeden znak \

Niekoniecznie - IncludeTrailingPathDelimiter może zwrócić ścieżkę zakończoną znakiem \, np. C:\, jeśli plik znajduje się bezpośrednio na danej partycji; W takim przypadku dodany zostanie drugi znak separatora i wyjdzie C:\\Picture\ - choć to raczej nie powinno w niczym przeszkadzać, chyba że używamy własnych funkcji parsujących ścieżki, które podwójnych separatorów nie przewidują;

Jeśli chodzi o długaśną nazwę funkcji - nie problem ją skrócić :]

{$MACRO ON}

{$DEFINE AddPathDelim := IncludeTrailingPathDelimiter}
{$DEFINE GetPath := ExtractFilePath}
{$DEFINE AppPath := ParamStr(0)} 

i wyjdzie nam znacznie krótsza linijka, nie wpływająca na kod wynikowy programu:

OpenDialog1.InitialDir := AddPathDelim(GetPath(AppPath)) + 'Pictures\';

Ale to jako ciekawostka.

0

Yuupii !!!
W końcu to jest to
Wyczyszczenie ścieżki

DZIĘKI Chłopaki :)

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