2015-04-11 2 views
4

Я хочу знать, если это возможно, и если да, то как изменить стиль рамки формы на Windows Basic вместо темы Aero? Очевидно, принимая во внимание, включен ли Aero или нет, в первую очередь, если это не так, нет необходимости пытаться изменить стиль границы.Как изменить форму границы на Windows Basic вместо Aero Style?

Таким образом, вместо:

enter image description here

Мы имеем: (макет изображения)

enter image description here

MDI приложений уже делают это для ребенка формы, но я не хотите или нужно приложение MDI. Я попытался просмотреть источник Vcl.Forms, чтобы узнать, могу ли я найти что-то связанное, но я не смог - я мог ошибаться, но я действительно думаю, что способ, которым рисуются MDI Forms, определяется Windows, а не Delphi.

DSiWin32 содержит несколько функций, связанных с Aero, таких как определение того, включен или отключен Aero, а также был включен и отключен Aero. Однако это похоже на изменение системы, а не на на основе формы/окна, это также вызывает задержку экрана, а тема изменена, что не очень хорошо.

Я не уверен, куда идти с этого момента. Есть ли что-то простое, что я мог упустить? Нужно ли создавать и переопределять наш собственный TForm с определенными флагами и т. Д., Чтобы достичь этого, или, возможно, есть способ изменить стиль формы в любой момент, например Enable/Disable Aero для формы?

Проще говоря, я хочу знать, если это возможно, не прибегая к приложениям MDI, можем ли мы изменить любую форму/окно границы на тему Windows Basic, если Aero включен в первую очередь?

ответ

5

Звоните DwmSetWindowAttribute, передавая атрибут DWMWA_NCRENDERING_POLICY со значением DWMNCRP_DISABLED.

type 
    TForm1 = class(TForm) 
    protected 
    procedure CreateWnd; override; 
    end; 

procedure TForm1.CreateWnd; 
var 
    Policy: Integer; 
begin 
    inherited; 
    Policy := DWMNCRP_DISABLED; 
    DwmSetWindowAttribute(WindowHandle, DWMWA_NCRENDERING_POLICY, @Policy, 
    SizeOf(Policy)); 
end; 

Я проигнорировал здесь ошибку. Вы можете определить, что ответ на ошибки стоит. Я также не тестировал, поддерживает ли операционная система этот вызов функции, но опять же вы можете сделать это, если вам нужно поддерживать XP.

Обратите внимание, что CreateWnd - это то место, где можно позвонить DwmSetWindowAttribute. Ручка окна создается в CreateWnd, и мы хотим применить эту политику как можно скорее. Ввод кода в CreateWnd также делает его надежным против повторного создания.

Нормальной Aero форма:

enter image description here

Форма с вызовом DwmSetWindowAttribute:

enter image description here

+0

Красивого спасибо очень много (и дополнительные спасибо за пояснение) - 'Winapi.Dwmapi 'где волшебство есть :) Но как вы узнали о' DwmSetWindowAttribute' хотя? Я просмотрел несколько страниц Windows API на MSDN и ничего не нашел для того, что искал. Я не знаю, как вы, ребята, знаете об этих более неясных функциях. – Craig

+1

Я узнал, отвечая и пытаясь ответить на такие вопросы, как этот. –

+0

Я думаю, что потрачу больше времени на чтение Windows API и MSDN, это отличный ресурс (особенно если вы знаете, что искать). Еще раз спасибо. – Craig

 Смежные вопросы

  • Нет связанных вопросов^_^