Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.12;
Скачать: CL | DM;

Вниз

Где запретить недопустимые символы в имени файла   Найти похожие ветки 

 
Aleks ©   (2006-10-26 01:03) [0]

Доброго времени суток.
В программе при создании имени файла используется  InputBox.
Где или как запретить пользователю ввод некоторых символов.


 
Джо ©   (2006-10-26 01:17) [1]

Это дело ОС решать, допустимо оно там или нет. Просто обрабатывай ошибку.


 
Германн ©   (2006-10-26 01:17) [2]

А почему InputBox, а не TSaveDialog?


 
Zeqfreed ©   (2006-10-26 01:19) [3]

Лучше заменить InputBox более человечными элементами интерфейса, а проверку выполнять перед непосредственным выходом из текущего диалога (нажатие OK/Apply/Next и т.д.) и при необходимости оповещать пользователя о неправильности ввода.


 
Zeqfreed ©   (2006-10-26 01:21) [4]

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


 
Aleks ©   (2006-10-26 01:42) [5]

Где отловить ошибку.
В каком обработчике, и вообще есть ли возможность контролировать во время ввода в InputBoxе, что туда вводят, какие символы.


 
Ketmar ©   (2006-10-26 01:47) [6]

есть. только ты этого не напишешь. а если дадут код -- не поймёшь. рано ещё.
не проще ли взять исходник Dialogs и смоделировать своё окошко ввода "по образу и подобию"?


 
Германн ©   (2006-10-26 02:01) [7]


> Ketmar ©   (26.10.06 01:47) [6]
>
> не проще ли взять исходник Dialogs и смоделировать своё
> окошко ввода "по образу и подобию"?
>

Имхо стандартные диалоги в Дельфи позволяют вводить в строку ввода любые символы, в т.ч. и недопустимые. Они лишь не выходят из Execute, если имя недопустимое.


 
Ketmar ©   (2006-10-26 02:27) [8]

>[7] Германн(c) 26-Oct-2006, 02:01
>Имхо стандартные диалоги в Дельфи позволяют вводить в
>строку ввода любые символы, в т.ч. и недопустимые. Они
>лишь не выходят из Execute, если имя недопустимое.
InputBox -- это, если мне не изменяет склероз, из Dialogs.pas.
(глянул: таки точно оттуда)
это просто динамически создаваемая форма, не более. берём исходник функции -- и перерабатываем под свои нужды. дел-то? %-)


 
Германн ©   (2006-10-26 02:34) [9]


> Ketmar ©   (26.10.06 02:27) [8]
>
> >[7] Германн(c) 26-Oct-2006, 02:01
> >Имхо стандартные диалоги в Дельфи позволяют вводить в
> >строку ввода любые символы, в т.ч. и недопустимые. Они
> >лишь не выходят из Execute, если имя недопустимое.
> InputBox -- это, если мне не изменяет склероз, из Dialogs.
> pas.
> (глянул: таки точно оттуда)
> это просто динамически создаваемая форма, не более. берём
> исходник функции -- и перерабатываем под свои нужды. дел-
> то? %-)
>

Да. Я тебя не так понял. Я имел в виду TxxxDialog.
А так, насчет InputQuery? Тут ведь Серёга прав. Джо ©   (26.10.06 01:17) [1]


 
Ketmar ©   (2006-10-26 02:38) [10]

>[9] Германн(c) 26-Oct-2006, 02:34
>А так, насчет InputQuery?
да однофигственно. суть не меняется. можно и InputBox"ами юзера доставать в цикле -- пока не введёт именно то, что автору программы хотелось. %-)
а можно построить свой аналог с любой необходимой функциональностью. тем более, что на основе готового кода оно несложно. автору же вопроса будет ещё и полезно -- наверняка узнает что-нибудь новое.


 
Джо ©   (2006-10-26 02:47) [11]

Замучаешься решать, что оно допустимо, а что нет. Ладно бы только символы (в 9x, например, "+" недопустим, кажется), а еще специальные имена и прочая, прочая, прочая...


 
Джо ©   (2006-10-26 02:48) [12]

Еще, вероятно, и от файловой системы зависит, что допустимо, а что нет.


 
Anatoly Podgoretsky ©   (2006-10-26 07:48) [13]

И главное все напрасно, решил что имя правильно и справедливо решил, а в момент создания получишь облом от ОС и зачем старался, не проще ли обработать ошибку?


 
Aleks ©   (2006-10-26 09:41) [14]

Люди так подскажите где её эту ошибку ловить.
Она возникает при попытки записать файл с недопустимым символом.


 
EvS ©   (2006-10-26 10:13) [15]


> Она возникает при попытки записать файл с недопустимым символом.

Так вот тут ее и отлавливай


 
Aleks ©   (2006-10-26 10:23) [16]

>Она возникает при попытки записать файл с недопустимым символом.
>Так вот тут ее и отлавливай

Если б я знал где это ТУТ, то глупых вопросов не задавал.
Это вроде раздел для начинающих ?
Объясните пожалуйста.


 
Сергей М. ©   (2006-10-26 10:30) [17]


> Если б я знал где это ТУТ


Показывай как ты записываешь файл


 
Amoeba ©   (2006-10-26 10:34) [18]

Если память не изменяет, то в RxLib есть ф-ия, позоволяющая проверить введенное имя файла на наличие недопустимых символов.


 
Aleks ©   (2006-10-26 10:47) [19]

Примерно так

s:= InputBox("Íàçâàíèå ïðîôèëÿ","Ââåäè&#242 ;å Èìÿ ïðîôèëÿ è íàæìèòå ÎÊ","") ;
Memo1.Lines.SaveToFile("c:/"+s+".txt");


 
Сергей М. ©   (2006-10-26 10:49) [20]

try
Memo1.Lines.SaveToFile("c:/"+s+".txt");
except
// вот здесь ты и поймал ошибку
end;


 
Aleks ©   (2006-10-26 11:02) [21]

Спасибо большое.
Ещё вопрос если можно.
Как контролировать символы непосредственно во время их ввода в InputBox:
s:= InputBox("Íàçâàíèå ïðîôèëÿ","Ââåäè&#242 ; ;å Èìÿ ïðîôèëÿ è íàæìèòå ÎÊ","") ;


 
Сергей М. ©   (2006-10-26 11:06) [22]


> Aleks ©   (26.10.06 11:02) [21]


А зачем ?

И (см.[2]) почему ты так найстойчив в желании лишить юзера удовольствия от использования TSaveDialog ?


 
Aleks ©   (2006-10-26 11:20) [23]

Из любопытства и, кроме того, всегда проще лишить возможности юзера совершать ошибку, чем потом её отлавливать.
Мне так кажется.


 
Сергей М. ©   (2006-10-26 11:45) [24]


> Aleks ©   (26.10.06 11:20) [23]


TSaveDialog имеет точно такое же поле ручного ввода имени файла, что и в InputBox"е. Так что в этом плане разницы никакой.


> проще лишить возможности юзера совершать ошибку


Запрет ввода тех или иных символов еще не есть 100%-я "защита от дурака".
Юзер, к примеру, ввел "C\MyFile.ext", недопустимые символы при этом отсутствуют, однако эта строка инвалидна.


 
Anatoly Podgoretsky ©   (2006-10-26 11:49) [25]


> Это вроде раздел для начинающих ?
> Объясните пожалуйста.

А код где?


 
Anatoly Podgoretsky ©   (2006-10-26 11:50) [26]


> Если память не изменяет, то в RxLib есть ф-ия, позоволяющая
> проверить введенное имя файла на наличие недопустимых символов.
>

Выбрось ее, она не достоверная.


 
Anatoly Podgoretsky ©   (2006-10-26 11:56) [27]


>
> Юзер, к примеру, ввел "C\MyFile.ext", недопустимые символы
> при этом отсутствуют, однако эта строка инвалидна.

Возможно, но одназначно валидна она или нет сказать нельзя, не хватает контеста. Но и контекст не поможет, возможно запись запрещена, то значит это имя неправильное.


 
Сергей М. ©   (2006-10-26 12:00) [28]


> не хватает контеста


Подразумевалась C:\MyFile.ext


 
Сергей М. ©   (2006-10-26 12:01) [29]


> запись запрещена, то значит это имя неправильное


На то есть код отказа)


 
Anatoly Podgoretsky ©   (2006-10-26 12:06) [30]


> Подразумевалась C:\MyFile.ext

А у меня подразумевалась папка С, по относительному пути и файл MyFile.ext


 
Anatoly Podgoretsky ©   (2006-10-26 12:10) [31]


> На то есть код отказа)

А если подумать шире!, то имя C:\X\MyFile.ext недопустимо, а вот C:\Y\MyFile.ext допустимо. Только шире надо мыслить. Под первым именем писать не буду, пошлю подальше, не важно почему, оно не допустимо для меня, а вот под вторым пожалуйста, такое имя я принимаю.
С учетом многообразия инсталированых файловых систем я как правило получу код ответа 5 во всех случаях, иногда это будут разные коды, но суть одна подобное имя недопустимо для файловой системы.


 
Aleks ©   (2006-10-26 12:14) [32]

Код всё тот же с небольшими дополнениями. (Спасибо Сергей М.)

Я предполагал, что просто запрещу все символы кроме  русских и английских букв, и юзер просто не сможет ввести C:\MyFile.ext, кроме того
путь и расширение ему (Юзеру) не надо вводить, нужно ввести только ИМЯ.

Var
s:String
Begin
s:= InputBox("Íàçâàíèå ïðîôèëÿ","Ââåäè&#242 ; ;å Èìÿ ïðîôèëÿ è íàæìèòå ÎÊ","") ;
try
Memo1.Lines.SaveToFile("c:/"+s+".txt");
except
// ошибка
end;


 
Джо ©   (2006-10-26 12:18) [33]

Удалено модератором
Примечание: Ужас


 
Сергей М. ©   (2006-10-26 12:27) [34]


> Aleks ©   (26.10.06 12:14) [32]


А ежели юзер вообще ничего не ведет ?)


 
Anatoly Podgoretsky ©   (2006-10-26 12:53) [35]


> Я предполагал, что просто запрещу все символы кроме  русских
> и английских букв

Ой бардак в системе пытаешься устроить, работать без расширений тяжело, позволь пользователю хотя бы вводить точку, хоть этого недостаточно.
И вообще не стоит быть надсмотрщиком над пользователем, он сам решит, как ему именовать и если система согласится с этим именем, то все будет в порядке.
По крайней мере ты в этом деле лишний.


 
Anatoly Podgoretsky ©   (2006-10-26 12:55) [36]

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


 
Aleks ©   (2006-10-26 13:03) [37]

>Джо
try
Memo1.Lines.SaveToFile("c:/"+s+".txt");
except
 MessageDlg(Ну Ну НУ Незя.", mtError,
           [mbOk], 0);
end;

>Сергей М.
В программе создаётся файл с личным профилем юзера, туда записываются разные данные: Дата,Смена,Цвет ....и т.д. Также он пишит ИМЯ своего профиля. Программа  объединяет все эти данные и сохраняет их в файл, в корневой коталог программы. Впоследствии при выборе данного профиля, из
списка, строится график.
Я просто хотел съделать что то типа этого:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
If (byte(Key)<48) Or ((byte(Key)> 57) And (byte(Key)<65))    then
Begin
   //нажатия не было
End;
end;


 
Aleks ©   (2006-10-26 13:06) [38]

Но как это сделать для ImputBox я не знаю.


 
Сергей М. ©   (2006-10-26 13:08) [39]


> просто хотел съделать что то типа этого


Ну сделай, если так уж хочешь)

Но вот что ты при этом к InputBox() прилип - мне по сей момент так и не понятно.

Заведи форму, брось на нее Edit, назначь ему свой KeyPress-обработчик и вызови свою форму модально вместо InputBox() ! В чем проблема-то ?


 
Anatoly Podgoretsky ©   (2006-10-26 13:18) [40]


> Программа  объединяет все эти данные и сохраняет их в файл,
>  в корневой коталог программы

Вот уже первое не корректное имя на большинстве систем.
Не позволит создать файл с таким именем.



Страницы: 1 2 вся ветка

Текущий архив: 2006.11.12;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.05 c
2-1162061766
PitTong
2006-10-28 22:56
2006.11.12
Помогите поставить пароль на приложение.


15-1161870493
ArtemESC
2006-10-26 17:48
2006.11.12
Синдром приобретенного иммунодефицита и демография...


15-1161607292
Чипырик
2006-10-23 16:41
2006.11.12
Установка компонентов


2-1161851146
dest81
2006-10-26 12:25
2006.11.12
access &amp; bde


1-1159685728
apic
2006-10-01 10:55
2006.11.12
Переопределение события.