Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.039 c
4-1151042915
Izyum
2006-06-23 10:08
2006.11.12
Логические и физические диски


15-1161853778
Ricko
2006-10-26 13:09
2006.11.12
Оцените программу


15-1161978224
Sergey Masloff
2006-10-27 23:43
2006.11.12
Вопрос. Не мешает ли руководителю умение программировать.


1-1159539430
Art_infinity
2006-09-29 18:17
2006.11.12
организация доступа к портам...


4-1151082659
GrBob
2006-06-23 21:10
2006.11.12
Удаленное подключение к SCM





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский