編譯指令 PointerMath 預設 off; 開啟後, 可以像數組一樣地讀寫指標中的系列資料, 非常方便!//測試整數指標procedure TForm1.Button1Click(Sender: TObject);var p: PInteger; i: Integer;begin{$POINTERMATH ON} //寫入 p := GetMemory(SizeOf(Integer) * 4); p[0] := 11; p[1] := 22; p[2] := 33; p[3
繪圖表面(Graphics, 這在 VCL 體系中叫 Canvas), 在 GdiPlus 中有四種擷取方法:1、通過視窗控制代碼擷取;2、通過視窗的 Canvas.Handle 擷取;3、通過 GdiPlus 利用 Helper 技術給部分 VCL 對象添加的 ToGPGraphics 方法擷取;4、通過映像對象擷取.本例:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics,
本套介面只有兩個單元: GdiPlus, GdiPlusHelpers; 主要的是前者, GdiPlusHelpers 的作用是通過 Helper 技術給 VCL 體系中的 TCanvas、TGraphicControl、TCustomControl、TBitmap 類補充添加 ToGPGraphics 方法, 以方便擷取 IGPGraphics.在很多時候我們並不需要它, 這時也不需要 uses GdiPlusHelpers.不過這對有些對象會很方便, 譬如: uses
TGPColor 是 GdiPlus 的顏色主體, 它雖然是個結構體, 但和類一樣, 方法、屬性一應俱全.之所以沒有把它定義為類或介面, 我覺得主要是它需要和一個整數值進行隱式轉換, 這要用到運算子多載(暫時只有結構有).TGPColor 的多種構建方法:var c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11: TGPColor;begin c1 := TGPColor.Create(0, 0, 255); { 不透明藍色 }
IGPColors 是一個泛型數組應用於 TGPColor 的介面, 需要一組顏色時可以用它; 當然用其他方法也不麻煩, 它在整個體系中並不重要.本例把 TGPColor 中的 141 個顏色常量裝載到一個 IGPColors, 順便看看這些顏色.運行:uses GdiPlus;procedure TForm1.FormPaint(Sender: TObject);const Count = 141;var Colors: IGPColors; Graphics: IGPGraphics;
GDI+ 有五種畫刷:實心畫刷: IGPSolidBrush陰影畫刷: IGPHatchBrush紋理畫刷: IGPTextureBrush線性漸層畫刷: IGPLinearGradientBrush路徑漸層畫刷: IGPPathGradientBrush它們分別有對應的實作類別:TGPSolidBrushTGPHatchBrushTGPTextureBrushTGPLinearGradientBrushTGPPathGradientBrush.五個畫刷都繼承自 IGPBrush, 但
IGPSolidBrush(實心畫刷)只是在 IGPBrush 的基礎上增加了一個可讀寫的 IGPSolidBrush.Color 屬性.IGPHatchBrush(陰影畫刷)有三個唯讀屬性: 陰影樣式、前景色彩、背景色; 它們也剛好是 Create 方法的參數.Create 也可只有前兩個參數, 此時背景色預設為不透明的黑色.下面的例子展示了陰影畫刷的所有陰影樣式, 如下:unit Unit1;interfaceuses Windows, Messages, SysUtils,
樣本圖片:範例程式碼:uses GdiPlus;procedure TForm1.FormPaint(Sender: TObject);var Graphics: IGPGraphics; Image: IGPImage; Brush: IGPTextureBrush; Rect: TGPRect;begin ChDir('C:\GdiPlusImg\'); Image := TGPImage.Create('HouseAndTree.gif'); Brush :=
左右聲道的音量是單調的; 表示音量的 32 位整數的低 16 位是左聲道、高 16 位是右聲道.代碼檔案:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; Button2: TButton;
這兩個參數也都是可以 Get(waveOutGetPlaybackRate、waveOutGetPitch)裝置預設的播放速度是 $00010000, 此值乘以 2 是快一倍, 除以 2 是慢一倍; 最快可到 $000F8000.裝置預設的音高參數是 $00010000, 此值乘以 2 是高一倍, 除以 2 是低一倍; 最高可到 $000F8000.可能有很多音效卡不支援, 我的 IBM 手提就不支援; 不過通過其他技術可以實現的.代碼檔案(僅有播放速度的設定代碼):unit
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure
EncdDecd 單元: EncodeString、DecodeString、EncodeBase64、DecodeBase64uses EncdDecd;const str = '萬一的 Delphi 部落格';procedure TForm1.Button1Click(Sender: TObject);var strEncode,strDecode: string;begin strEncode := EncodeString(str); strDecode :=
TranslateTransform: 平移;ScaleTransform: 放縮;RotateTransform: 旋轉;通過 MultiplyTransform 方法和 Transform 屬性, 能完成包括上述變換在內的更多變換.ResetTransform 方法是重設變換.這些方法和屬性, 在 IGPGraphics 中都有, 在 IGPGraphics 中詳細學習更合適些.測試:代碼檔案:unit Unit1;interfaceuses Windows, Messages,
最簡單的 IGPPathGradientBrush 就是有一個中心顏色和一組周邊顏色的漸層.這裡牽扯到 CenterColor、SurroundColors 屬性和 SetSurroundColors 方法.測試一:測試一代碼://使用 SetSurroundColors 方法設定周邊色組:uses GdiPlus, GdiPlusHelpers;procedure TForm1.FormPaint(Sender: TObject);var Brush:
IGPTextureBrush 對應的 TGPTextureBrush 類的 Create 方法有很多重載.參數中可有 TGPWrapMode 和 IGPImageAttributes, 但測試中發現 IGPImageAttributes 在這裡並不好用.比較有意義是: 可以從建立參數中指定原始圖片的範圍.測試:uses GdiPlus;procedure TForm1.FormPaint(Sender: TObject);var Image: IGPImage; Brush1,
第一種構建方式: TGPLinearGradientBrush.Create(點1, 點2, 顏色1, 顏色2);本例測試:為了方便測試, 在 Unit2 單元從 TShape 繼承了一個 TMyShape 類, 用來類比一個可活動的顏色點.其主要功能: 1、可用滑鼠左鍵拖動; 2、可用滑鼠右鍵改變顏色.Unit2 的代碼:unit Unit2;interfaceuses Classes, Controls, ExtCtrls, Dialogs;type TMyShape =
第二種構建方式: TGPLinearGradientBrush.Create(矩形, 顏色1, 顏色2, 漸層模式);第三種構建方式: TGPLinearGradientBrush.Create(矩形, 顏色1, 顏色2, 角度);第三種構建方式中的 "角度"(X 軸, 順時針)相當於是對漸層模式的自訂, 下面兩段測試代碼的結果是一樣的.另外, 第三種構建方式還有一個預設為 False 的 Boolean 參數, 說明指定角度是否受其他變換的影響.測試:測試一:uses
多色漸層需要: 一個 "顏色數組" 和一個 "位置數組" (0-1 之間的位置比例);IGPLinearGradientBrush.InterpolationColors 屬性對應一個 IGPColorBlend 對象, 此對象專門用於裝載上面兩個數組.IGPColorBlend 的 Colors 和 Positions 兩個屬性分別對應這兩個數組.下面的三個樣本的結果都是一樣的.測試:測試一, 使用開放數組參數構建 IGPColorBlenduses GdiPlus;procedure
IGPLinearGradientBrush.Blend 屬性對應一個 IGPBlend 對象;TGPBlend.Create(Factors, Positions); 中的兩個參數都是 Single 類型的數組, Factors 顏色強度因子, Positions 是位置位移比例.對於兩種顏色的漸層, 上面兩個數組都應是三個元素構成; 預設效果是 [0, 0.5, 1].測試:測試代碼:uses GdiPlus;procedure TForm1.FormPaint(Sender:
GammaCorrection 屬性是一個 Boolean 值, 預設 False; 為 True 表示啟用了灰階校正.測試圖中的第二個圖形使用了灰階校正:測試代碼:uses GdiPlus;procedure TForm1.FormPaint(Sender: TObject);var Graphics: IGPGraphics; Rect: TGPRectF; Brush: IGPLinearGradientBrush;begin Graphics :=