Wstawianie ścieżki pliku do pola edit.

0

Witam!
Mam pewien problem, nie umiem go dokładnie omówić więc, pokażę na przykładzie, otóż:
Posiadam otwarty plik test.cgc w memo1 z boku na formie jest button i edit

Po kliknięciu na buttonie otwiera mi się Open dialog, i teraz jeśli plik który chcę otworzyć jest w tym samym folderze co test.cgc to do edita wstawia "1.cgc", jeśli w jakimś folderze to: "folder/1.cgc" jeśli folder wstecz to ".../1.cgc" itd...
Na pewno się to dało zrobić i nie było trudne, ponieważ kilka lat temu to zrobiłem gdy potrzebowałem, lecz po postoju kilku lat w programowani, malo już pamiętam :(

0

Uzyj extractFilePath() miedzy innymi. I kombinuj ;]

0

Takie coś jak poniżej będzie ok? Bo tak zrozumiałem, a jak chcesz bez litery dysku i "/" zamiast "" - to sobie
dostosuj kod i zwracaną nazwę pliku przy użyciu funkcji StrngReplace oraz / lub Copy, Delete, Pos i tak dalej.

var
  AFile, APath : string;
begin
  if OpenDialog.Execute then
  begin
    AFile := ExtractFileName(OpenDialog.FileName);
    APath := ExtractFilePath(OpenDialog.FileName);
    if FileExists(APath + 'test.cgc') = True then
    begin
      JakisEdit.Text := AFile;
    end
    else
    begin
      JakisEdit.Text := OpenDialog.FileName;
    end;
  end;
end;
0

@olesio: nie, on chce relatywna sciezke do pliku 1.cgc wzgledem sciezki z plikiem test.cgc

0
var Sciezka: String;
      i: Integer;
      Index, Index1: Integer;
begin
  Sciezka:= Opendialog1.InitialDir    // masz aktualną ścieżkę do pliku, który ostatnio otwarłeś
  Opendialog1.InitialDir:= 'Jakaś ścieżka'   // możesz ja też zmienić

w grę wchodzi jeszcze rozbijanie ścieżki i wyciąganie z niej nazw folderów

Index:= -1;
Repeat
  Index1:= Index;
  Index:= Pos(Sciezka, '\');      // zwraca Ci numer pierwszego znaku '\' a jak 
                                             // użyjesz to w pętli to będziesz miał pozycje kolejnych
  if Index<>-1 then 
  begin
    Memo1.Lines.Add('znaleziono znak "\" Index1 '+IntToStr(Index1) +'; aktualna pozycja Index '+IntToStr(Index) );
    // ... reszta kodu
  end;
Until Index=-1;  
  if Index=-1 then 
  begin
    Memo1.Lines.Add('Koniec szukania; znaleziono znak "\" Index1 '+IntToStr(Index1) +'; aktualna pozycja Index '+IntToStr(Index) );
    // ... reszta kodu
  end;

Index pobrane z Pos będzie miało -1 gdy nie znajdzie już znaku, czyli jak znajdzie ostatni '' to
Index1 - będzie miało wartość jego pozycji
a Index=-1;

teraz jeszcze Delete, Copy - operacje na stringach i możesz programowo przeszukiwać ścieżkę dostępu
jak nie oto chodziło to przepraszam :], może ktoś coś takiego napisał ale nie przychodzi mi do głowy, a może nawet ja mam gdzieś w źródłach musiałbym poszperać

jak to nie pomoże to odezwij się na emial bo rzadko zaglądam na forum, chyba ze ktoś w międzyczasie podpowie

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