Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

1 копия формы в MDI приложении [D2005]


Страницы:   1 2

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;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо