![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
GetParent
Степан Журавлев © (2007-04-05 13:49:00)Привет, есть проект с двумя формочками, одна встроенна в другую через SetParent.
procedure TForm2.FormShow(Sender: TObject);
begin
Windows.SetParent(Handle,Form1.handle);
end;
А вот для этой встроенной формочки GetParent почемуто возвращает 0 :(
procedure TForm2.Button1Click(Sender: TObject);
begin
ShowMessage(IntToStr(Windows.t(Handle)));
end;
Кто знает в чем дело?
Игорь Шевченко (2007-04-09 15:54:00) [1]
> Привет, есть проект с двумя формочками, одна встроенна в
> другую через SetParent.
Как ты понимаешь, через SetParent можно встраивать только окна, имеющие стиль WS_CHILD, у форм его по умолчанию нет.
Если очень хочется, то делай так
{
Модуль: Child
Описание: Базовый класс для форм, которые могут отображаться как независимые
модальные или немодальные формы, а также быть дочерними окнами
в любом другом окне.
Авторы: Стив Тейксейра, Ксавье Пачеко (Delphi 5 Руководство разработчика,
том 1, стр. 170).
Дата создания: 16.12.2002
История изменений:
}
unit Child;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs;
type
TfAbstractChild = class(TForm)
private
FAsChild: Boolean;
FTempParent: TWinControl;
protected
procedure CreateParams (var Params: TCreateParams); override;
procedure Loaded; override;
public
constructor Create (AOwner: TComponent); overload; override;
constructor Create (AOwner: TComponent; AParent: TWinControl);
reintroduce; overload;
end;
implementation
{$R *.dfm}
constructor TfAbstractChild.Create (AOwner: TComponent);
begin
FAsChild := false;
inherited;
end;
constructor TfAbstractChild.Create (AOwner: TComponent; AParent: TWinControl);
begin
FAsChild := true;
FTempParent := AParent;
inherited Create (AOwner);
end;
procedure TfAbstractChild.CreateParams (var Params: TCreateParams);
begin
inherited;
if FAsChild then
Params.Style := Params.Style or WS_CHILD;
end;
procedure TfAbstractChild.Loaded;
begin
inherited;
if FAsChild then begin
Align := alClient;
BorderStyle := bsNone;
BorderIcons := [];
Parent := FTempParent;
Position := poDefault;
end;
end;
end.
И наследуй свою форму от этой.
Все прекрасно встраивается
Leonid Troyanovsky (2007-04-09 15:37:00) [2]
> Степан Журавлев (09.04.07 14:05) [4]
> По теме есть что?
Тебе ж объяснили, что:
1. дельфийские формы для этого не предназначены
2. тема эта не для здешней конференции, а "начинающим"
--
Regards, LVT.
Степан Журавлев (2007-04-09 14:05:00) [3]
> Leonid Troyanovsky © (05.04.07 23:13) [3]
Фро фрейм вкурсе, для конкретной задачи не подходит.
По теме есть что?
Leonid Troyanovsky (2007-04-05 23:13:00) [4]
> Степан Журавлев (05.04.07 13:49)
> Привет, есть проект с двумя формочками, одна встроенна в
> другую через SetParent.
Не надо ничего такого строить.
Особливо в здешней конфренции.
Ведь не даром TFrame придуман.
--
Regards, LVT.
IceBeerg (2007-04-05 18:32:00) [5]А просто
ShowMessage(IntToStr(Form2.GetPalette));пробовал?
Степан Журавлев (2007-04-05 14:05:00) [6]сорри, правильно так...
procedure TForm2.Button1Click(Sender: TObject);
begin
ShowMessage(IntToStr(Windows.GetParent(Handle)));
end;