Ĺadny brzuch
Witam :) Mój edytor posiada dużo róznych generatorów, dajmy na to wstawianie obrazków. Trzymając się przykładu, mam w jakimś tam okienku Edita (edtURL), który jest ścieżką (bezwzględną albo wzgledną) dla obrazka oraz jakiegoś buttona (sbURL), który wywołuje OpenDialoga. Mam pod tego buttona taki kod:
procedure Tfrm_obrazek.sbURLClick(Sender: TObject); begin if Open.Execute then begin if Status.Panels[3].Text = '' then edtURL.Text := Open.FileName // BEZWZGLEDNA else begin edtURL.Text := ExtractFileName(Open.FileName); // WZGLEDNA end; end; end;
Status - StatusBar, w którym w 3 komorze przechowywana jest ścieżka otwartego pliku
Open - OpenDialog
edtURL - Edit ze ścieżką
Jeśli w Status jest pusty (czyli nie ma otwartego pliku, tylko user pracuje na niezapisanym dokumencie) - wstawiana jest ścieżka bezwzględna (np. c:\xxx\yobrazek.jpg). W przeciwnym wypadku - kiedy 3 komora Statusu posiada ścieżkę (został otwarty jakiś plik, który user edytuje) wstawiana jest "ścieżka względna". Jednak jest tutaj błąd krytyczny :( Jeśli obrazek znajduje się w tym samym katalogu co otwarty plik tekstowy - oczywiście działa (bo ExtractFileName() wyświetla po prostu nazwę pliku :P ), a co jeśli obrazek znajduje się w jakimś podkatalogu, czyli np:
- otwart plik textowy - c:\xxx\
- obrazek - c:\xxx\img\
- wtedy do Edita powinien wstawić się tekst: img/obrazek.jpg
Albo inny przykład:
- otwart plik textowy - c:\xxx\strona\
- obrazek - c:\xxx\
- wtedy do Edita powinien wstawić się tekst: ../obrazek.jpg
Chyba rozumiecie o co mi chodzi? ;) Za odpowiedzi z góry thx :D
Użytkownik Coldpeer edytował ten post 14 luty 2006, 20:23
extractrelativepath
Użytkownik Einzeinbleth edytował ten post 14 luty 2006, 20:28
extractrelativepath
No ten drugi to:
BaseName musi zawierać ścieżkę wobec której funkcja zwróci wartość relatywną.
Czyli wobec pliku do ktorego chcesz wstawiac ta sciezke - czyli otwarty dokument.
No ten drugi to:
Czyli wobec pliku do ktorego chcesz wstawiac ta sciezke - czyli otwarty dokument.
hmm moze recznie - stringreplace zamieniaj wszystkie \ na / ?
hmm moze recznie - stringreplace zamieniaj wszystkie \ na / ?
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
procedure Tfrm_obrazek.sbURLClick(Sender: TObject); begin if Open.Execute then begin if Status.Panels[3].Text = '' then edtURL.Text := Open.FileName // BEZWZGLEDNA else begin edtURL.Text := ExtractFileName(Open.FileName); // WZGLEDNA end; end; end;
Status - StatusBar, w którym w 3 komorze przechowywana jest ścieżka otwartego pliku
Open - OpenDialog
edtURL - Edit ze ścieżką
Jeśli w Status jest pusty (czyli nie ma otwartego pliku, tylko user pracuje na niezapisanym dokumencie) - wstawiana jest ścieżka bezwzględna (np. c:\xxx\yobrazek.jpg). W przeciwnym wypadku - kiedy 3 komora Statusu posiada ścieżkę (został otwarty jakiś plik, który user edytuje) wstawiana jest "ścieżka względna". Jednak jest tutaj błąd krytyczny :( Jeśli obrazek znajduje się w tym samym katalogu co otwarty plik tekstowy - oczywiście działa (bo ExtractFileName() wyświetla po prostu nazwę pliku :P ), a co jeśli obrazek znajduje się w jakimś podkatalogu, czyli np:
- otwart plik textowy - c:\xxx\
- obrazek - c:\xxx\img\
- wtedy do Edita powinien wstawić się tekst: img/obrazek.jpg
Albo inny przykład:
- otwart plik textowy - c:\xxx\strona\
- obrazek - c:\xxx\
- wtedy do Edita powinien wstawić się tekst: ../obrazek.jpg
Chyba rozumiecie o co mi chodzi? ;) Za odpowiedzi z góry thx :D
Użytkownik Coldpeer edytował ten post 14 luty 2006, 20:23
extractrelativepath
Użytkownik Einzeinbleth edytował ten post 14 luty 2006, 20:28
extractrelativepath

No ten drugi to:
BaseName musi zawierać ścieżkę wobec której funkcja zwróci wartość relatywną.
Czyli wobec pliku do ktorego chcesz wstawiac ta sciezke - czyli otwarty dokument.
No ten drugi to:
Czyli wobec pliku do ktorego chcesz wstawiac ta sciezke - czyli otwarty dokument.

hmm moze recznie - stringreplace zamieniaj wszystkie \ na / ?
hmm moze recznie - stringreplace zamieniaj wszystkie \ na / ?
