7

. Windows 7 ve Delphi 2010 kullanıyorum.Bir konsol uygulamasında konsol uygulamasında bir cam efekti (Windows Vista/7) nasıl etkinleştirilir Konsol uygulamalarındaki cam efektini etkinleştirebileceğim için

this uygulama buldum bu yüzden mümkün olmalıdır.

+1

Konsol penceresi, paylaşılan bir kaynaktır. Programınıza ait değildir. Size ait olmayan bir pencerede global değişiklikler yapmayın. Müşterilerinizin konsol pencerelerinin süslü görünmesini istiyorlarsa, bağlandığınız programı yükleyebilirler. –

cevap

15

Birkaç hafta önce blogumda this article yayınladım.

Anahtar, GetConsoleWindow ve DwmEnableBlurBehindWindow işlevlerini kullanmaktadır.

GetConsoleWindow işlevi, çağırma işlemiyle ilişkili konsol tarafından kullanılan pencere tanıtıcısını alır.

DwmEnableBlurBehindWindow işlevi, sağlanan pencere tutamacındaki bulanıklık etkisini (cam) etkinleştirir.

program ConsoleGlassDelphi; 

{$APPTYPE CONSOLE} 

    uses 
    Windows, 
    SysUtils; 

type 
    DWM_BLURBEHIND = record 
    dwFlags     : DWORD; 
    fEnable     : BOOL; 
    hRgnBlur    : HRGN; 
    fTransitionOnMaximized : BOOL; 
    end; 

function DwmEnableBlurBehindWindow(hWnd : HWND; const pBlurBehind : DWM_BLURBEHIND) : HRESULT; stdcall; external 'dwmapi.dll' name 'DwmEnableBlurBehindWindow';//function to enable the glass effect 
function GetConsoleWindow: HWND; stdcall; external kernel32 name 'GetConsoleWindow'; //get the handle of the console window 

function DWM_EnableBlurBehind(hwnd : HWND; AEnable: Boolean; hRgnBlur : HRGN = 0; ATransitionOnMaximized: Boolean = False; AFlags: Cardinal = 1): HRESULT; 
var 
    pBlurBehind : DWM_BLURBEHIND; 
begin 
    pBlurBehind.dwFlags:=AFlags; 
    pBlurBehind.fEnable:=AEnable; 
    pBlurBehind.hRgnBlur:=hRgnBlur; 
    pBlurBehind.fTransitionOnMaximized:=ATransitionOnMaximized; 
    Result:=DwmEnableBlurBehindWindow(hwnd, pBlurBehind); 
end; 

begin 
    try 
    DWM_EnableBlurBehind(GetConsoleWindow(), True); 
    Writeln('See my glass effect'); 
    Writeln('Go Delphi Go'); 
    Readln; 
    except 
    on E:Exception do 
     Writeln(E.Classname, ': ', E.Message); 
    end; 
end. 

Bu basit bir örnektir; sorunları önlemek için Windows işletim sistemi sürümünü kontrol etmelisiniz.

Screenshot

+0

"Pencere Rengi ve Görünüm" ayarı donmaya ayarlandığında bu doz iyi çalışmaz ... beyaz zemin üzerine beyaz metin –

İlgili konular