Форум: "Начинающим";
Текущий архив: 2009.11.15;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.006 c