Png異形視窗

来源:http://www.cnblogs.com/Zory/archive/2016/02/11/5186448.html
-Advertisement-
Play Games

同事演示了一個.NET的的PNG異形視窗.挺漂亮.於是也想用Delphi顯擺一個. 關於Delphi用PNG做異形視窗的資料有不少.都是用GDIPlus或者TPNGImage組件載入PNG圖像做的. 好在Delphi包裝了微軟的IWICImagingFactory介面,這樣處理PNG的工作就交給操作


同事演示了一個.NET的的PNG異形視窗.挺漂亮.於是也想用Delphi顯擺一個.

關於Delphi用PNG做異形視窗的資料有不少.都是用GDIPlus或者TPNGImage組件載入PNG圖像做的.

好在Delphi包裝了微軟的IWICImagingFactory介面,這樣處理PNG的工作就交給操作系統去做了.

函數很簡單一共就幾行,關鍵就是UpdateLayeredWindow.

用Delphi2010提供的IWICImagingFactory介面的包裝了,這次PNG的處理交給微軟的操作系統了,一點問題也沒有.其他版本的Delphi只要能對IWICImagingFactory進行包裝,也一樣能處理.但還是Delphi2010最方便.什麼控制項也不用,多餘的東西都不要.

 

代碼如下,很簡單吧:)

unit YXForm;

 

interface

 

uses

  Windows, Forms, Classes, Graphics;

 

//從文件載入PNG

procedure YXFromFile(AForm : TForm; AFileName : String);

//從資源載入PNG

procedure YXFromResource(AForm : TForm; ResName : String; ResType : PWideChar; Instance : HINST = 0);

//從圖像對象載入

procedure YXFromGraphic(AForm : TForm; AGraphic : TGraphic);

 

implementation

 

procedure YXFromFile(AForm : TForm; AFileName : String);

var

  wic : TWICImage;

begin

  wic := TWICImage.Create;

  wic.LoadFromFile(AFileName);

  YXFromGraphic(AForm, wic);

  wic.Free;

end;

 

procedure YXFromResource(AForm : TForm; ResName : String;ResType : PWideChar; Instance : HINST);

var

  wic : TWICImage;

  r : TResourceStream;

begin

  if Instance = 0 then

    Instance := HInstance;

  r := TResourceStream.Create(Instance, ResName, ResType);

  wic := TWICImage.Create;

  wic.LoadFromStream(r);

 

  YXFromGraphic(AForm, wic);

  wic.Free;

  r.Free;

end;

 

procedure YXFromGraphic(AForm : TForm; AGraphic : TGraphic);

var

  ptDst, ptSrc: TPoint;

  Size: TSize;

  BlendFunction: TBlendFunction;

  bmp : TBitmap;

begin

  bmp := TBitmap.Create;

  bmp.Assign(AGraphic);

  ptDst := Point(AForm.Left, AForm.Top);

  ptSrc := Point(0, 0);

  Size.cx := AGraphic.Width;

  Size.cy := AGraphic.Height;

 

  BlendFunction.BlendOp := AC_SRC_OVER;

  BlendFunction.BlendFlags := 0;

  BlendFunction.SourceConstantAlpha := $FF; // 透明度

  BlendFunction.AlphaFormat := AC_SRC_ALPHA;

 

  SetWindowLong(AForm.Handle, GWL_EXSTYLE, GetWindowLong(AForm.Handle,GWL_EXSTYLE) or WS_EX_LAYERED);

  UpdateLayeredWindow(AForm.Handle,

     AForm.Canvas.Handle,

     @ptDst,

     @Size,

     bmp.Canvas.Handle,

     @ptSrc,

     0,

     @BlendFunction,

     ULW_ALPHA);

  bmp.Free();

end;

 

end.

 

 

想要用的時候很簡單,舉個例子:

  ff:=TForm2.Create(Self);//這裡的form2指新建的視窗,請酌情修改。
  YXFromFile(ff, 'c:/a.png');

  ff.Show;

實現動畫也很容易.只要不停地YXFromFile(ff, 'c:/a.png');調用一套動作PNG就可以了.

效果如下:

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 作為一個開發者,我發現在我的日常工作中越來越多地查看PHP的源碼。在為了弄清楚奇怪的邊界問題和為什麼某些問題應該發生的卻沒有發生而去理解背後究竟發生了什麼事情的時候非常有用。在文檔缺失、不完整或者錯誤的情況下也很有用。因此,我已經決定通過一系列的文章來分享我學到的知識,給予PHP開發者們足夠的知識去...
  • C++Primer第5版學習筆記(三) 第四/五章的重難點內容 你可以點擊這裡回顧第三章內容 因為第五章的內容比較少,因此和第四章的筆記內容合併。 第四章是和表達式有關的知識,表達式是C++的基礎設施,本章由三部分組成: 1.表達式概念基礎,包括表達式的基本概念,左值和右值的概念,優先順序結合律,求值
  • 其實不是真的創建了批量任務,而是用python創建一個文本文件,每行一個要下載的鏈接,然後打開迅雷,複製文本文件的內容,迅雷監測到剪切板變化,彈出下載全部鏈接的對話框~~ 實際情況是這樣的,因為用python分析網頁非常,比如下載某頁中的全部pdf鏈接 1 from __future__ impor
  • C-Free和VC++ 6.0是根據源文件擴展名來編譯的。在學習C語言時,應將IDE的預設擴展名設置為.c,或者先保存為.c文件再進行編譯,以避免造成不必要的困惑。
  • 官網地址 本文內容 簡介 Futures 阻塞 異常 Promises 工具 最近看了《七周七語言:理解多種編程泛型》,介紹了七種語言(四種編程泛型)的主要特性:基本語法,集合,並行/併發,其中就有 Scala。你不能指望這種書全面介紹,因為其中任何一門語言都夠寫一本書了~ 我比較關註並行/併發,但
  • 1 /* 2 類是屬於用戶自定義的數據類型, 3 並且該類型的數據具有一定的行為能力, 4 也就是類中說描述的方法。 5 通常來說, 6 一個類的定義包含兩部分的內容, 7 一是該類的屬性, 8 另一部分是它所擁有的方法。 9 以 "人類" 這個類來說, 10 每個人都有自己的姓名、年齡、出生日期、
  • 本文實例講述了PHP實現上傳文件並存進資料庫的方法。分享給大家供大家參考。具體如下: show_add.php文件如下: <?php if(!isset($_REQUEST[''id'']) or $_REQUEST[''id'']=="") die("error: id none"); $id =
  • PageControl位於Win32選項卡中,可以在控制項上右鍵點擊“New Page”,來實現靜態的頁面添加。 先說說幾個重要的屬性: ActivePage:當前活動的頁面(在設計模式中切換頁面會更改ActivePage屬性) MultiLine:選項卡以多行形式顯示。 Style:頁面樣式。 ts
一周排行
    -Advertisement-
    Play Games
  • 概述:本文代碼示例演示瞭如何在WPF中使用LiveCharts庫創建動態條形圖。通過創建數據模型、ViewModel和在XAML中使用`CartesianChart`控制項,你可以輕鬆實現圖表的數據綁定和動態更新。我將通過清晰的步驟指南包括詳細的中文註釋,幫助你快速理解並應用這一功能。 先上效果: 在 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • 概述:本示例演示了在WPF應用程式中實現多語言支持的詳細步驟。通過資源字典和數據綁定,以及使用語言管理器類,應用程式能夠在運行時動態切換語言。這種方法使得多語言支持更加靈活,便於維護,同時提供清晰的代碼結構。 在WPF中實現多語言的一種常見方法是使用資源字典和數據綁定。以下是一個詳細的步驟和示例源代 ...
  • 描述(做一個簡單的記錄): 事件(event)的本質是一個委托;(聲明一個事件: public event TestDelegate eventTest;) 委托(delegate)可以理解為一個符合某種簽名的方法類型;比如:TestDelegate委托的返回數據類型為string,參數為 int和 ...
  • 1、AOT適合場景 Aot適合工具類型的項目使用,優點禁止反編 ,第一次啟動快,業務型項目或者反射多的項目不適合用AOT AOT更新記錄: 實實在在經過實踐的AOT ORM 5.1.4.117 +支持AOT 5.1.4.123 +支持CodeFirst和非同步方法 5.1.4.129-preview1 ...
  • 總說周知,UWP 是運行在沙盒裡面的,所有許可權都有嚴格限制,和沙盒外交互也需要特殊的通道,所以從根本杜絕了 UWP 毒瘤的存在。但是實際上 UWP 只是一個應用模型,本身是沒有什麼許可權管理的,許可權管理全靠 App Container 沙盒控制,如果我們脫離了這個沙盒,UWP 就會放飛自我了。那麼有沒... ...
  • 目錄條款17:讓介面容易被正確使用,不易被誤用(Make interfaces easy to use correctly and hard to use incorrectly)限制類型和值規定能做和不能做的事提供行為一致的介面條款19:設計class猶如設計type(Treat class de ...
  • title: 從零開始:Django項目的創建與配置指南 date: 2024/5/2 18:29:33 updated: 2024/5/2 18:29:33 categories: 後端開發 tags: Django WebDev Python ORM Security Deployment Op ...
  • 1、BOM對象 BOM:Broswer object model,即瀏覽器提供我們開發者在javascript用於操作瀏覽器的對象。 1.1、window對象 視窗方法 // BOM Browser object model 瀏覽器對象模型 // js中最大的一個對象.整個瀏覽器視窗出現的所有東西都 ...