![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
1 копия формы в MDI приложении [D2005]
K_Lock © (2009-09-27 19:47:00)Господа, подскажите пожалуйста с таким вопросом:
есть MDI приложение, для открытия формы используется:
Form1 := TForm1.Create(self);
для закрытия: Action := caFree;
Каждый вызов: Form1 := TForm1.Create(self); создает новую копию формы.
Вопрос: как реализовать открытие только 1 копии формы? )
Заранее спасибо.
Юрий Зотов (2009-09-29 21:06:00) [1]> Жорж (29.09.09 20:09) [20]
Родного такого механизма нет, писали сами.
Жорж (2009-09-29 20:09:00) [2]
> Юрий Зотов © (29.09.09 14:53) [18]
> умеют дочиться друг к другу
А какой инструмент использовать? Родной то механизм вроде сильно глючный? Или у меня устаревшая информация?
ЗЫ. имеется в виду Delphi, а не Java :-)
Игорь Шевченко (2009-09-29 15:14:00) [3]MDI - вполне нормальная и удобная технология.
Юрий Зотов (2009-09-29 14:53:00) [4]> MsGuns © (29.09.09 13:09) [15]
MDI-интерфейс, в котором модальны только диалоги (настроек и пр.), а любые рабочие MDIChild окна умеют дочиться друг к другу (слева, справа, снизу, сверху, в виде табов - как угодно). Очень удобно. Юзер сам составляет себе какой угодно интерфейс, одной лишь мышкой. Ею же легко переносятся данные - и это подтвердит каждый, кому приходилось заполнять банковские реквизиты в предлагаемом Вами модальном интерфейсе.
MsGuns (2009-09-29 14:51:00) [5]На вкус и цвет..
Ухарь (2009-09-29 13:47:00) [6]
> MsGuns © (29.09.09 13:09) [15]
Очень неудобно. Именно из-за невозможности открыть другой документ, пока не закончена работа с первым. А перенести блок данных из одного в другой, тем же драг-н-дропом?
ИМХО, тупиковая парадигма.
MsGuns (2009-09-29 13:09:00) [7]>Ухарь (29.09.09 10:14) [13]
>под модальным интерфейсом что понимается? модальные окна, вызываемые одно из другого?
Ну в общем-то да. Но основная технология основана на принципе невозможности до завершения работы с одним документом открыть другой. За исключением случаев когда при работе с документом нужно посмотреть например в справочники. Так вот и сам документ, и справочник должны отображаться модально. Т.Е. пока не завершил редактирование, например, приходной накладной, невозможно открыть другой документ, пока на закрыл справочник, открытый из накладной, нельзя перейти к накладной, пока не завершил правку в справочнике (тоже через модальную форму естественно), нельзя перейти к справочнику и т.д. Своеобразная "этажерка" из форм, построенная по принципу стэка.
Как показывает практика, такая работа наилучшим образом понятна пользователю и не позволяет запутаться в "окнах", что так легко сделать в MDI-приложении
Ухарь (2009-09-29 10:18:00) [8]
> Я вот все думаю отказаться от mdi, но не могу придумать
> оформление главной формы.
Можно сделать в виде табов, а-ля FireFox, с возможностью закрытия табов
Ухарь (2009-09-29 10:14:00) [9]
> MsGuns © (28.09.09 15:04) [10]
> переработанное под удобный, модальный интерфейс.
под модальным интерфейсом что понимается? модальные окна, вызываемые одно из другого?
K_Lock (2009-09-29 10:08:00) [10]
> У меня есть одно старое бухгалтерско-складское приложение,
> сделанное на MDI с редактированием документов, справочников
> и т.д.
> Все остальные клиенты либо перешли на другое ПО, либо покупали это же, > но переработанное под удобный, модальный интерфейс.
Я вот все думаю отказаться от mdi, но не могу придумать оформление главной формы.
Есть база с десятком справочников, журналов документов, старая версия оформлена в аксессе - есть 1 менюшка из которой все вызывается в стиле mdi, необходимо все это переделать, но с минимальным визуальным отличием.
Если не mdi, то кроме менюшки я не могу придумать, что там показывать, оставить его пустым и все журналы открывать модально ? как то грубо.
Если просто show, то главная форма болтается непонятно как (например если не развернута не весь экран).
Делайть фреймы и заполнять ими главную форму ? А если нужно будет 2 справочника открыть ?
Leonid Troyanovsky (2009-09-28 15:08:00) [11]
> Рамиль © (28.09.09 14:56) [8]
> Или объявит свою переменную.
Или вовсе не объявит.
--
Regards, LVT.
MsGuns (2009-09-28 15:04:00) [12]И еще про MDI
Такой интерфейс чрезвычайно удобен в случаях, когда требуется одновременное отображение нескольких ОДНОТИПНЫХ форм - простейший пример - редактор иконок в самой делфе.
Если же приложение имеет много РАЗНЫХ форм с разным функционалом, то предпочтительнее обячный интерфейс с "автономными" панелями управления. К тому же в MDI весьма гормоздко организовывать модальность.
У меня есть одно старое бухгалтерско-складское приложение, сделанное на MDI с редактированием документов, справочников и т.д. Так вот из всех инсталляций до сих пор работает только в двух конторах и только потому, что с ним общаются опытные старые работники, при которых оно ставилось и которые обучались специально. Все остальные клиенты либо перешли на другое ПО, либо покупали это же, но переработанное под удобный, модальный интерфейс.
Ухарь (2009-09-28 15:00:00) [13]
> MsGuns © (28.09.09 14:51) [7]
Если речь идет о том, чтобы все дочерние формы вели себя аналогично, то тогда действительно опасно, при условии что список типов форм будет расширяться, и тогда требуется общий механизм, по типу [1].
если речь о конкретной форме - то ничего страшного. Код уже написан, "огурцам" ничего дополнительного понимать не нужно.
Рамиль (2009-09-28 14:56:00) [14]Или объявит свою переменную.
MsGuns (2009-09-28 14:51:00) [15]>Ухарь (28.09.09 14:30) [5]
>Вот уже несколько лет делаем так (обниливание глоб. переменной) - ни одной проблемы. Можно >поинтересоваться, что нас ждет?
При АККУРАТНОЙ работе - ничего плохого.
Но в конце концов найдется огурец, который по непониманию ли, по спешке ли, по какой другой причине ли, но не сделает обниливание - тогда будет AV.
И что самое гадкое, это вылезет в самый неподходящий момент. Например, в приложении, в котором ..сят дочерних форм, из которых одна (например) пользователями открывается крайне редко. И вот именно ее и захочет открыть шеф клиента в самый ответственный момент :)
Leonid Troyanovsky (2009-09-28 14:50:00) [16]
> Ухарь (28.09.09 14:30) [5]
> Вот уже несколько лет делаем так (обниливание глоб. переменной)
> - ни одной проблемы. Можно поинтересоваться, что нас ждет?
Глобальный кризис.
--
Regards, LVT.
Ухарь (2009-09-28 14:30:00) [17]
> Неправильное решение, несущее в себе потенциальные проблемы.
>
Вот уже несколько лет делаем так (обниливание глоб. переменной) - ни одной проблемы. Можно поинтересоваться, что нас ждет?
Рамиль (2009-09-28 12:43:00) [18]Неправильное решение, несущее в себе потенциальные проблемы. Надо как в [1]
oldman (2009-09-27 21:00:00) [19]Локальная переменная := флаг/счетчик???
K_Lock (2009-09-27 20:59:00) [20]Inovet, спасибо за ответ.
и как обычно, хорошая мысля, приходит опосля =)
пришел к такому варианту:
if Form1 = nil then
begin
Form1 := TForm1.Create(self);
end;
-------
Action := caFree;
Form1 := nil;