sergey999 Опубликовано 31 января, 2015 Поделиться Опубликовано 31 января, 2015 Подскажите пожалуйста, каким образом можно встроить фрейм Fire Monkey в окно Windows приложения в DLL? Есть HWND родительского окна и форма Fire Monkey должна отображаться как дочернее окно. Если возможно дать ссылку на пример C++ Builder XE7. Цитата Ссылка на комментарий
0 DirtyBorov Опубликовано 29 июля, 2016 Поделиться Опубликовано 29 июля, 2016 Посмотри у GunSmoker, но только для Delphi. Там довольно хорошо разжевано. И есть рабочий пример. Однако на XE7, он не пошел (как всегда уже все поменяли). Но по крайней мере ты поймешь как и что надо делать. http://www.gunsmoker.ru/2011/12/delphi.html Цитата Ссылка на комментарий
0 vic85 Опубликовано 16 августа, 2017 Поделиться Опубликовано 16 августа, 2017 (изменено) Делаем так, в dll метод создания формы может быть таким procedure Init(ParentWindow: HWND; const Rect: Windows.TRect); stdcall; begin try StartupInput.DebugEventCallback := nil; StartupInput.SuppressBackgroundThread := False; StartupInput.SuppressExternalCodecs := False; StartupInput.GdiplusVersion := 1; GdiplusStartup(gdiplusToken, @StartupInput, nil); Form1 := TForm1.Create(nil); Form1.Show; if ParentWindow <> 0 then begin //Скроем иконку приложения с панели задач ShowWindow(ApplicationHWND, SW_HIDE); //Сменим стиль окна что бы оно не перехватывало фокус с родительского окна SetWindowLong(FmxHandleToHWND(Form1.Handle), GWL_STYLE, GetWindowLong(FmxHandleToHWND(Form1.Handle), GWL_STYLE) and (not WS_POPUP) OR WS_CHILD); //Встроим окно в родительское Windows.SetParent(FmxHandleToHWND(Form1.Handle), ParentWindow); //Установим размеры окна такими которыми инициализирована DLL SetWindowPos(FmxHandleToHWND(Form1.Handle), 0, Rect.Left, Rect.Top, RectWidth(Rect), RectHeight(Rect), 0); end; except on E: Exception do MessageBox(0, PChar(E.Message), '', 0); end; end; Эта функция создаст форму и встроит ее на хост в vcl приложении. У формы в dfm должен быть убраны границы что бы оно вписалось. Так же для того что бы форма изменяла размеры вписываясь в хост экспортируем функцию получения хэндла function GetFormHandle: HWND; stdcall; begin Result := 0; try Result := FormToHWND(Form1); except on E: Exception do MessageBox(0, PChar(E.Message), '', 0); end; end; Собственно в хосте загружаем dll, и создаем форму кидая ее на панель Init(panel1.Handle, panel1.ClientRect); Что бы форма меняла размер как и панель - нужно создать обработчик изменения размеров панели и там менять размер встроенной формы procedure THostForm.Panel1Resize(Sender: TObject); var h: HWND; Rect: Windows.TRect; begin h := 0; Rect := Panel1.ClientRect; if Assigned(FGetFormHandleProc) then h := FGetFormHandleProc; if h <> 0 then SetWindowPos(h, 0, Rect.Left, Rect.Top, RectWidth(Rect), RectHeight(Rect), 0); end; Вот так получается втсроить FMX форму из Dll в VCL приложение Изменено 16 августа, 2017 пользователем vic85 Astghik 1 Цитата Ссылка на комментарий
Вопрос
sergey999
Подскажите пожалуйста, каким образом можно встроить фрейм Fire Monkey в окно Windows приложения в DLL? Есть HWND родительского окна и форма Fire Monkey должна отображаться как дочернее окно. Если возможно дать ссылку на пример C++ Builder XE7.
Ссылка на комментарий
2 ответа на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.