記憶體中的資料除了 0 便是 1, 你把它當作圖片、字元、數字等等, 那是你的事, 記憶體只認識 0 和 1.Win32 系統除了使用硬記憶體以外, 還可以從硬碟上開闢虛擬記憶體;因為 Win32 的記憶體位址範圍在 4 個 G 以內(0..232-1), 所以它最多能夠給一個應用程式分配 4G 的Runspace; 並且其中的 2G 有系統管理, 實際上程式只有 2G 的自主空間. 還記得有說 String 最大長度是 2G 嗎? 就是這個道理.有 4G 的記憶體, 就有 4G 個地址,
運行:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls;type TForm1 = class(TForm) HotKey1: THotKey; Memo1: TMemo; CheckBox1: TCheckBox; CheckBox2: TCheckBox;
這不需要寫函數.//如果十六進位非字串, 無須轉換, 直接賦值即可var i: Integer;begin i := $FF; ShowMessage(IntToStr(i)); {255}end;//如果十六進位是字串, 用 StrToInt 即可var s: string; i: Integer;begin s := '$FF'; i := StrToInt(s); ShowMessage(IntToStr(i)); {255}end;//如果十六進位是字串, 但缺少 $ ,
這是來賓 Dolby 在 http://www.cnblogs.com/del/archive/2008/03/08/1081295.html#1096814詢問的問題.//聲明:SetLayeredWindowAttributes( Hwnd: THandle; {視窗控制代碼} crKey: COLORREF; {透明色} bAlpha: Byte; {Alpha 值} dwFlags: DWORD {LWA_COLORKEY(=1)表示使用透明色;
本例:此例回複 maxcool(我堅定的支援者與監督者, 離不開你呀!) 在http://www.cnblogs.com/del/archive/2008/03/09/1096874.html#1097203 提出的問題.全部代碼如下:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,
提示: 1、其實用 Delphi 內部同類函數很方便的, 但系統函數是全域的;2、使用 GetClientRect 時, 一般要 Windows.GetClientRect, 因為 TForm 的父類有同名函數.//聲明:{擷取視窗外部矩形(相對於螢幕)}GetWindowRect( hWnd: HWND; {視窗控制代碼} var lpRect: TRect {用於返回的矩形指標}): BOOL;{擷取視窗內部矩形}GetClientRect( hWnd: HWND;
提示: SetParent 應該 Windows.SetParent, 因為 TForm 的父類有同名方法.//聲明:{擷取父視窗控制代碼}GetParent(hWnd: HWND): HWND;{指定父視窗}SetParent( hWndChild: HWND; {子控制代碼} hWndNewParent: HWND {父控制代碼}): HWND; {成功返回原父視窗控制代碼; 失敗返回 0}{移動視窗}MoveWindow( hWnd: HWND;
{返回當前線程的虛擬控制代碼}GetCurrentThread: THandle;{返回當前線程 ID}GetCurrentThreadId: DWORD;{返回當前進程的虛擬控制代碼}GetCurrentProcess: THandle;{返回當前進程 ID}GetCurrentProcessId: DWORD;提示:ID 是系統唯一的標識.所謂虛擬控制代碼, 就是該控制代碼只在調用進程的進程中有效, 也不能被繼承;如果用於其他進程需要用 DuplicateHandle
//聲明:GetWindowThreadProcessId( hWnd: HWND; {指定視窗控制代碼} lpdwProcessId: Pointer = nil {返回進程 ID 的指標}): DWORD; {返回線程 ID}//舉例:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics,
相比其他程式設計語言, Delphi 的名著可不算多呀; Julian Bucknall[巴克納爾(美)] 所著的《Delphi 演算法與資料結構》就是不可多得的一本!演算法與資料結構是早就該學得, 能有幸同時接近大師的思想, 太幸運了.目錄前 言致 謝第1章 什麼是演算法1. 1 什麼是演算法1. 2 演算法和平台1. 3 調試與測試1. 4 小結第2章 數組2. 1 數組2. 2 Delphi中的數群組類型2. 3 TList類和指標數組2. 4 磁碟數組2. 5 小結第3章 鏈表.
//聲明:{返回進程的控制代碼}OpenProcess( dwDesiredAccess: DWORD; {訪問選項} bInheritHandle: BOOL; {能否繼承; True 表示能用 CreateProcess 繼承控制代碼建立新進程} dwProcessId: DWORD {指定進程 ID}): THandle; {成功會返回進程控制代碼; 失敗返回 0}//dwDesiredAccess
為了加快硬體的訪問速度, 編譯器通常要使用"資料對齊", 譬如://下面結構中: SizeOf(TRec) = 6; 因為 b 在這裡也要佔 2 位元組.TRec = record a: Word; b: Byte; c: Word;end;//下面結構中: SizeOf(TRec) = 16; 這裡的 a 和 b 共佔了 8 個位元組.TRec = record a: Byte; b: Byte; c: Double;end;//下面結構中: SizeOf(TRec) = 8;
擷取方法:運行: tdump.exe C:\windows\system32\gdi32.dll
一個位元組有 8 個位, 這些位可能是 0 也可能是 1; 現在要算出一個位元組中是 1 的位共有多少個.第一種方法是一個函數; 第二種方法笨了點, 是先把 256 種可能值給一個數組, 隨時調取.第一種方法雖然靈巧, 但不如第二種方法快(作者書中說: 在非特殊情況下, 一般要快到 10 倍左右); 第二種方法雖然快捷, 並且使用方便, 但要以 256 個位元組的數組空間為代價.unit Unit1;interfaceuses Windows, Messages, SysUtils,
如果參數在函數中不可能修改, 一定要使用 const;不然, 編譯器就會:假定先修改, 先要備份; 使用前後要增減引用計數; 還要套上 try finally.指定了 const 就可以避免以上過程從而提高效率.測試:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(
如果 Pos 函數的第一個參數是 Char 而非 String, 那麼編譯器也會先把 Char 轉換為 String;從記憶體結構到管理機制, String 遠比 Char 要複雜.因此, 面對這種情況(要定位的是 Char) Pos 還有最佳化的餘地; 最佳化後速度會提升 5 倍左右.測試:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure FormCreate(Sender: TObject); procedure
首先, 上一個例子, 用數組也可以實現, 並且更簡單:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender:
本例:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; Button2: TButton; Button3: TButton; Button4:
前面例子中, 鏈表的尾節點都再沒有連結其他節點; 如果讓尾節點再連結首節點, 不就是迴圈鏈表了嗎?本例:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; procedure