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


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

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


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

Наверх




Память: 0.58 MB
Время: 0.039 c
2-1161933177
_guest_
2006-10-27 11:12
2006.11.12
Можно ли послать сообщение компоненту не имеющему свойства Handle


2-1161928283
ГореПрограммер
2006-10-27 09:51
2006.11.12
Выбор папки


15-1161781670
Иксик
2006-10-25 17:07
2006.11.12
Кто-то когда-то искал программу для сравнения excel файлов


2-1161784739
remlin
2006-10-25 17:58
2006.11.12
Изменение размеров формы при потере фокуса


1-1159538518
_Guest_
2006-09-29 18:01
2006.11.12
загрузка dll-ки





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский