Кнопка Создать в другом окне приложения - PullRequest
4 голосов
/ 18 июня 2011

Я написал ниже код для создания дополнительной кнопки на калькуляторе, но кнопка не отображается:

var
  Object1 : TButton ;
  Hand: THandle;
begin
   Hand:= FindWindow('CalcFrame', 'Calculator');
   Object1 := TButton.CreateParented(Hand);
   Object1.Show ;
end;

Я получаю элементы управления калькулятора после запуска приведенного выше кода с помощью функции API EnumChildWindow и вижу созданную кнопку в списке элементов управления, которую возвращает EnumChildWindow, но почему созданная кнопка не отображается?

Насколько я помню, я использую этот код в Windows XP, и он работает без проблем, но теперь в Windows 7 созданная кнопка не появляется.

Ответы [ 3 ]

4 голосов
/ 18 июня 2011
Калькулятор

и Paint в Win7 перестраиваются с использованием .NET и WPF, и нет никакого способа «связаться» с кодом .NET через нативный код, особенно WPF, который использует различные способы рисования своих элементов управления.

edit: чтобы ваш код работал для нативных приложений, вы можете использовать такой код:

hand := FindWindow('TForm1','Form1');
object1 := TButton.Create(self);
object1.ParentWindow := hand;
0 голосов
/ 21 августа 2016

вы должны сделать Visible:= False.

var
  Hand: THandle;
  Object1: TButton;
begin
  Hand:= FindWindow('TForm1', 'Form1');
  if Hand <> 0 then
  begin
    Object1:= TButton.CreateParented(Hand);
    Object1.Caption:= 'Test';
    Object1.Visible:= False ;
    Object1.Show;
  end;
end;
0 голосов
/ 18 июня 2011

@ Али: я говорю, что код не работает в любом приложении, например, я создаю форму в delphi и написал ниже код в кнопке:

var
  Hand: THandle;
  Object1: TButton;
begin
  Hand:= FindWindow('TForm1', 'Form1');
  if Hand <> 0 then
  begin
    Object1:= TButton.CreateParented(Hand);
    Object1.Caption:= 'Test';
    Object1.Show;
  end;
end;

код найти дескриптор приложенияИ большинство создает на нем кнопку, она работает в Windows XP, но в Windows 7 кнопка создана, но не показывать!

...