узнать директорию, в которой находится запущенная про

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Аватара пользователя
PADOCTb
новенький
Сообщения: 10
Зарегистрирован: 23.10.2008 11:36:05
Откуда: Краснодар

узнать директорию, в которой находится запущенная про

Сообщение PADOCTb »

Доброго времени суток!

Есть такая задачка - по нажатию кнопки на форме открыть в браузере страничку, которая прячется в одном каталоге с работающей программой. Для этого я решил воспользоваться таким кодом:

Код: Выделить всё

TheProcess:=TProcessUTF8.Create(nil);
  try
    TheProcess.Options:= [poUsePipes, poNoConsole, poStdErrToOutput];
    TheProcess.ShowWindow := swoNone;
    TheProcess.CommandLine:='explorer путь_к_файлу';
    try
      TheProcess.Execute;
      TheProcess.WaitOnExit;
    finally
      TheProcess.Free;
    end;
  except
    on E: Exception do begin
      DebugLn('TForm1.OpenURL ERROR: ',E.Message);
    end;
  end;

так вот не могу найти способ определения пути к файлу. пробовал

Код: Выделить всё

Path := ExtractFileDir(Application.ExeName);
и

Код: Выделить всё

Path := ExtractFileDir(paramStr(0));

но обе эти функции возвращают мне пустую переменную.
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Дело в том, что функция ParamStr возвращает строку в кодировке ANSI, а так как у тебя скорее всего используется UTF8 необходимо либо преобразовать строку в UTF-8 (SysToUTF8 либо AnsiToUTF8) или воспользоваться функцией из модуля LCLProc ParamStrUTF8.
Для получения пути необходимо использолвать функцию ExtractFilePath она вернёт путь со слешем в конце, а ExtractFielDir возвращает сам каталог т.е. путь но без слеша в конце.

Код: Выделить всё

...
  s:=ExtractFilePath(ParamStrUTF8(0));
...
Ответить