Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.11.15;
Скачать: CL | DM;

Вниз

1 копия формы в MDI приложении   Найти похожие ветки 

 
K_Lock   (2009-09-27 19:47) [0]

Господа, подскажите пожалуйста с таким вопросом:

есть MDI приложение, для открытия формы используется:
Form1 := TForm1.Create(self);

для закрытия:  Action := caFree;

Каждый вызов:  Form1 := TForm1.Create(self);  создает новую копию формы.

Вопрос: как реализовать открытие только 1 копии формы? )
Заранее спасибо.


 
Inovet ©   (2009-09-27 20:34) [1]

> [0] K_Lock   (27.09.09 19:47)
> Каждый вызов:  Form1 := TForm1.Create(self);  создает новую
> копию формы.
>
> Вопрос: как реализовать открытие только 1 копии формы? )

Пройтись по дочерним и проверить не создана ли уже форма такого класса
MDIChildren, MDIChildCount


 
K_Lock   (2009-09-27 20:59) [2]

Inovet, спасибо за ответ.

и как обычно, хорошая мысля, приходит опосля =)

пришел к такому варианту:

if Form1 = nil then
 begin
   Form1 := TForm1.Create(self);
 end;
-------
Action := caFree;
Form1 := nil;


 
oldman ©   (2009-09-27 21:00) [3]

Локальная переменная := флаг/счетчик???


 
Рамиль ©   (2009-09-28 12:43) [4]

Неправильное решение, несущее в себе потенциальные проблемы. Надо как в [1]


 
Ухарь   (2009-09-28 14:30) [5]


> Неправильное решение, несущее в себе потенциальные проблемы.
>  


Вот уже несколько лет делаем так (обниливание глоб. переменной) - ни одной проблемы. Можно поинтересоваться, что нас ждет?


 
Leonid Troyanovsky ©   (2009-09-28 14:50) [6]


> Ухарь   (28.09.09 14:30) [5]

> Вот уже несколько лет делаем так (обниливание глоб. переменной)
> - ни одной проблемы. Можно поинтересоваться, что нас ждет?

Глобальный кризис.

--
Regards, LVT.


 
MsGuns ©   (2009-09-28 14:51) [7]

>Ухарь   (28.09.09 14:30) [5]
>Вот уже несколько лет делаем так (обниливание глоб. переменной) - ни одной проблемы. Можно >поинтересоваться, что нас ждет?

При АККУРАТНОЙ работе - ничего плохого.
Но в конце концов найдется огурец, который по непониманию ли, по спешке ли, по какой другой причине ли, но не сделает обниливание - тогда будет AV.
И что самое гадкое, это вылезет в самый неподходящий момент. Например, в приложении, в котором ..сят дочерних форм, из которых одна (например) пользователями открывается крайне редко. И вот именно ее и захочет открыть шеф клиента в самый ответственный момент :)


 
Рамиль ©   (2009-09-28 14:56) [8]

Или объявит свою переменную.


 
Ухарь   (2009-09-28 15:00) [9]


> MsGuns ©   (28.09.09 14:51) [7]


Если речь идет о том, чтобы все дочерние формы вели себя аналогично, то тогда действительно опасно, при условии что список типов форм будет расширяться, и тогда  требуется общий механизм, по типу [1].
если речь о конкретной форме - то ничего страшного. Код уже написан, "огурцам" ничего дополнительного понимать не нужно.


 
MsGuns ©   (2009-09-28 15:04) [10]

И еще про MDI
Такой интерфейс чрезвычайно удобен в случаях, когда требуется одновременное отображение нескольких ОДНОТИПНЫХ форм - простейший пример - редактор иконок в самой делфе.
Если же приложение имеет много РАЗНЫХ форм с разным функционалом, то предпочтительнее обячный интерфейс с "автономными" панелями управления. К тому же в MDI весьма гормоздко организовывать модальность.
У меня есть одно старое бухгалтерско-складское приложение, сделанное на MDI с редактированием документов, справочников и т.д. Так вот из всех инсталляций до сих пор работает только в двух конторах и только потому, что с ним общаются опытные старые работники, при которых оно ставилось и которые обучались специально. Все остальные клиенты либо перешли на другое ПО, либо покупали это же, но переработанное под удобный, модальный интерфейс.


 
Leonid Troyanovsky ©   (2009-09-28 15:08) [11]


> Рамиль ©   (28.09.09 14:56) [8]

> Или объявит свою переменную.

Или вовсе не объявит.

--
Regards, LVT.


 
K_Lock   (2009-09-29 10:08) [12]


> У меня есть одно старое бухгалтерско-складское приложение,
>  сделанное на MDI с редактированием документов, справочников
> и т.д.
> Все остальные клиенты либо перешли на другое ПО, либо покупали это же, > но переработанное под удобный, модальный интерфейс.


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

Если не mdi, то кроме менюшки я не могу придумать, что там показывать, оставить его пустым и все журналы открывать модально ? как то грубо.
Если просто show, то главная форма болтается непонятно как (например если не развернута не весь экран).
Делайть фреймы и заполнять ими главную форму ? А если нужно будет 2 справочника открыть ?


 
Ухарь   (2009-09-29 10:14) [13]


> MsGuns ©   (28.09.09 15:04) [10]


> переработанное под удобный, модальный интерфейс.


под модальным интерфейсом что понимается? модальные окна, вызываемые одно из другого?


 
Ухарь   (2009-09-29 10:18) [14]


> Я вот все думаю отказаться от mdi, но не могу придумать
> оформление главной формы.


Можно сделать в виде табов, а-ля FireFox, с возможностью закрытия табов


 
MsGuns ©   (2009-09-29 13:09) [15]

>Ухарь   (29.09.09 10:14) [13]
>под модальным интерфейсом что понимается? модальные окна, вызываемые одно из другого?

Ну в общем-то да. Но основная технология основана на принципе невозможности до завершения работы с одним документом открыть другой. За исключением случаев когда при работе с документом нужно посмотреть например в справочники. Так вот и сам документ, и справочник должны отображаться модально. Т.Е. пока не завершил редактирование, например, приходной накладной, невозможно открыть другой документ, пока на закрыл справочник, открытый из накладной, нельзя перейти к накладной, пока не завершил правку в справочнике (тоже через модальную форму естественно), нельзя перейти к справочнику и т.д. Своеобразная "этажерка" из форм, построенная по принципу стэка.
Как показывает практика, такая работа наилучшим образом понятна пользователю и не позволяет запутаться в "окнах", что так легко сделать в MDI-приложении


 
Ухарь   (2009-09-29 13:47) [16]


> MsGuns ©   (29.09.09 13:09) [15]


Очень неудобно. Именно из-за невозможности открыть другой документ, пока не закончена работа с первым.  А перенести блок данных из одного в другой, тем же драг-н-дропом?
ИМХО, тупиковая парадигма.


 
MsGuns ©   (2009-09-29 14:51) [17]

На вкус и цвет..


 
Юрий Зотов ©   (2009-09-29 14:53) [18]

> MsGuns ©   (29.09.09 13:09) [15]

MDI-интерфейс, в котором модальны только диалоги (настроек и пр.), а любые рабочие MDIChild окна умеют дочиться друг к другу (слева, справа, снизу, сверху, в виде табов - как угодно). Очень удобно. Юзер сам составляет себе какой угодно интерфейс, одной лишь мышкой. Ею же легко  переносятся данные - и это подтвердит каждый, кому приходилось заполнять банковские реквизиты в предлагаемом Вами модальном интерфейсе.


 
Игорь Шевченко ©   (2009-09-29 15:14) [19]

MDI - вполне нормальная и удобная технология.


 
Жорж   (2009-09-29 20:09) [20]


> Юрий Зотов ©   (29.09.09 14:53) [18]


> умеют дочиться друг к другу


А какой инструмент использовать? Родной то механизм вроде сильно глючный? Или у меня устаревшая информация?

ЗЫ. имеется в виду Delphi, а не Java :-)


 
Юрий Зотов ©   (2009-09-29 21:06) [21]

> Жорж   (29.09.09 20:09) [20]

Родного такого механизма нет, писали сами.



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

Текущий архив: 2009.11.15;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.014 c
15-1253223003
Юрий
2009-09-18 01:30
2009.11.15
С днем рождения ! 18 сентября 2009 пятница


2-1254421987
Семён. А
2009-10-01 22:33
2009.11.15
Как модифицировать функцию? + Array


1-1208019148
TIF
2008-04-12 20:52
2009.11.15
Свойство DropDownCount в ComboBox по Vista


15-1253260531
pe@rl
2009-09-18 11:55
2009.11.15
Еще про GET и POST. Но уже на Perl


2-1254420046
faiwer
2009-10-01 22:00
2009.11.15
PasteToClipboard, RichEdit