|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Динамическое создание формы
А может быть и не формы, наткнулся на идею создания компонента вне формы, поискал, но кроме самой идеи ничего не нашел.
Собсвенно задача: написать программу по-типу "Записок" в Win7 т.е. с возможностью открытия множесва окон (немодально), с перетаскиванием по рабочему столу и произвольным закрытием отдельных окон, но с главным окном из которого (и только из него) открывется произвольное количество окон, которые уничтожаются при закрытии приложения (последнее понятно Owner:= Form1, ну или как-то так). Можно по-другому сформулировать: MDI приложение где у главного окна только меню, а дочерние открываются вне родительской формы. Третий вариант самодельный класс наследник, например, TWinControl, вне главной формы, но по-моему это гемморойный вариант. Вобщем вот набросок: Код:
unit MineForms; ------------ type TCmbMetters = class(TComboBox) public constructor Create(AOwner: TComponent); override; end; TFrmProfile = class(TForm) CmbMetters: TCmbMetters; public constructor Create(AOwner: TComponent); override; end; implementation constructor TCmbMetters.Create(AOwner: TComponent); begin inherited Create(AOwner); Parent:= AOwner as TForm; Width:= 200; Text:= '-Выберете материал-'; with Items do begin Append('Сталь'); Append('Нержавейка'); Append('Д16'); end; end; constructor TFrmProfile.Create(AOwner: TComponent); begin inherited Create(AOwner); CmbMetters:= TCmbMetters.Create(Self); end; end. Код:
unit Unit1; ------------------- type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var F: TFrmProfile; begin F:= TFrmProfile.Create(Application); end; end. Да! Важно - динамические окна нужны сами по-себе, ни какие данные из них, ни в главное ни в дочение окна не передаются. |
#2
|
||||
|
||||
Спасибо всем ответившим
проблемму решил сам: то что надо использовать CreateNew я уже выяснил, а вот то что перекрывать нужно соответствующий конструктор долго не мог сообразить Тем не менее еще один вопрос: Как уничтожить динамическое окно при закрытии? |
#3
|
||||
|
||||
Вот как ответить на поставленный вопрос без кода ^) ?, - при выходе (ондестрой) выполнить - хендл(который был CreateNew...).Free/Destroy... КЭП
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
Помидоркин (02.05.2014)
|
#4
|
||||
|
||||
Цитата:
Цитата:
Цитата:
ОнДестрой - свойство, типа - событие, когда событие возникает вызывается соответствующий метод, в данном случае destructor Destroy; , вызывать в обработчике сам обработчик как то неправильно. Код:
procedure TForm1.Button1Click(Sender: TObject); var F: TFrmProfile; begin F:= TFrmProfile.CreateNew(Application); F.Show; Label1.Caption:= IntToStr(Application.ComponentCount); end; вобщем дальше ничё непонимаю |
#5
|
|||
|
|||
назначить обработчик OnCloseQuery, а в нём Action:=caFree;
|
#6
|
||||
|
||||
Цитата:
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#7
|
||||
|
||||
Цитата:
Вобщем надо смотреть событие OnClose. Последний раз редактировалось Помидоркин, 03.05.2014 в 14:52. |