Перейти к содержанию
Fire Monkey от А до Я
  • 0

Присвоение окна определенному контролу на форме


Winexcel

Вопрос

Доброго времени суток, имею следующую проблему: нужно присвоить созданное окно контроллу на форме, например на TPanel, при условии что форма на которой лежит контролл имеет свойство Transparency:=True. Окно может создаваться как через WinApi, так и через FMX, пробовал два способа:

Способ №1: Просто создать окно средствами FMX и присовить это окно к TPanel:

VAR
  MyForm:TForm3;
begin
  MyForm:=TForm3.Create(Panel1);
  MyForm.Show;
  Panel1.AddObject(MyForm);

Данный способ не работает, возможно я что-то не так делаю?

Способ №2: Создать дочернее окно через WinApi:

var
h_Instance : HINST;
h_wnd : HWND;
Form:TCommonCustomForm;
begin
h_Instance := GetModuleHandle(NiL);
h_Wnd:=0;
h_Wnd := CreateWindowEx(WS_EX_TOPMOST, PChar(32770), 'TestWindow', WS_CHILD or WS_VISIBLE or WS_BORDER, 0, 0, 100, 100, FMXHandleToHWND(Self.Handle), 0, h_Instance, NiL);
end;

Второй способ работает, но тогда не выполняется условие "при условии что форма на которой лежит контролл имеет свойство Transparency:=True", форма что создаётся через винапи также прозрачная на 100%.

Собственно вопрос: можно ли как-то создать форму на контролле?


Для чего вообще этот мазохизм? Мне нужно в дальнейшем создавать через винапи другие контроллы, на определеной области в моей форме, чтобы их создать я должен знать HWND окна, для этого собственно всё и делается. На VCL всё очень просто, указал Handle нужного компонента и всё. Если кто знает как решить данную проблему, помогите пожалуйста.

Изменено пользователем Winexcel
Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Модераторы

не совсем понимаю выбор FMX, если Вам кросс не нужен. делайте на VCL.

В FMX только один хэндл, и сообщения винапи обрабатываются криво, не мучайтесь, пишите на VCL

Ссылка на комментарий
  • 0
1 час назад, Равиль Зарипов (ZuBy) сказал:

не совсем понимаю выбор FMX, если Вам кросс не нужен. делайте на VCL.

В FMX только один хэндл, и сообщения винапи обрабатываются криво, не мучайтесь, пишите на VCL

Задача стоит писать на FMX

Ссылка на комментарий
  • 1

Можете попробовать что-нибудь извлечь из https://community.embarcadero.com/blogs/entry/xe5-165

Но в общем присоединяюсь в своём недоумении к Равилю.

Ссылка на комментарий
  • 0

Задача стоит следующая если перефразировать, нужно создать область которая будет иметь Handle(я взял форму потому что на FMX только она имеет Handle), эту форму нужно будет создавать и закреплять на месте какого либо контролла, чтобы она смещалась вместе с этим контролом, машстабировалась как контролл, и всё в таком духе. На этот контролл я хочу забрасывать объекты через винапи..задача очень специфическая.

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...