Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не воспринимается путь к файлу кирилицей [D7, XP]


Страницы:   1 2 3 4

Laguna ©   (2011-10-12 11:59:00) 

Сохраняя в базе картинку выполняю следующее:

 FotoTblDomFoto1.LoadFromFile(FilenameEdit1.Text)
,
где  для примера
FilenameEdit1.Text = "c:\Новая папка\Картинки\Img111.bmp"

вылетает вот эта ошибка http://s017.radikal.ru/i419/1110/be/3a63b68395b6.jpg
Отслеживая по коду обнаружил, что появляется она в момент отработки TFileStream.

constructor TFileStream.Create(const FileName: string; Mode: Word; Rights: Cardinal);
begin
 if Mode = fmCreate then
 begin
   inherited Create(FileCreate(FileName, Rights));
   if FHandle < 0 then
     raise EFCreateError.CreateResFmt(@SFCreateErrorEx, [ExpandFileName(FileName), SysErrorMessage(GetLastError)]);
 end
 else
 begin
   inherited Create(FileOpen(FileName, Mode));
   if FHandle < 0 then
     raise EFOpenError.CreateResFmt(@SFOpenErrorEx, [ExpandFileName(FileName), SysErrorMessage(GetLastError)]);
 end;
end;

Что же получается, загружать картинки можно только из папок, набранных латинскими буквами? Или есть какой обход данной ошибки?


Laguna   (2011-10-18 17:56:00) [1]

НЕ, все нормально, это какойто личный глюк был. Все работает.


Cobalt   (2011-10-18 16:45:00) [2]

по такому поводу взводится флаг на запрет реакции на OnChange поля ввода


Anatoly Podgoretsky   (2011-10-13 15:29:00) [3]

> Laguna  (13.10.2011 13:12:57)  [57]

RX это наркотик, напрочь мозги отшибает.


Медвежонок Пятачок   (2011-10-13 13:19:00) [4]

какой вкусный кактус. невозможно оторваться.


Laguna   (2011-10-13 13:12:00) [5]

Я не думаю, что RX нужно списывать со счетов. Есть у них много удобных компонентов.

> han_malign
я водзадумал переписать выводимое значение FileName. По идее это нужно было бы сделать на событии

procedure TForm1.FilenameEdit1AfterDialog(Sender: TObject;
 var Name: String; var Action: Boolean);
begin
  if Action then
   (Sender as TFileNameEdit).Text :=  AnsiDequotedStr((Sender as TFileNameEdit).Text, '"'));
end;

Но нифига не прокатывает. А если поставить на FilenameEdit1Changeто получится зацикливание.


han_malign   (2011-10-13 11:51:00) [6]


> FilenameEdit1: TFilenameEdit;
> Да и дело даже не в этом, RX качественно делали, вроде

- ключевое слово - вроде... Недавно пришлось поковыряться в этом конкретно компоненте - и понял, что проще руками сделать(TComboEdit+TSaveDialog), чем понять полет их мысли...
(вот на TDirectoryEdit - нареканий нет, а с этим они что-то перемудрили)

> автор сего уг, видимо решил "перестраховаться" на все случаи жизни

- к сожалению, это как раз творчество RX... и это только малая часть "странностей" обработки пути в этом модуле(там, по неведомым причинам, разбор командной строки с параметрамиделается)...
Похоже под мультиселект затачивали, да не доточили...


QAZ   (2011-10-13 10:46:00) [7]

Удалено модератором


Dimka Maslov   (2011-10-13 09:27:00) [8]


> Зачем так сделано?


Потому-что [censored]. Во первых так делать не надо, а во вторых и сделано-то криво.


Laguna   (2011-10-13 00:56:00) [9]

Кстати, вот еще на что обратил внимание

function ExtFilename(const FileName: string): string;
begin
 if (Pos(' ', FileName) > 0) and (FileName[1] <> '"') then
   Result := Format('"%s"', [FileName])
 else Result := FileName;
end;


Т.е. если выбирается путь к файлу в папках которого есть пробелы, то в свойстве Text этот путь обрамляется кавычками. А для загрузки картинки от этих кавычек наоборот приходится избавляться. Зачем так сделано? Я так понимаю для того, чтобы путь как бы не был разорванным.


знайка   (2011-10-12 21:56:00) [10]

альфа шмальфа... берите xaml и можно что и то и другое ...


Германн   (2011-10-12 21:02:00) [11]


> крутые перцы ставят себе сборку с включеными в него Rx,
> AlphaControls

В данном случае достаточно одной таблэтки!
Ибо AlphaControls включает в себя этот компонент.


Dennis I. Komarov   (2011-10-12 19:24:00) [12]


> OW ©   (12.10.11 14:26) [42]

не будь так серьезен, на смайла, но все-таки крутые перцы ставят себе сборку с включеными в него Rx, AlphaControls, etc


Dimka Maslov   (2011-10-12 17:45:00) [13]


> ээ какбэ, кавычки для путей с пробелами нужны только для
> коммандной строки запускаемого приложения


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


Омлет   (2011-10-12 15:41:00) [14]

> Laguna ©   (12.10.11 13:35) [33]
>> Омлет
>> Вопрос был, какого типа FilenameEdit1, а не FilenameEdit1.Text.
> Ну какого типа может быть стандартный компонент?
> FilenameEdit1: TFilenameEdit;


> Laguna ©   (12.10.11 14:51) [44]
> Это компонент из состава Rx Controls.


Дада, очень стандартный. И работает чудно.


QAZ   (2011-10-12 15:24:00) [15]

ээ какбэ, кавычки для путей с пробелами нужны только для коммандной строки запускаемого приложения
ибо там суть пробела - разделитель
для файловых функций оно не надо


OW   (2011-10-12 15:17:00) [16]


> Dimka Maslov ©   (12.10.11 15:03) [45]

+мильон

Да и дело даже не в этом, RX качественно делали, вроде
просто когда открываешь проект, чтоб поправить, начинается.. то одно надо поставить, то другое.. Особенно, какие-нибудь 5 лет давности. Библиотеки не приложены, или утеряны, или испорчены...
Есть время - все переписать на стандарт, имхо.
Без какой-нибудь градиентной заливки кнопки можно легко обойтись.

И камень второй, более глубокий.
Часто их интерфейс рисуется руками, и при переходе на схемы/темы современных осей - перерисовка хромает, интерфейс начинает лажать, а сделать уже мало что можно.


Dimka Maslov   (2011-10-12 15:03:00) [17]

Яркий пример того, почему не надо пользоваться всякими левыми компонентами.


Laguna   (2011-10-12 14:51:00) [18]

> OW

> не-а.. И даже теперь не нашел. Да и ладно, все равно юзать
> не будузачем оно, когда есть edit, button и opendialog,
> простые и надежные, как Калашников

Это компонент из состава Rx Controls.
Он все это в себе объединяет.

Ребята, всем спасибо за обсуждения, решение найдено. Дело было в лишних ковычках. Сейчас все работает как надо.

>RWolf

Отдельное спасибо за AnsiDequotedStr


Омлет   (2011-10-12 14:26:00) [19]

Подозреваю, что у этого компонента есть свойство FileName.


OW   (2011-10-12 14:26:00) [20]


> Dennis I. Komarov ©   (12.10.11 14:06) [40]
> > TFilenameEdit - что это?
> Это стандартный компонент в D7, ты что не знал?

не-а.. И даже теперь не нашел. Да и ладно, все равно юзать не буду
зачем оно, когда есть edit, button и opendialog, простые и надежные, как Калашников


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо