Конференция "Основная" » DLL немодальный вызов, MDI [D7, Win2k, WinXP]
 
  • IntruderLab (11.03.08 15:32) [0]
    Задачка такова, необходимо разработать MDI приложение, все формы хранятся в dll. Не получается вызов формы как Child формы, как сделать?
    Привожу кусочек из DLL
    var
     DLLForm  : TDLLForm;
     CallForm : THandle;
    implementation

     {$R *.DFM}
    //******************************************************************************
    function ShowModalForm: Integer;
    //Modal Call
    begin
     DllForm := TDllForm.Create(Application);
     Result  := DLLForm.ShowModal;
     DLLForm.Free;
    end;
    //******************************************************************************
    procedure ShowForm(Appl, Form: THandle);
    //NonModal Call
    begin
     Application.Handle := Appl;
     DllForm            := TDllForm.Create(Application);
     DLLForm.FormStyle  := fsMDIChild;
     DLLForm.Color      := clMoneyGreen;
     CallForm           := Form;
     DLLForm.Show;
    end;
    //******************************************************************************

    и кусочек из приложения
    procedure TTestMain.Button1Click(Sender: TObject);
    // Модальный вызов
    begin
      Button2.Enabled := False;
      label1.Caption := 'ModalResult = '+IntToStr(ShowModalForm);
      label1.Show; // Показываем результат вызова
      Button2.Enabled := True
    end;

    procedure TTestMain.Button2Click(Sender: TObject);
    // Немодальный вызов
    begin
     Button1.Enabled := False;
     Button2.Enabled := False;
     Button3.Enabled := True; label1.Hide;
     ShowForm(Application.Handle, Self.Handle) ;
    end;
  • Leonid Troyanovsky © (11.03.08 15:41) [1]

    > IntruderLab   (11.03.08 15:32)  

    > формы хранятся в dll. Не получается вызов формы как Child
    > формы, как сделать?

    Не хранить формы в dll.

    --
    Regards, LVT.
  • Сергей М. © (11.03.08 16:08) [2]

    > Не получается вызов формы как Child формы, как сделать?


    If the form is the main form of an MDI application, its FormStyle property must be set to fsMDIForm.
  • IntruderLab (11.03.08 16:10) [3]

    > If the form is the main form of an MDI application, its
    > FormStyle property must be set to fsMDIForm.


    Это я естественно указываю - не работает
  • IntruderLab (11.03.08 16:11) [4]

    > > IntruderLab   (11.03.08 15:32)  
    >
    > > формы хранятся в dll. Не получается вызов формы как Child
    > > формы, как сделать?
    >
    > Не хранить формы в dll.
    >
    > --
    > Regards, LVT.


    Суть такова - что именно в dll и именно не модельные формы для MDI приложения нужны :(
  • Сергей М. © (11.03.08 16:14) [5]
    У твоей dll св-во MainForm объекта Application равно nil.
    Удивись, почеши репу, сделай выводы)
  • IntruderLab (11.03.08 16:42) [6]

    > У твоей dll св-во MainForm объекта Application равно nil.
    >
    > Удивись, почеши репу, сделай выводы)


    Удивился, но мне делфа пишет, то это ридонли свойство, что делать - репа болит от чеса :)
  • Сергей М. © (11.03.08 16:45) [7]
    Ну делать ?)

    Для начала распрощаться с мыслью об использовании в кач-ве хост-приложения для твоих dll приложений, разработанных не в Делфи или в Делфи иных версий.

    Подтверди готовность)
  • clickmaker © (11.03.08 16:48) [8]

    > [6] IntruderLab   (11.03.08 16:42)

    а почему не экспортировать из DLL фреймы? А mdi-дети пусть себе живут в экзе
  • IntruderLab (11.03.08 17:12) [9]

    > Сергей М. ©   (11.03.08 16:45) [7]
    >
    > Ну делать ?)
    >
    > Для начала распрощаться с мыслью об использовании в кач-
    > ве хост-приложения для твоих dll приложений, разработанных
    > не в Делфи или в Делфи иных версий.
    >
    > Подтверди готовность)


    Готовность подтверждаю :)
    Сейчас сделал вот что: Передал в dll помимо Application.Handle еще MainForm.Handle и вызвал Child с помощью ParentWindow, форма открылась - но ессно не все что надо....
  • Сергей М. © (11.03.08 17:15) [10]

    > Готовность подтверждаю


    Ну тогда убирай нафих все эти "передачи")

    Все что нужно - собрать взаимодействующие проекты с установленной опцией использования пакетов времени выполнения (см. Project Options -> Packages -> Build With Run-Time Packages)

    Вуаля !)
  • IntruderLab (11.03.08 17:17) [11]
    если имеется ввиду bpl то не подходит.... надо именно dll
  • IntruderLab (11.03.08 17:31) [12]
    Хотя уже согласен и на bpl
  • Leonid Troyanovsky © (11.03.08 17:49) [13]

    > IntruderLab   (11.03.08 17:31) [12]

    > Хотя уже согласен и на bpl

    Соглашайся на монолитный экзешник,
    и можешь спокойно идти по паре пива.

    --
    Regards, LVT.
  • MetalFan © (11.03.08 17:50) [14]
    Может тогда согласишься и на отказ от внешних модулей? ))
  • MetalFan © (11.03.08 17:52) [15]

    > Leonid Troyanovsky ©

    Опередили
  • Сергей М. © (11.03.08 19:25) [16]

    > если имеется ввиду bpl


    Касаемо твоей вожделенной "dll с формой" - нет, не имеется)

    Форма твоя как родилась в твоей dll, так там и будет жить, не волнуйся)
  • Amoeba © (12.03.08 01:23) [17]
    О загрузке дочерней формы (MDIChild) из DLL:
    http://www.delphikingdom.com/asp/viewitem.asp?catalogid=276
  • IntruderLab (12.03.08 09:20) [18]

    > Amoeba ©   (12.03.08 01:23) [17]
    >
    > О загрузке дочерней формы (MDIChild) из DLL:
    > http://www.delphikingdom.com/asp/viewitem.asp?catalogid=276
    >


    спасибо, посмотрю
  • IntruderLab (12.03.08 16:14) [19]

    > Amoeba ©   (12.03.08 01:23) [17]
    >
    > О загрузке дочерней формы (MDIChild) из DLL:
    > http://www.delphikingdom.com/asp/viewitem.asp?catalogid=276
    >


    Плохое распределение памяти, глубина вложений форм не более одного, а у меня  дочерняя форма может вызывать до 3 модальных (линейных) формы. Так что видимо придется работать с BPL
 
Конференция "Основная" » DLL немодальный вызов, MDI [D7, Win2k, WinXP]
Есть новые Нет новых   [134484   +49][b:0][p:0.001]