Time of Update: 2017-02-27
建立一應用程式,在表單上放置一個ListView控制項和一個按鈕控制項,然後粘貼以下代碼,代碼中的有關API和常量參考Windows單元,方法是按是Ctrl鍵,然後單擊滑鼠左鍵unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, ComCtrls;typeTForm1 = class(TForm)ListView1:
Time of Update: 2017-02-27
在資料處理量很大的情況下,如何在資料處理的同時響應使用者操作?Windows95/98和WindowsNT作為多線程的多任務作業系統,其調度單元是線程,即線程是系統分配處理器時間資源的基本單元,所以我們可以利用線程實現在處理大批量資料的同時響應使用者操作。DELPHI作為一個優秀的開發平台,對開發多線程應用程式提供了強有力的支援,即可直接利用32位Windows環境提供的Win32API介面函數CreateThread,也可利用DELPHI中提供的BeginThread函數。在下面例子中,正是使
Time of Update: 2017-02-27
CreateParams方法用來設定元件的視窗式樣及其它必須傳遞至CreateWindowEx API的參數。要改變元件的視窗式樣,例如增加或拿掉元件的垂直捲軸只要改寫CreateParams方法:procedure TMyControl.CreateParams(var Params: TCreateParams);begininherited CreateParams(Params);if IWantAScrollBar thenParams.Style := Params.Style
Time of Update: 2017-02-27
Windows 95和Windows NT 4.0包含一個令人興奮的特性:工作列。這個通常位於地區任務條右面的地區能包含小的表徵圖,這些表徵圖能引出大的應用程式或者菜單。本篇文章主要討論如何使用Delphi建立這樣的應用程式。在開始之前,請看下面的需要的介面方面的內容:從技術方面來說,一個工作列應用程式非常象普通的應用程式,它有一個訊息迴圈,相應Windows的訊息來完成相應的功能。Procedure RunTrayApplication;Var Msg :
Time of Update: 2017-02-27
TDXPaintBox和TPaintBox一樣擁有重要的屬性 Canvas;現在要關心的是TDXPaintBox另一個主要屬性: DIB(TDIB 對象);在下面學習TDIB時, 應該會大量用到這個TDXPaintBox.雖然叫它TDXPaintBox, 但我覺得它更像TImage, 只是把TImage.Picture換做了TDXPaintBox.DIB.在設計時可以給TDXPaintBox 的DIB對象添加圖片, 不過本例是運行時添加的;運行效果圖:另外, 這是本例中的圖片, 應右鍵另存到C:
Time of Update: 2017-02-27
這兩個函數可不是一般的麻煩, 特別是Blt(); 暫時搞不徹底, 這是初步嘗試的例子:代碼檔案:unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, DXDraws, StdCtrls, DirectX;typeTForm1 = class(TForm)DXDraw1: TDXDraw;Button1: TButton;Button2:
Time of Update: 2017-02-27
本例效果圖:代碼檔案:unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, DXDraws, StdCtrls;typeTForm1 = class(TForm)DXDraw1: TDXDraw;Button1: TButton;Button2: TButton;Button3: TButton;procedure
Time of Update: 2017-02-27
TDirectDrawSurface.Fill();TDirectDrawSurface.FillRect();TDirectDrawSurface.FillRectAlpha();TDirectDrawSurface.FillRectAdd();TDirectDrawSurface.FillRectSub();其中 Fill 在前面每個例子中都有用到; 另外注意: 這幾個函數中的顏色格式有點亂:Fill 與 FillRect 使用的是非 Delphi 的顏色格式, 它們使用的紅色應該是:
Time of Update: 2017-02-27
使用者在使用資料庫應用程式時經常要產生報表,利用Delphi 4的QReport組件,可以協助我們快速方便地產生報表。這裡以一個裝置管理報表為例說明如何用QReport組件與Query組件設計從多個資料表中產生報表。一、所用資料庫這裡用到三個Foxpro資料表,DLBMK(裝置大類編碼)、SBXHK(裝置型號及配置)、BMSBK(裝置所在部門),存放在D:\SB目錄下。其庫結構如下:(一) DLBMK 欄位名稱 欄位類型
Time of Update: 2017-02-27
SetWindowsHookEx 函數的第一個參數表示鉤子類型, 共有 14 種選擇, 前面我們已經用過兩種:WH_KEYBOARD、WH_MOUSE.系統會為每一種類型的鉤子建立一個表(那就是 14 個表), 譬如某個應用程式啟動了鍵盤鉤子, 我們自己的程式也啟動了鍵盤鉤子, 同樣是鍵盤鉤子就會進入同一個表. 這個表(可能不止一個, 可能還會有滑鼠鉤子等等)就是傳說中的"鉤子鏈".假如某個鉤子鏈中共進來了三個鉤子(譬如是: 鉤子A、鉤子B、鉤子C 依次進來), 最後進來的
Time of Update: 2017-02-27
目前對鉤子的理解:譬如我們用滑鼠在某個視窗上雙擊了一次, 或者給某個視窗輸入了一個字母 A;首先發現這些事件的不是視窗, 而是系統!然後系統告訴視窗: 喂! 你讓人點了, 並且是連續點了兩滑鼠, 你準備怎麼辦?或者是系統告訴視窗: 喂! 有人向你家裡扔磚頭了, 不信你看看, 那塊磚頭是 A.這時視窗的對有些事件會忽略、對有些事件會做出反應:譬如, 可能對按一下滑鼠事件忽略, 視窗想: 你單擊我不要緊, 累死你我不負責;但一旦誰要雙擊我, 我會馬上行動, 給你點顏色瞧瞧!這裡視窗準備要採取的行動,
Time of Update: 2017-02-27
在《WebService大講堂之Axis2(5):會話(Session)管理》一文中介紹了如何使用Axis2來管理同一 個服務的會話,但對於一個複雜的系統,不可能只有一個WebService服務,例如,至少會有一個系統管理使用者 的WebService(使用者登入和註冊)以及處理業務的WebService。象這種情況,就必須在多個WebService服 務之間共用工作階段狀態,也稱為跨服務會話(Session)管理。實現跨服務會話管理與實現同一個服務的會話
Time of Update: 2017-02-27
前面的例子都是讓若干線程做同樣的事情, 下面這個例子中的三個線程將分別在三個畫板上隨機畫不同顏色的橢圓.接下來的很多事情我想要基於這個例子來做.本例效果圖:代碼檔案:unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, ExtCtrls;typeTForm1 = class(TForm)PaintBox1:
Time of Update: 2017-02-27
在《WebService大講堂之Axis2(2):複合類型資料的傳遞》中講過,如果要傳遞二進位檔案(如圖 像、音頻檔案等),可以使用byte[]作為資料類型進行傳遞,然後用戶端使用RPC方式進行調用。這樣做 只是其中的一種方法,除此之外,在用戶端還可以使用wsdl2java命令產生相應的stub類來調用 WebService,wsdl2java命令的用法詳見《WebService大講堂之Axis2(1):用POJO實現0配置的
Time of Update: 2017-02-27
想過沒有? WaitableTimer 是在 "定時等待", 前面例子中的 WaitForSingleObject 等待函數 "也在等待", 這就 "雙重等待" 了, 這不好, 太浪費資源.其實作為同步工具, 前面的幾種方法(事件、訊號、臨界區)基本夠用了; WaitableTimer 的作用並不是為了重複前面的功能, 它的主要功用類似 TTimer 類; 譬如每隔多長時間執行一段代碼、或在指定的時間去執行一段代碼.既然有了方便的
Time of Update: 2017-02-27
據說 Event(事件對象) 是多線程最原始的同步手段, 我覺得它是最靈活的一個.Event 對象(的控制代碼表)中主要有兩個布爾變數, 從它的建立函數中可以看得清楚:function CreateEvent( lpEventAttributes: PSecurityAttributes; {安全設定} bManualReset: BOOL; {第一個布爾} bInitialState: BOOL; {第二個布爾} lpName: PWideChar
Time of Update: 2017-02-27
原理分析:互斥對象是系統核心對象, 各線程都可以擁有它, 誰擁有誰就能執行;執行完畢, 用 ReleaseMutex 函數釋放擁有權, 以讓其他等待的線程使用.其他線程可用 WaitForSingleObject 函數排隊等候(等候也可以理解為排隊申請).使用過程:var hMutex: THandle; {應該先聲明一個全域的互斥控制代碼}CreateMutex {建立一個互斥對象}WaitForSingleObject {用等待函數排隊等候}ReleaseMutex
Time of Update: 2017-02-27
一下子跳到等待函數 WaitForSingleObject, 是因為下面的 Mutex、Semaphore、Event、WaitableTimer 等同步手段都要使用這個函數; 不過等待函數可不止 WaitForSingleObject 它一個, 但它最簡單.function WaitForSingleObject( hHandle: THandle; {要等待的物件控點} dwMilliseconds: DWORD {等待的時間, 單位是毫秒}): DWORD; stdcall; {
Time of Update: 2017-02-27
發生異常時的流程式控制制程式碼片段發生異常的情況是比較複雜的,有些程式碼片段只會發生一種異常,而有些代碼會發生多種異常, 有些工作不管程式碼片段有沒有發生異常都必須進行處理。下面我們來看一下Java語言如何對這些不同情況進 行處理。(1)使用try…catch程式運行產生異常時,將從異常發生點中斷程式並向外拋出異常資訊。程式通過try…catch可以捕獲 發生的異常,並做出相應的處理,下面我們來看一段異常處理的代碼,如代碼清單2-55所示。代碼清單2-55 異常處理1
Time of Update: 2017-02-27
本文配套源碼我們知道TCP/IP協議是至今發展最為成功的協議之一,也是整個互連網的基礎。它在傳輸層有兩個不同的協議:TCP和UDP,用途都很廣泛,下面我就UDP做一個樣本程式。整個例子有兩個程式組成,一個發 送資料,另一個程式接收資料後,完成繪圖工作。本文程式運行效果圖如下:一、發送程式首先建立資料發送程式(Fason)。一共發送四個資料:圓心的X座標、圓心的Y座標、圓半徑R、圓的 顏色。它的實現主要如下:void CFasonDlg::OnSend(){ UpdateData(TRUE);