![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не воспринимается путь к файлу кирилицей [D7, XP]
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, простые и надежные, как Калашников