Доброго времени суток, имею следующую проблему: нужно присвоить созданное окно контроллу на форме, например на 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
Доброго времени суток, имею следующую проблему: нужно присвоить созданное окно контроллу на форме, например на 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 нужного компонента и всё. Если кто знает как решить данную проблему, помогите пожалуйста.
Ссылка на комментарий
6 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.