Tuesday, March 24, 2009

使用者自定之副程式如何存取物件之相關資料

在 C++ Builder 中撰寫副程式, 如果要存取物件中的相關資料, 必須從 Form1 開始描述起, 不可以直接寫物件之名稱, 否則會有 Undefined symbol 的錯誤訊息。

Example:

Form1->StatusBar1->Panels->Items[0]->Text = AnsiString(iFrameCount);

Monday, March 23, 2009

TBitmap::ScanLine

Provides indexed access to each line of pixels.

__property void * ScanLine[int Row] = {read=GetScanline};

Description

ScanLine is used only with DIBs (Device Independent Bitmaps) for image editing tools that do low-level pixel work.


基本上, ScanLine 是 TBitmap 元件中的一個 Property, 存放著 Bitmap 某一橫列的色彩值在記憶體中存放的起始指標, 有了這個指標, 我們就可以直接在記憶體中直接存取, 修改影像內容。
 
更新記憶體後的影像元件的外觀顯示, 有可能和記憶體中不相符, 我們可以用 Refresh() 這個 method 來將影像的外觀重新顯示。

  Image1->Refresh();
 

Tuesday, March 10, 2009

Win32 GDI: 取得裝置內容代碼 GetDC

圖形裝置介面 (GDI: Graphics Device Interface) 是 Windows 的子系統, 負責在螢幕或印表機上顯示圖形。Windows GDI 由幾百個函式呼叫組成, 也定義了相關的資料形態, 結構與巨集。

當我們想要在一個圖形輸出設備上繪圖, 或是做一些基本操作時, 首先我們必須要先獲得一個裝置內容(device context)的代碼。

取得顯示裝置代碼(display device context)的方式之一就是使用 GetDC 指令。

當 Windows 將顯示裝置代碼傳回給程式的同時, 也給了我們使用該顯示裝置的許可權限, 之後程式便是透過這個代碼告訴 Windows 要在這個裝置上進行繪圖, 因此, 這個代碼也將成為 GDI 函式中的一個輸入參數。

The GetDC function retrieves a handle of a display device context (DC) for the client area of the specified window. The display device context can be used in subsequent GDI functions to draw in the client area of the window.

This function retrieves a common, class, or private device context depending on the class style specified for the specified window. For common device contexts, GetDC assigns default attributes to the device context each time it is retrieved. For class and private device contexts, GetDC leaves the previously assigned attributes unchanged.

HDC GetDC(
HWND hWnd // handle of window
);

Parameters

hWnd

Identifies the window whose device context is to be retrieved.

Return Values

If the function succeeds, the return value identifies the device context for the given window's client area. If the function fails, the return value is NULL.

Remarks

After painting with a common device context, the ReleaseDC function must be called to release the device context. Class and private device contexts do not have to be released. The number of device contexts is limited only by available memory.