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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.09.2011, 22:22   #11
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

GunSmoker
1) в ваших примерах отсутствует закрывающая скобка в ShowMessage

2) автору темы (да и мне) хотелось бы проверить именно отсутствие файла. И выдать нормальное сообщение.

в случае использовани E: Exception и E.Message
получаем
Цитата:
Код:
Не удаётся загрузить файл "xxxx":
Cannot open file xxxx
Мало того, что пользователь программы видит непонятный английский текст, так ещё и что это скажет Вам, как программисту - почему это файл не может быть "open" ?
Нет прав на чтение? Или файла просто напросто нет?...

3)
Цитата:
Дублируются строковые константы (они - разные, а потому не могут быть разшарены).
А, пожалуйста, можно чуть поподробнее о этом?
(не то, чтобы это было важно для автора темы (раз Вы сказали - дублируются, значит, дублируются! )
Просто я не теряю случая заняться самообразование и узнать новое...)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.09.2011, 22:35   #12
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
пользователь программы видит непонятный английский текст
Странный аргумент.

Вы должны делать локализацию программы. Это - другой вопрос, не связанный с этим. Пример-то тут причём? Если вы его переделаете - от этого английские сообщения в вашей программе не пропадут (я имею в виду в целом).

Нет, если локализацию делать лениво - таки да, можно вставить спец.проверки и выдавать локализованное сообщение местно. Но надо понимать, что это - лень. Т.е. это не есть правильный подход, это временное обходное решение.

Цитата:
хотелось бы проверить именно отсутствие файла
Что, как справедливо заметил Пепел Феникса, не избавляет вас от ответственности за обработку других ситуаций.

Цитата:
получаем
Цитата:
Код:
Не удаётся загрузить файл "xxxx":
Cannot open file xxxx
Вообще-то получаем:
Цитата:
---------------------------
Project69
---------------------------
Не удаётся загрузить файл "xxxx":
Cannot open file "C:\MyFtul.txt". Система не может найти указанный файл.
---------------------------
OK
---------------------------
Что (если вы делали локализацию программы) превращается в:

Цитата:
---------------------------
Project69
---------------------------
Не удаётся загрузить файл "xxxx":
Не могу открыть файл "C:\MyFtul.txt". Система не может найти указанный файл.
---------------------------
OK
---------------------------
Цитата:
А, пожалуйста, можно чуть поподробнее о этом?
Код:
A := 'xyz';
B := 'xyz';
Компилятор видит, что две константы одинаковы и помещает в .exe всего один экземпляр константы.

Код:
A := 'xyz';
B := 'xyz2';
Это - разные константы, в .exe помещаются два варианта.

Это показывает важность использования строк форматирования и использования именованных констант:

Код:
const // лучше - resourcestring
  SCantLoadFile = 'Не удаётся загрузить файл "%s":'#13#10'%s';

if not FileExists(FName) then
begin
  ShowMessage(Format(SCantLoadFile, [FName, 'Файла нет']); // и снова - лучше это загнать в resourcestring
  Exit;
end;
try
  Memo1.Lines.LoadFromFile(FName);
except
  on E: Exception do
    ShowMessage(Format(SCantLoadFile, [FName, E.Message]);
end;
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 12.09.2011, 23:27   #13
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Что, как справедливо заметил Пепел Феникса, не избавляет вас от ответственности за обработку других ситуаций.
ну а я разве не об этом же?
Наиболее вероятную причину (отсутствие файла - как и просил автор темы в пост #1) обработали ручками. Выдали корректное сообщение, вышли...
Потом - блок try.. except
Никто потом сообщение об ошибке выдать не мешает..

Цитата:
Cannot open file "C:\MyFtul.txt". Система не может найти указанный файл.
погодите-ка..
у меня не так.
и в чём проблема? Windows XP SP2. Delphi 5.
Выложить exe-шник?

Цитата:
Это - разные константы, в .exe помещаются два варианта.
Это показывает важность использования строк форматирования и использования именованных констант:
понятно.
спасибо за пояснение.
согласен. сам стараюсь так поступать (выносить и использовать именнованные константы) в реальных проектах...

(впрочем, в наши то времена, лишняя сотня байт в EXE файле общим размером под десяток-другой мегабайт )

Последний раз редактировалось Serge_Bliznykov; 12.09.2011 в 23:30.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.09.2011, 23:30   #14
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
и в чём проблема? Windows XP SP2. Delphi 7.
Видимо, дело в старичке Delphi 7.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка исключений Ckomoroh Общие вопросы Delphi 6 21.03.2011 08:52
обработка исключений user666 Помощь студентам 36 27.08.2010 18:00
Обработка исключений _-Re@l-_ Общие вопросы Delphi 3 17.06.2010 08:53
обработка исключений scray PHP 3 15.05.2010 15:02
Обработка исключений try... except Kati Помощь студентам 5 07.03.2010 10:18