Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.07.2010, 15:08   #1
Miha85193
Delphi, OpenGL API
Форумчанин
 
Аватар для Miha85193
 
Регистрация: 29.03.2010
Сообщений: 152
По умолчанию Передача пути и имени файла

Здравствуйте. Помогите мне пожалуйста, решить вот такую задачу.

Код:
procedure TForm1.FormShow(Sender: TObject);
var
  Str: String;
  I: Integer;
begin
    if ParamCount > 0 then
    begin
      Str := ParamStr(1);
      if ParamCount > 1 then
        for I := 2 to ParamCount do
          Str := Str+' '+ParamStr(I);

      if FileExists(Str) then
        Memo1.Lines.LoadFromFile(Str);
    end;
end;
Здесь моя программа загружает в TMemo файл, имя которого передается ей в качестве параметра, при двойном щелчке на нем. Но тут есть один недостаток. Если в имени файла попадется более одного пробела подряд, то FileExists(Str) вернет False, и файл не загрузится в мемо. Вопрос: как сделать так, чтобы моя программа учитывала все пробелы, в имени файла.
Miha85193 вне форума Ответить с цитированием
Старый 06.07.2010, 15:14   #2
ChEaTeR-abc
Заблокирован
 
Регистрация: 30.06.2010
Сообщений: 104
По умолчанию

Замени это:
Код:
if FileExists(Str) then
  Memo1.Lines.LoadFromFile(Str);
на:
Код:
IF OpenDialog1.Execute THEN
  Memo1.Lines.LoadFromFile(OpenDialog1.FileName)
и добавь на форму компонент OpenDialog(во вкладке Dialogs).Неважно куда именно
ChEaTeR-abc вне форума Ответить с цитированием
Старый 06.07.2010, 15:19   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

просто в реестре пропишитесь так чтоб было не prog.exe %1, а prog.exe "%1"
имена с пробелами должны быть в кавычках.

Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
 if ParamCount>0 then if FileExists(ParamStr(1)) then Memo1.Lines.LoadFromFile(ParamStr(1));
end;
ChEaTeR-abc, речь вообще не об этом.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 06.07.2010 в 15:24.
Пепел Феникса вне форума Ответить с цитированием
Старый 06.07.2010, 15:21   #4
ChEaTeR-abc
Заблокирован
 
Регистрация: 30.06.2010
Сообщений: 104
По умолчанию

Ну тогда извините, неправильно понял
ChEaTeR-abc вне форума Ответить с цитированием
Старый 06.07.2010, 22:32   #5
Miha85193
Delphi, OpenGL API
Форумчанин
 
Аватар для Miha85193
 
Регистрация: 29.03.2010
Сообщений: 152
По умолчанию

Цитата:
просто в реестре пропишитесь так чтоб было не prog.exe %1, а prog.exe "%1"
имена с пробелами должны быть в кавычках.
Я вообще-то не люблю копаться в реестре, но я все же проверил все строки, содержащие путь к файлу моего приложения. В общем на против всех строк, содержащих путь к исполняемому файлу, стоит именно "%1" а не %1. Да и потом я указывал свою программу, как открывающую, текстовые файлы из настроек Виндовса, а он вряд ли может допустить подобную ошибку в реестре. Например если сделать программой, открывающей текстовые файлы, скажем "Блокнот" (с помощью все тех же настроек), то он будет открывать файлы с любым количеством пробелов в имени. Так что возможно проблема в самом коде, а не в реестре?
Miha85193 вне форума Ответить с цитированием
Старый 07.07.2010, 00:54   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а тот код который я написал?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.07.2010, 01:17   #7
Miha85193
Delphi, OpenGL API
Форумчанин
 
Аватар для Miha85193
 
Регистрация: 29.03.2010
Сообщений: 152
По умолчанию

А там, если имя открываемого файла будет состоять как минимум из двух частей то он не загрузится. Нужен цикл, а в цикле, я не знаю как учесть то, когда между частями имени файла, более одного пробела.
Miha85193 вне форума Ответить с цитированием
Старый 07.07.2010, 01:26   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а вы пробывали его?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.07.2010, 01:49   #9
T_I_T_A_N
Пользователь
 
Регистрация: 01.06.2010
Сообщений: 23
По умолчанию

допиши просто к имени файла ковычки
Код:
Str:='"'+Str+'"';
T_I_T_A_N вне форума Ответить с цитированием
Старый 07.07.2010, 02:21   #10
Miha85193
Delphi, OpenGL API
Форумчанин
 
Аватар для Miha85193
 
Регистрация: 29.03.2010
Сообщений: 152
По умолчанию

Цитата:
Сообщение от T_I_T_A_N Посмотреть сообщение
допиши просто к имени файла ковычки
Код:
Str:='"'+Str+'"';
А смысл?
Miha85193 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача имени объекта в процедуру (Потоки) Delphi edmynt Помощь студентам 3 03.02.2010 20:58
Передача имени класса как параметра Квэнди Общие вопросы Delphi 14 06.04.2009 20:09
Передача Оперой и Фаерфоксом файлового пути в скрипт на этой же локальной машине Adamant PHP 3 27.11.2007 15:06
Копирование имени файла greengeneral Общие вопросы Delphi 3 10.09.2007 14:11