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

Вниз

SaveDialog - в каком формате сохранять ?   Найти похожие ветки 

 
GuAV ©   (2005-11-30 02:44) [0]

Как правильно определить выбранный пользователем формат - по расширению filename или по filterindex ?


 
Германн ©   (2005-11-30 03:15) [1]

Имхо, по расширению. Но с переспросом "Хотите ли вы...".


 
GuAV ©   (2005-11-30 08:40) [2]


> Имхо, по расширению.

Мне вот тоже так кажется.


> Но с переспросом "Хотите ли вы...".

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

Наверное придётся смотреть другие приложения, как в них сделано...


 
Anatoly Podgoretsky ©   (2005-11-30 10:25) [3]

GuAV ©   (30.11.05 08:40) [2]
если расширение не совпадёт ни с одним известным и фильтр не позволяет определить формат, то пишется в формате по умолчанию.


 
GuAV ©   (2005-11-30 20:25) [4]

Попробовал определять по имени... короче говоря, имя не содержит расширения, если явно не вписано.
Итак:
1. Смотрим расширение имени файла, если один из форматов, то этот формат.
2. Если нет такого расширения, то смотрим FilterIndex. Формат однозначно определён фильтром, но возникает вопрос: какое же имя дать файлу ? Тупо дописать нужное расширение ? Оставить как есть ?


 
Anatoly Podgoretsky ©   (2005-11-30 20:35) [5]

GuAV ©   (30.11.05 20:25) [4]
Если имя не содержит расширения, то должно использоваться свойство DefaultExt, которое может корректироваться по текущему фильтру, так поступает Микрософт. Сложность составляет только случай когда фильтр подмножество расширений. Микрософт кроме смены DefaultExt может еще и сменить папку, если это особый фильтр, например .dot


 
Anatoly Podgoretsky ©   (2005-11-30 20:36) [6]

Кстати, чтобы избезать неодназначности не делай подмножеств, только простые фильтры.


 
GuAV ©   (2005-11-30 22:24) [7]


> Кстати, чтобы избезать неодназначности не делай
> подмножеств, только простые фильтры.

Неоднозначности нет. Одно расширение - один фильтр - один формат.


> должно использоваться свойство DefaultExt, которое
> может корректироваться по текущему фильтру, так
> поступает Микрософт.

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

Как добится от TSaveDialog правильного поведения ?
Хотелось бы не особо напрягаясь и без наследования, т.к. он встроен в TFileSaveAs экшн.


 
Anatoly Podgoretsky ©   (2005-11-30 22:51) [8]

Раз ты можешь определить FilterIndex, то меняй DefaultExt, можно конечно и тупо подставить расширение, все зависит от задачи, хочешь ли ты оставить Filename неизменным и оставить принятие решения вне диалога или хочешь иметь Filename, который будет соответствовать фильтру. Это конечно только для случая когда расширение отсутствует. Если же расширение введено, то тут конечно несколько вариантов,
1. когда расширение соответствует одному из фильтров
2. когда расширение не соответствует ни одному фильтру

Как поступать вопрос филосовский, есть плюсы и минусы у обеих вариантов.
Например Ворд делает формат в соответствии с фильтром, вариант отсутствия расширения равен варианту 2
Тут когда пользователь не ориентируется в этом, не понимая, что введенная точка является уже расширение, то у него получаются имена или без расширения совсем, если точка последняя или странные типы файлов, когда точка часть имени, например дата. Я своих пользоватей приучили или явно вводить расширение во всех случаях или обращать внимание на эту особенность и явно указывать при наличии точки в имени файла. Ну и периодически переименовывать файлы если такой случай приключился


 
GuAV ©   (2005-12-01 00:02) [9]


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

Вообще цель ветки не только узнать реализацию правильного поведения, но и узнать само правильное поведение :)


> Как поступать вопрос филосовский, есть плюсы и минусы
> у обеих вариантов.


Так и подозревал :(

Внимательно посмотрел поведение Word. Выяснилось:
1 Формат всегда соответствует фильтру.
2 Расширение всегда соответвует формату. Если введённое не соответствует или отсутствует, то добавляется правильное расширение (всегда с предшествующей точкой).
3 Фильтр применяется к вводимому имени при получении списком фильтров фокуса.
4 Отображение или не отображение расширение при показе диалога - зависит от настроек проводника.

Ориентироваться буду на такое поведение.
Первые два пункта приняты.
Третий и четвётртый - пока не знаю.


 
GuAV ©   (2005-12-01 00:17) [10]

смотрел Paint. Формат соотв с фильтром. Расширение - если введённое есть среди фильтров, то не добавляется, иначе добавляется. Плохо, т.к. в поле я ввёл 1.gif и получил bmp файл с gif расширением, при этом 1. дало не файл без расширения, а как в ворде 1..bmp .



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

Форум: "Основная";
Текущий архив: 2005.12.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.012 c
2-1134365940
MiraJ
2005-12-12 08:39
2005.12.25
поиск в HTML


2-1133879662
VIB
2005-12-06 17:34
2005.12.25
Работа с большими таблицами


11-1115098181
Боб
2005-05-03 09:29
2005.12.25
Ошибки при компиляции KOLMCK v2.08


2-1134030679
Daria
2005-12-08 11:31
2005.12.25
Поиск по базе


14-1133175564
Santrope
2005-11-28 13:59
2005.12.25
Поможем Алексею Агафонову





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