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

Вниз

Форма в dll   Найти похожие ветки 

 
Alicho   (2002-02-07 14:54) [0]

Есть пример загрузки дочерней MDI формы из dll
все работает, но мне надо чтоб форма была не fsMDIChild, а fsNormal, но распологалась в пределах главного окна.

В случае программы без dll я делал так:
ChildForm.Parent:= MainForm;

А тут это дело не прокатывает:
дочерняя форма (которая в dll) появляется на мгновение и пропадает.
Пример здесь:
http://www.radiant.ru/~timereserve/proj.zip


 
BlankAlex ©   (2002-02-07 14:58) [1]

(* ГЛАВНОЕ *)

TfmNetMain = class(TForm)
procedure FormResize(Sender: TObject);
private
{ Private declarations }
Procedure WMMove(var M: TMessage);message WM_Move;
public
{ Public declarations }
end;


{При изменении размеров главной формы изменим размеры дочерней}
procedure TfmNetMain.FormResize(Sender: TObject);
Var
F:TForm ;
Rect:TRect ;
begin
F:=FindForm(TfmOpenProject) ;
If F <> nil Then With F Do Begin
Rect:=GetFormClientRect(Self) ;

If WindowState = wsMaximized Then Begin
Left:=Rect.Left+2;
Top:=Rect.Top+2;
Width:=Rect.Right-Left-2 ;
Height:=Rect.Bottom-Top-2 ;
End ;
End ;
end;

{При передвижении главной формы переместим менеджер проектов}
Procedure TfmNetMain.WMMove(var M: TMessage);
Var
F:TForm ;
Rect:TRect ;
begin
F:=FindForm(TfmOpenProject) ;
If F <> nil Then With F Do Begin
Rect:=GetFormClientRect(Self) ;

If WindowState = wsMaximized Then Begin
Left:=Rect.Left+2;
Top:=Rect.Top+2;
Width:=Rect.Right-Left-2 ;
Height:=Rect.Bottom-Top-2 ;
End ;
End ;
end;

(* ДОЧЕРНЕЕ*)

TfmOpenProject = class(TForm)
private
{ Private declarations }
Procedure WMMoving(var M: TMessage);message WM_Moving;
Procedure WMGetMinMaxInfo(var M: TWMGetMinMaxInfo); message WM_GetMinMaxInfo;
Procedure WMSysCommand(var Message:TMessage); message WM_SYSCOMMAND ;
public
{ Public declarations }
end;

{Если окно максимизировано, то мы не можем двигать его}
Procedure TfmOpenProject.WMMoving(var M: TMessage);
Var
Rect:TRect ;
Begin
If WindowState = wsMaximized Then Begin
Rect:=GetFormClientRect(fmNetMain) ;

PRect(M.LParam)^.Left:=Rect.Left +2 ;
PRect(M.LParam)^.Top:=Rect.Top +2 ;
PRect(M.LParam)^.Right:=Rect.Right-2 ;
PRect(M.LParam)^.Bottom:=Rect.Bottom -2 ;
End ;
End ;

{Установка координат раскрытия окна}
procedure TfmOpenProject.WMGetMinMaxInfo(var M: TWMGetMinMaxInfo);
Var
Rect:TRect ;
begin
Rect:=GetFormClientRect(fmNetMain) ;
M.MinMaxInfo.ptMaxPosition.x := Rect.Left +2 ;
M.MinMaxInfo.ptMaxPosition.y := Rect.Top +2 ;
M.MinMaxInfo.ptMaxTrackSize.x:= Rect.Right-Rect.Left-4 ;
M.MinMaxInfo.ptMaxTrackSize.y:= Rect.Bottom-Rect.Top-4 ;
End ;


{Определение размеров клиентской области}
Function GetFormClientRect(F:TForm):TRect ;
Begin
Windows.GetWindowRect(F.ClientHandle,Result) ;
End ;


Единственное, я обрабатывал все только для случая, когда псевдодочерняя форма максимизирована,
т.е. она в максимизированном состоянии не может выйти за пределы родительской и перемещается вместе с ней, тебе нужно еще обрабатывать, когда форма не максимизирована.
И еще, стиль псевдочайлд формы fsStayOnTop, правда я не пользуюсь стандартным, а использую APi-шные функции для этого.


 
Alicho   (2002-02-07 16:35) [2]

BlankAlex
Спасибо, приму к сведенью как вариант
Но все же интересно, почему в одном проекте все пашет,
а exe + dll - нет?


 
BlankAlex ©   (2002-02-07 17:06) [3]

Кстати, посмотри статью на http://www.delphikingdom.com/helloworld/md_dll.htm


 
Alicho   (2002-02-07 21:08) [4]

BlankAlex
Так этот пример и взят за основу


 
Alicho   (2002-02-08 19:19) [5]

help!!!



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

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

Наверх




Память: 0.48 MB
Время: 0.01 c
6-79411
AKA
2001-08-25 10:36
2002.02.25
Как можно из дельфи включать подключение к инету и отключать через прокси???


3-79265
DmitryB
2002-01-31 00:17
2002.02.25
Как создать простейшую таблицу


3-79250
Максимка
2002-01-29 18:55
2002.02.25
Как в поле таблицы Oracle типа NUMBER записать NULL ?


3-79280
Ser_Kham1
2002-01-31 12:39
2002.02.25
Разумная структура данных


14-79448
Феликс
2002-01-07 21:34
2002.02.25
Жванцкого побили....