![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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
|
||||
|
||||
|
Цитата:
только делаю всё по принципу - породил объект самостоятельно, тогда если он уже не нужен его надо грохнуть свойством .Free или .Destroy, а самое интересное, если парент у объекта TForm (сиречь Application), то тогда вообще можно его и не уничтожать самому, сборка сделает это при выходе автоматом |
|
#7
|
||||
|
||||
|
Цитата:
Вобщем надо смотреть событие OnClose. Последний раз редактировалось Помидоркин, 03.05.2014 в 14:52. |