delphi 異形窗體可半透明
unit xDrawForm; interface uses Windows, Messages, SysUtils, Classes, Controls, Forms, Menus, Graphics,GDIPOBJ,GDIPAPI,GDIPUTIL; type TwwGDIImage = class public n_Pos_X : Integer; n_Pos_Y : Integer; n_Width : Integer; n_Height : Integer; GPImageNormal : TGPImage; procedure CreateImageNormal(wsFileName: WideString;nPosX,nPosY,nW,nH:Integer); end; TwwGDIButton = class(TwwGDIImage) public GPImageHot : TGPImage; GPImageDown : TGPImage; end; TwwCanvas = class(TObject) private m_hdcMemory: HDC; hdcScreen: HDC; hBMP: HBITMAP; m_Blend: BLENDFUNCTION; // 事件 FGPGraph: TGPGraphics; FOnDrawImage: TNotifyEvent; procedure BeginDraw(); // 繪圖前置工作 procedure EndDraw(Handle:THandle); // 繪圖收尾工作 public sizeWindow: SIZE; ptSrc: TPOINT; n_Handle : THandle; procedure RePaint(h:THandle); procedure InitCanvas(nx,ny:Integer); procedure wwDrawImage(wwGDIImage :TwwGDIImage); property GPGraph: TGPGraphics read FGPGraph write FGPGraph; property OnDrawImage: TNotifyEvent read FOnDrawImage write FOnDrawImage; end; implementation { TwwCanvas } procedure TwwCanvas.BeginDraw; begin // 獲取桌面螢幕裝置 hdcScreen := GetDC(0); // 建立一個與指定裝置相容的記憶體裝置上下文環境(DC) m_hdcMemory := CreateCompatibleDC(hdcScreen); // 建立與指定的裝置環境相關的裝置相容的點陣圖 hBMP := CreateCompatibleBitmap(hdcScreen, sizeWindow.cx, sizeWindow.cy ); // 選擇一物件到指定的裝置上下文環境中,該新物件替換先前的相同型別的物件 SelectObject(m_hdcMemory, hBMP); // 建立畫布 GPGraph := TGPGraphics.Create(m_hdcMemory); end; procedure TwwCanvas.wwDrawImage(wwGDIImage: TwwGDIImage); begin GPGraph.DrawImage( wwGDIImage.GPImageNormal, wwGDIImage.n_Pos_X, wwGDIImage.n_Pos_Y, wwGDIImage.n_Width, wwGDIImage.n_Height) end; procedure TwwCanvas.EndDraw(Handle:THandle); begin // 設定窗體風格 SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED); // 執行透明混合 UpdateLayeredWindow(Handle, hdcScreen, nil,@sizeWindow, m_hdcMemory, @ptSrc, 0, @m_Blend, ULW_ALPHA); // 設定窗體位置 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE); // 各種釋放就對了.. 不然畫起來會糊 GPGraph.ReleaseHDC(m_hdcMemory); ReleaseDC(0, hdcScreen); hdcScreen := 0; DeleteObject(hBMP); DeleteDC(m_hdcMemory); m_hdcMemory := 0; GPGraph.Free; end; procedure TwwCanvas.RePaint(h:THandle); begin if Assigned(FOnDrawImage) then begin BeginDraw(); FOnDrawImage(Self); EndDraw(h); end; end; procedure TwwCanvas.InitCanvas(nx, ny: Integer); begin m_Blend.BlendOp := AC_SRC_OVER; // the only BlendOp defined in Windows 2000 m_Blend.BlendFlags := 0; // Must be zero m_Blend.AlphaFormat := AC_SRC_ALPHA; //This flag is set when the bitmap has an Alpha channel m_Blend.SourceConstantAlpha := 255; sizeWindow.cx := nx; sizeWindow.cy := ny; ptSrc := Point(0,0); end; { TwwGDIImage } procedure TwwGDIImage.CreateImageNormal(wsFileName: WideString;nPosX,nPosY,nW,nH:Integer); begin Self.GPImageNormal := TGPImage.Create(wsFileName); Self.n_Pos_X := nPosX; Self.n_Pos_Y := nPosY; Self.n_Width := nW; Self.n_Height:= nH; end; end. unit uMainForm; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, GDIPOBJ,GDIPAPI,GDIPUTIL; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); private { Private declarations } public procedure DrawImage(Sender: TObject); { Public declarations } end; var Form1: TForm1; implementation uses xDrawForm; var wwCanvas : TwwCanvas = nil; img_BackGround: TwwGDIImage= nil; // 背景圖 // img_ProgressBar1: TwwGDIImage= nil; // 上滾動條 // img_ProgressBar2: TwwGDIImage= nil; // 下滾動條 // img_Lighting: TwwGDIImage= nil; // 閃光點 {$R *.dfm} procedure TForm1.DrawImage(Sender: TObject); begin TwwCanvas(Sender).wwDrawImage(img_BackGround); end; procedure TForm1.FormCreate(Sender: TObject); begin DoubleBuffered := True; BorderStyle := bsNone; wwCanvas := TwwCanvas.Create(); wwCanvas.InitCanvas(872,690); wwCanvas.OnDrawImage := Self.DrawImage; img_BackGround := TwwGDIImage.Create(); img_BackGround.CreateImageNormal('BackGround.png',0,0,872,690); end; procedure TForm1.FormShow(Sender: TObject); begin wwCanvas.RePaint(Self.Handle); end; end.
相關推薦
delphi 異形窗體可半透明
unit xDrawForm; interface uses Windows, Messages, SysUtils, Classes, Controls, Forms, Menus, Graphics,GDIPOBJ,GDIPAPI,GDIPUTIL; ty
Windows介面程式設計第四篇 異形窗體 高富帥版
上一篇《》介紹了異形視窗(異形窗體)的建立,其主要步驟為——先通過建立點陣圖畫刷來做視窗的背景畫刷,再通過SetWindowLong為窗體加上WS_EX_LAYERED屬性,然後使用SetLayeredWindowAttributes指定視窗的透明色來完成視窗形狀的調整
Qt實現半透明、無邊框、可自由移動、不規則的窗體
先出示效果圖一張,如果不是讀者需要的,讀者可以看完效果圖之後就關閉本網頁啦。 功能要點 視窗無邊框 可自由拖動 背景透明度自定義 邊框可設定為異形 實現步驟 第1步:新建一個QWidget的子類,這裡命名為BaseWidge
Qt開發:無邊框異形視窗,透明背景,可移動
很多端遊的啟動器客戶端都是異形視窗,無邊框,自繪並重寫了最小化、最大化、關閉按鈕。本文具體講一下實現。 步驟: 1,設定視窗透明度、視窗無邊框樣式、視窗背景透明。 2,準備ps過的帶透明通道的不規則png圖片,設定為視窗背景。 3,重寫滑鼠事件實現視窗移動。 看效果:
製作半透明漸顯窗體
實現效果: 知識運用: 窗體的Opacity屬性 用來獲取或設定窗體的不透明度級別 public double Opacity{ get; set; } 屬性值:窗體的不透明度級別預設為1.00 透明為0 實現程式碼: private void timer
四周半透明陰影邊框的窗體要怎麼做
一.spring的資料訪問哲學 1. Srping的目標之一就是允許我們在開發應用程式的時候,能夠遵循面向物件(Object Oriented,OO)原則中的"針對介面式程式設計"; 講道理現在市面上的所有專案都離不開介面,針對介面是面向物件的重要特徵之一,而spring的最
Delphi全形轉半形
function ToDBC( input :String):WideString;varc:WideString;i:Integer;beginc := input;for i:=1 to Length(Input) dobeginif (Ord(c) = 12288) thenbeginc := chr(
Windows介面程式設計第二篇 半透明窗體
Windows介面程式設計第二篇半透明窗體 上一篇《Windows介面程式設計第一篇 點陣圖背景與點陣圖畫刷》介紹了通過WM_CTLCOLORDLG訊息來來設定對話方塊的背景以及點陣圖畫刷的使用。本篇將介紹動態調節窗體透明度的方法。 調節窗體透明度可以先使用SetW
使用z-index和position:absolute實現DIV覆蓋和重疊,可實現半透明背景,上邊漂浮一層不透明的div層。
Div的重疊和覆蓋可以使用z-index和position:absolute決定定位來實現,具體實現程式碼如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3
Qml實用技巧:在可視元素之前半透明覆蓋一個可視元素,阻止滑鼠透(介面)傳(防止點選到被遮擋的按鈕)
需求 需要一個半遮擋的介面,遮擋住原來的介面,因為把用來被遮擋的介面寫成了元件,所以將其設定為需要遮擋的介面的子物件 BUG 每次點選後面和前面的按鈕都可以觸發,如下: Item { Rectangle { wi
Delphi 視窗半透明
// function SetLayeredWindowAttributes(hwnd:HWND; crKey:Longint; bAlpha:byte; dwFlags:longint ):longint; stdcall; external user32;//函式
QT實現無邊框半透明窗體
很簡單,兩行程式碼: setWindowFlags(Qt::Window|Qt::FramelessWindowHint| Qt::WindowStaysOnTopHint|Qt::Tool|Qt::X11BypassWindowManagerHint); this-&
Windows介面程式設計第二篇半透明窗體
上一篇《Windows介面程式設計第一篇 點陣圖背景與點陣圖畫刷》介紹了通過WM_CTLCOLORDLG訊息來來設定對話方塊的背景以及點陣圖畫刷的使用。本篇將介紹動態調節窗體透明度的方法。 調節窗體透明度可以先使用SetWindowLong為窗體加上WS_EX_LA
Qt圓角窗體+半透明背景+右下角顯示(移除窗體標題欄+置頂+不在工作列顯示)
現在轉到Qt這塊,很多東西使用起來確實像是到了另一個世界,特別是一些錯誤起初讓人百思不得其解,比如bool型別的全域性變數,你如果不先給它初始化一下,後面會出現一些非常莫名其妙的問題,別想當然的認為bool值預設就是false 最近剛好用到了如何對窗體設定圓角,如何設定透明
(WPF) 半透明窗體
<Grid Name="Grid_Login" Opacity="0" Width="{Binding Width, ElementName=w}" Height="{Binding Height, ElementName=w}"> <B
(一)C# Windows Mobile 半透明窗體
Windows Mobile,個人心中臻至完美的系統。 不忍自己對WM的鑽研成果消逝,故留作紀念。 系列開篇,便是一個曾令自己困擾很久的問題:如何實現半透明窗體。 如果瞭解Win32程式設計,其實很簡單。 主要用到了三個方法: SetLayeredWindowAttributes GetWin
河南省第六屆大學生程序設計競賽--異形卵
con -s pad space 傳感器 math.h 水題 amp 歷史 異 形 卵 Time Limit: 1 Second Memory Limit: 64 MB Description 我們探索宇宙,是想了解浩瀚星空的奧妙,但我們卻非常少意識到宇宙
bootstrap輪播圖 兩側半透明陰影
class 搜索 cit spa 再看 0.00 line rst one 用bootstrap輪播圖:Carousel插件,圖片兩側影音實在礙眼,想去掉,首先發現有css裏由opacity: 0.5這個東西來控制,全部改成opacity: 0.0,發現指示箭頭也看不見了。
MFC + CxImage 實現自繪半透明按鈕
processor 專用 win dword ssa ont false set 技術 btn.h [cpp] view plain copy #pragma once // CBtn #include "ximage
【bzoj3281】最大異或和 可持久化Trie樹
log pac 序列 str char s pan pri scan bool 題目描述 給定一個非負整數序列 {a},初始長度為 N。 有M個操作,有以下兩種操作類型:1、A x:添加操作,表示在序列末尾添加一個數 x,序列的長度 N+1。2、Q l r x