Форум: "Начинающим";
Текущий архив: 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("Íàçâàíèå ïðîôèëÿ","Ââåäèò ;å Èìÿ ïðîôèëÿ è íàæìèòå ÎÊ","") ;
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("Íàçâàíèå ïðîôèëÿ","Ââåäèò ; ;å Èìÿ ïðîôèëÿ è íàæìèòå ÎÊ","") ;
← →
Сергей М. © (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("Íàçâàíèå ïðîôèëÿ","Ââåäèò ; ;å Èìÿ ïðîôèëÿ è íàæìèòå ÎÊ","") ;
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