Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.02.25;
Скачать: [xml.tar.bz2];

Вниз

Форма в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.004 c
3-79304
alexts
2002-01-30 13:35
2002.02.25
Распределенные базы данных


6-79416
Kirill_
2001-12-08 01:16
2002.02.25
WNET*


7-79479
Asisyay
2001-10-31 15:35
2002.02.25
Intel 8254


3-79275
vopros
2002-01-31 10:30
2002.02.25
При групперовке в QReport сумму в GroupFooter выдает не верную...


3-79288
Guest.
2002-01-31 11:07
2002.02.25
Query





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский