Поместите окно позади любого другого существующего стороннего окна - PullRequest
0 голосов
/ 07 октября 2009

Чтобы сделать скриншот определенного окна, мне нужно поместить TForm белого цвета за этим окном. Какой Windows API я могу использовать, чтобы изменить z-порядок моего окна и правильно разместить его?

Ответы [ 3 ]

4 голосов
/ 07 октября 2009

Попробуйте функцию SetWindowPos().

1 голос
/ 07 октября 2009

В Delphi вы можете использовать метод SendToBack, свойства .Top и .Left.

form1.Top := ...;
form1.Left := ...;
form1.SendToBack;

процедура SendToBack;

Описание

Используйте SendToBack, чтобы изменить порядок перекрывающиеся элементы управления или формы.

Порядок расположения элементов управления на друг над другом (также называемый Z порядок) зависит от порядка элементы управления размещены на форме. За Например, если вы поместите ярлык и изображение на форме, так что один сверху другой, тот, который был помещен первый на форме становится тот, на дно. Потому что и этикетка, и изображение неоконные элементы управления, они «складываются» так, как вы их ожидаете к. Вызовите метод SendToBack для верхний объект, чтобы переместить его ниже другого объект.

Порядок размещения двух окон управление такое же, как укладка двух неоконных элементов управления. За Например, если вы поместите заметку на форму, затем поставьте флажок поверх него, флажок остается сверху. призвание SendToBack для флажка делает заметка появляется сверху.

Порядок размещения оконных и неоконные элементы управления не могут быть смешались. Например, если вы положите памятка, оконный элемент управления, на форме, а затем положить ярлык, не оконный контроль, помимо этого, этикетка исчезает за памяткой Оконный элементы управления всегда располагаются поверх неоконные элементы управления. В этом пример вызова метода SendToBack из мемо ничего не делает, лейбл остается за памяткой.

Если элемент управления имеет фокус ввода когда метод SendToBack выполняется, теряет фокус ввода.

(Edit: WinSnap - очень хорошая утилита для снятия и редактирования скриншотов)

0 голосов
/ 07 октября 2009

Если вы можете получить ручку окна, которое вы хотите впереди, то я бы предположил, что Псевдокод:

MyAppWindow.BringToFront

с последующим

TargetWindow.BringToFront

Должен ли иметь желаемый эффект, да?

...