Главная страница
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]


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

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


 
Anatoly Podgoretsky ©   (2006-10-26 13:19) [41]

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


 
Aleks ©   (2006-10-26 13:24) [42]

Я уже всё сделал, отловил ошибку как ты подсказал и всё.
Просто хотел сделать но у меня не получилось, я не знаю куда прилипить свой обработчик-KeyPress к InputBox (Или где у InputBox обработчик-KeyPress ). И мне стало интересно есть ли у InputBox обработчик-KeyPress.


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


> мне стало интересно есть ли у InputBox обработчик-KeyPress


InputBox - это функция.
Какой "обработчик" может быть у функции ?)


 
Aleks ©   (2006-10-26 13:32) [44]


> Anatoly Podgoretsky

©   (26.10.06 13:19) [41]
Рассказать тебе где профили хранятся, и зачем тут пользователь, он не должен задавать системно зависимые вещи, которые к тому же уже заданы системой и они правильные!

Интересно где это в системе хранится дата первой смены с 8.00 Бригады Семёнова?? и Какой у него график работы (сутки - трое, четверо.... и т.д.)


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


> где это в системе хранится дата первой смены с 8.00 Бригады
> Семёнова?? и Какой у него график работы (сутки - трое, четверо.
> ... и т.д.)


Ну и какой же это "профиль пользователя" ?)


 
Aleks ©   (2006-10-26 13:34) [46]


> Сергей М. ©   (26.10.06 13:30) [43]
> InputBox - это функция.
> Какой "обработчик" может быть у функции ?)


Понятно.
Спасибо всем, что уделили мне время.


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


> Сергей М. ©   (26.10.06 13:34) [45]
> Ну и какой же это "профиль пользователя" ?)

Там ещё хранится много всякого, я просто не стал перечислять всё, не вижу в этом смысла.
Я, почему-то считаю, что если пользователь меняет цвет, шрифт,( вид программы) - то это и есть профиль пользователя.
Хотя могу и ошибаться. :)
Так и писать правильно научите:))


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


> считаю, что если пользователь меняет цвет, шрифт,( вид программы)
> - то это и есть профиль пользователя.


Так точно, сэр.

Но тогда, пардон, при чем здесь


> дата первой смены с 8.00 Бригады Семёнова?? и Какой у него
> график работы (сутки - трое, четверо.... и т.д.)


?


 
Ketmar ©   (2006-10-26 14:08) [49]

>[42] Aleks(c) 26-Oct-2006, 13:24
>где у InputBox обработчик-KeyPress ). И мне стало
>интересно есть ли у InputBox обработчик-KeyPress.
ты тоже чукча-писатель, или просто тренируешься? [8], [10] читал? или на имя Ketmar врождённая идиосинкразия?


 
Aleks ©   (2006-10-26 18:36) [50]


> Ketmar ©

Тренируюсь )))



> Сергей М.
> Но тогда, пардон, при чем здесь



> дата первой смены с 8.00 Бригады Семёнова?? и Какой у него
> график работы (сутки - трое, четверо.... и т.д.)

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


 
Ketmar ©   (2006-10-26 18:51) [51]

>[50] Aleks(c) 26-Oct-2006, 18:36
>Тренируюсь )))
увы, заметно, что тренировки повышают уровень "чукотскости"... %-(
%-)

>допустим у Васи на компе стоит эта программа, и он хочет
[и так далее...]
>шрифтом.
а вот не путай сущности. для твоей задачи вообще БД применяют.



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

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

Наверх




Память: 0.61 MB
Время: 0.066 c
15-1161790219
oldman
2006-10-25 19:30
2006.11.12
Вот и до нас дошел прогресс... :(


2-1161867448
Sholah_Weras
2006-10-26 16:57
2006.11.12
Битовые переменные


2-1161711944
SkySpeed
2006-10-24 21:45
2006.11.12
Подскажите способ вывода Hint a около трея


15-1161895131
Anatoly Podgoretsky
2006-10-27 00:38
2006.11.12
APC клиент чтения форумов


2-1161959104
TIF
2006-10-27 18:25
2006.11.12
Проблема с 98 виндой. Помогите! Плиз!