Главная страница
    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.005 c
1-79338
ЕвгенийА
2002-02-08 01:20
2002.02.25
Вопрос по формам...


1-79402
Loxly
2002-02-09 18:36
2002.02.25
Как узнать ширину (width) строки, отображаемой в TMemo?


3-79277
Johnmen
2002-01-30 11:46
2002.02.25
Подключенные user а к IB DB


3-79256
ruslan_as
2002-01-28 10:35
2002.02.25
InterBase не работает пока не перезапустиш программу


1-79371
Aleksandr
2002-02-08 19:23
2002.02.25
Как из программы узнать формат строки с датой/временем для SQL-сервера





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский