注意了,這里為你送上一冊非常有用的代碼!

4年前 (2020-09-15)閱讀325回復0
書(shū)本印刷
書(shū)本印刷
  • 管理員
  • 發(fā)消息
  • 注冊排名793
  • 經(jīng)驗值100
  • 級別管理員
  • 主題20
  • 回復0
樓主
印刷廠(chǎng)直印加工●彩頁(yè)1000張只需要69元●名片5元每盒-更多產(chǎn)品印刷報價(jià)?聯(lián)系電話(huà):138-1621-1622(微信同號)

其實(shí)也沒(méi)什么啦,大家多多交流!

示例文件的位置

注意了,這里為你送上一冊非常有用的代碼!

????1,Q:用 DEBUG 讀取硬盤(pán)的主引導記錄:

??????A: C:\>DEBUG

??????????-a100

?????????mov ax,0201 ;02 代表“讀”

?????????mov bx,200? ;運行結果放在內存地址 0200 處

???????? mov cx,1???;

?????????mov dx,80??? ;80 代表第一硬盤(pán)

?????????int 13??????? ;調用磁盤(pán)中斷

?????????int 20??????? ;結束程序

??????????-g=100??????? ;從 100 處開(kāi)始運行程序

??????????-d200???????? ;顯示主引導記錄

??????????-q

注意了,這里為你送上一冊非常有用的代碼!

注意了,這里為你送上一冊非常有用的代碼!

????2,Q:用批處理給一系列文件循環(huán)改名:

??????A:假設有三個(gè)文件,名為F3.EXE,F2.EXE,F1.EXE,則以下批處理可以給他們循環(huán)改名:

??????AUTO.BAT:

??????ren F3.EXE X

??????ren F2.EXE F3.EXE

??????ren F1.exe F2.exe

??????ren X F1.EXE

注意了,這里為你送上一冊非常有用的代碼!

注意了,這里為你送上一冊非常有用的代碼!

????3,Q:那些 Web server 支持 ASP?

??????A:一般情況下,只有 Windows 下的 Web server 支持 ASP, 如高版本的 IIS、PWS4.0 等。Windows98 和 Windows98se 上隨盤(pán)附帶的 PWS 可以支持 ASP。 WindowsNT4.0 安裝 SP4 和 OP4 后,也可以支持 ASP。Windows2000 直接支持 ASP。一些在 UNIX 下運行的 Web Server,安裝特定軟件后,也可以支持 ASP。

注意了,這里為你送上一冊非常有用的代碼!

注意了,這里為你送上一冊非常有用的代碼!

????4,Q:為何我將這句話(huà)(“Let's go now!”)插入到數據庫中的時(shí)候會(huì )發(fā)生錯誤?

??????A:因為大多數的數據庫(Access,MS SQL Server) 都把單引號當作分割符號使用的,所以不可以直接將單引號插入到數據庫中,你必須在執行SQL語(yǔ)句之前, 分別將每一個(gè)單引號替換成兩個(gè)單引號:

??????MyData=Replace(MyData," ' "," '' ",1)

然后,再保存到數據庫中就行了。

注意了,這里為你送上一冊非常有用的代碼!

注意了,這里為你送上一冊非常有用的代碼!

????5,Q:在 ASP 中使用 ADO 的 AddNew 方法和直接使用“Insert into...”語(yǔ)句有何不同?那種方式更好?

??????A: ADO 的 AddNew 方法只是將“Insert into ”語(yǔ)句封裝了起來(lái), 所以,當對大量數據進(jìn)行操作的時(shí)候,直接使用SQL語(yǔ)句將會(huì )大大加快存取數據的速度,因為他減少了ADO的 “翻譯”時(shí)間。雖然SQL語(yǔ)句不如 AddNew 等語(yǔ)句容易接受,但是學(xué)習一些常用的 SQL 語(yǔ)句在進(jìn)行數據庫編程中是非常重要的。

注意了,這里為你送上一冊非常有用的代碼!

注意了,這里為你送上一冊非常有用的代碼!

????6,Q:經(jīng)??吹铰?lián)接數據庫有兩種方式 DSN 以及 DSN-LESS,兩者是什么意思? 有什么不同嗎?

??????A:DSN 是英文“Data Source Name”(數據源名)的縮寫(xiě),DSN方式也就是采用數據源的聯(lián)接方式,這個(gè)數據源可以在“控制面板”里面的“ODBC Data Sources”中進(jìn)行設置,然后就這樣使用: Conn.Open "DSN=Test;UID=Admin;PWD=;"其中的“Test”就是你自己設定的數據源的名稱(chēng)。注意,要同時(shí)使用 UID 以及 PWD,否則會(huì )出錯。

??????同樣的,DSN-LESS 就是非數據源方式的聯(lián)接方法,使用方法是:

??????Conn.Open "Driver={Microsoft Access Driver (*.mdb)};Dbq=\somepath\mydb.mdb;Uid=Admin;Pwd=;"

??????在相同的硬件環(huán)境下,DSN-LESS 方式要比 DSN 方式的性能要高,但是一旦 ASP 源代碼因為某些安全問(wèn)題而被別人看到,將會(huì )泄漏數據庫的賬號以及密碼,所以這兩種方式是各有利弊的。

注意了,這里為你送上一冊非常有用的代碼!

注意了,這里為你送上一冊非常有用的代碼!

????7,Q:為什么我使用“Window.open()”方法打開(kāi)的新窗口的 ASP 頁(yè)面中經(jīng)常會(huì )出現 Session 丟失的現象?

??????A:微軟的 IE4.x 會(huì )經(jīng)常出現這種情況,但 IE5.x 中已經(jīng)糾正了這個(gè)錯誤。 所以,為了兼容所有的瀏覽器,你可以使用諸如“test.asp?name=xxx”的方式來(lái)在窗口之間傳遞參數,這樣的效果更好, 只是要注意,如果傳遞的參數很重要,請不要使用明文方式進(jìn)行傳遞,否則很容易導致安全問(wèn)題。

注意了,這里為你送上一冊非常有用的代碼!

注意了,這里為你送上一冊非常有用的代碼!

????8,Q:好像 Redirect 方法只可以重新定向到同一幀里面,可不可以定向到其他幀呢?

??????A:可以,要加上這個(gè):〈BASE Target="FrameName"〉。 然后,當你再使用 Redirect 方法的時(shí)候,就會(huì )重新定向到名字叫做 FrameName 的幀里面了。

注意了,這里為你送上一冊非常有用的代碼!

注意了,這里為你送上一冊非常有用的代碼!

????9,Q:為什么我使用 Response.Redirect 的時(shí)候出現錯誤?    

??????A:最常見(jiàn)的原因就是你在寫(xiě)入頁(yè)面之后對 HTTP 標題進(jìn)行了修改,解決的方法是在頁(yè)面的開(kāi)始寫(xiě)上

〈%Response.Buffer=True%〉

注意了,這里為你送上一冊非常有用的代碼!

注意了,這里為你送上一冊非常有用的代碼!

????10,Q:最近隨同 IIS5.0 一起出現的 ASP3.0 有何新的功能?

021yin.com 。

注意了,這里為你送上一冊非常有用的代碼!

注意了,這里為你送上一冊非常有用的代碼!

????11,Q:我有沒(méi)有必要在每一個(gè) ASP 文件中使用“Option Explicit”?

???????A:你最好這樣,因為這樣可以使得你的程序出錯機會(huì )降到最少,并且會(huì )提升整體性能將近 9.8% 。

注意了,這里為你送上一冊非常有用的代碼!

注意了,這里為你送上一冊非常有用的代碼!

????12,Q:我需不需要在每個(gè) ASP 文件的開(kāi)頭使用 〈%@LANGUAGE=VBScript%〉?

???????A:如果你使用的腳本語(yǔ)言就是 VBScript 的話(huà), 請盡量不要使用這個(gè)語(yǔ)句(VBScript是 ASP 的缺省腳本語(yǔ)言),否則程序整體性能將會(huì )下降將近 1.2%。 但是如果你使用的并不是 VBScript 語(yǔ)言的話(huà),請使用這個(gè)語(yǔ)句。

注意了,這里為你送上一冊非常有用的代碼!

注意了,這里為你送上一冊非常有用的代碼!

????13,Q:我在 ASP 腳本中寫(xiě)了很多的注釋?zhuān)浏溥@會(huì )不會(huì )影響服務(wù)器處理 ASP 文件的速度?

???????A:經(jīng)國外技術(shù)人員測試,帶有過(guò)多注釋的 ASP 文件整體性能僅僅會(huì )下降 0.1%,也就是說(shuō)基本上不會(huì )影響到服務(wù)器的性能下降。

注意了,這里為你送上一冊非常有用的代碼!

注意了,這里為你送上一冊非常有用的代碼!

????14,Q:為什么我的記錄集的 RecordCount 值總是返回 -1 ?

???????A:你應當使用這種模式來(lái)打開(kāi)存取數據庫的記錄集:

??????rec.open strSQL,conn,1,1

??????其中的 strSQL 是操作數據庫的 SQL 語(yǔ)句; conn 是聯(lián)接數據庫的 Connection 變量。

注意了,這里為你送上一冊非常有用的代碼!

注意了,這里為你送上一冊非常有用的代碼!

????15,Q:什么是線(xiàn)程?

???????A:線(xiàn)程是指程序的一個(gè)指令執行序列,WIN32 平臺支持多線(xiàn)程程序,允許程序中存在多個(gè)線(xiàn)程。 在單 CPU 系統中,系統把 CPU 的時(shí)間片按照調度算法分配給各個(gè)線(xiàn)程,因此各線(xiàn)程實(shí)際上是分時(shí)執行的,在多 CPU 的 Windows NT 系統中, 同一個(gè)程序的不同線(xiàn)程可以被分配到不同的 CPU 上去執行。由于一個(gè)程序的各線(xiàn)程是在相同的地址空間運行的,因此設及到了如何共享內存, 如何進(jìn)行線(xiàn)程通信等問(wèn)題,這樣便需要處理各線(xiàn)程之間的同步問(wèn)題,這是多線(xiàn)程編程中的一個(gè)難點(diǎn)。

注意了,這里為你送上一冊非常有用的代碼!

? 16,Q:在 VB 中用 ADO 通過(guò) ODBC 連接 ORACLE 數據庫,讀取有記錄的表中的數據時(shí)為何返回結果的總是 NULL?

???? A:請使用微軟的 ODBC for Oracle 驅動(dòng)程序,在 ODBC 管理器中是 Microsoft ODBC for Oracle。不要使用 Oracle 自帶的驅動(dòng)程序。盡量使用新的 ODBC 驅動(dòng)程序。?

? 17,Q:VB 在打開(kāi)窗口中,文件類(lèi)型及文件名變?yōu)閬y碼,不知如何解釋(重裝后也不行)?

A:將 \windows\fonts 目錄下的一個(gè)名為 mingliu.ttc 的文件刪了試試。

? 18,Q:請問(wèn)怎樣在 VB 中設置系統熱鍵?

???? A:代碼如下:

??????? Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vkey As Long) As Integer?

????   Private Function MyHotKey(vKeyCode) As Boolean?

????????? MyHotKey = ((GetAsyncKeyState(vKeyCode) ????   End Function?

??   然后,建立一個(gè) timer 控件,輸入以下代碼:

??????? Sub timer1_timer()?

????????? If myHotKey(vbkeyX) then …  ' 這里的 vbkeyX 是指系統熱鍵為 X

????   End Sub?

? 19,Q:如何讓一個(gè)窗口總是處于各窗口的最上層?

???? A:代碼如下:

???   Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _?

??????   ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long?

???   Const HWND_TOPMOST = -1?

??  ? Private Sub Form_Load()?

??  ??? SetWindowPos Me.hwnd,HWND_TOPMOST,Me.Left/Screen.TwipsPerPixelX, _

????????????? Me.Top\Screen.TwipsPerPixelY,Me.Width\Screen.TwipsPerPixelX, _?

???    Form1.Height \ Screen.TwipsPerPixelY, 0?

?????? End Sub?

? 20,Q:我想在 Delphi 程序中直接調用 Word 文檔并使用 Word 的功能,這個(gè)程序該怎樣編? 該用什么控件呢?

???? A:

?? 方法一:?

  1) 從 WORD.EXE 中導入 WORD 的 Type Library?

  2) var wd : _Application;?

   wdt : Table;?

   dot1,FileName: OleVariant;?

  begin?

   dot1 := 'c:\abc.dot';?

   wd := coApplication_.Create;?

   wd.Documents.Add(dot1, EmptyParam);?

   wdt := wd.ActiveDocument.Tables.Item(1);?

   wdt.Cell(1,3).Range.Text := 'Hello!';?

   //以下是保存和關(guān)閉文檔及 Word, 可以不關(guān),下面兩個(gè)例程略過(guò)此步。?

   //EmptyParam 用來(lái)代替不使用的參數。?

   FileName := 'c:\test.doc';?

   wd.ActiveDocument.SaveAs(FileName,EmptyParam,EmptyParam,?

   EmptyParam,?

     EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,?

     EmptyParam,?

     EmptyParam);?

   wd.ActiveDocument.Close(EmptyParam,EmptyParam,EmptyParam);?

   wd.Quit(EmptyParam,EmptyParam,EmptyParam);?

  end;?

  方法二:?

  var?

   Ole: Variant;?

   NewDoc: Variant;?

   DocTable: Variant;?

  begin?

  //方法二的參數可以直接使用 Delphi 的數據類(lèi)型。其它方法只能使用 OleVariant 類(lèi)型.?

    Ole := CreateOleObject('Word.Application');?

    Ole.Application.Visible := true;?

    NewDoc := Ole.Documents.Add('C:\abc.dot');?

    DocTable := NewDoc.Tables.Item(1);?

    DocTable.Cell(1,3).Range.Text := 'Hello!';?

  //設置Variant對象為UnAssigned來(lái)釋放該對象的引用。?

    NewDoc := UnAssigned;?

    DocTable := UnAssigned;?

    Ole := UnAssigned;?

  end;?

  方法三:使用 Server 頁(yè)的 TWordApplication 控件,同理,你可以用里頭的所有控件。Ole 為T(mén)WordApplication控件名稱(chēng)。

  var?

   NewDoc: Variant;?

   DocTable: Variant;?

  o: OleVariant;?

  begin?

   o := 'c:\abc.dot';?

   NewDoc := Ole.Documents.Add(o,EmptyParam);?

   DocTable := NewDoc.Tables.Item(1);?

   DocTable.Cell(1,3).Range.Text := 'Hello!';?

   NewDoc := UnAssigned;?

   DocTable := UnAssigned;?

  end;

??? 推薦用方法一和方法三。因為方法二不提供類(lèi)型參數檢查,也因為方法二的接口調用效率低。程序中所使用的屬性和方法資料可以在 Office 的 VBA 幫助中查到。需要者請在安裝 Office 時(shí)選擇安裝 VBA 編程幫助。

? 21,Q:想用 Dephi4.0 實(shí)現這樣的效果:在程序啟動(dòng)時(shí)在主窗口中同時(shí)放置幾個(gè) Dockable 的子窗口。子窗口的大小和 Dock 的位置都可以變化,也可以拖離主窗口成為獨立的窗口。(如同Visual C++6.0 集成環(huán)境的界面一樣),請問(wèn)怎么實(shí)現?

?????? A:在 Delphi5.0 的 Borland\Delphi5\Demos\Docking 文件夾下有完整的示例程序,請參看例程

?? 22,Q:我的 VB6 總把全角符號和半角符號一樣對待,而且它對字符串的長(cháng)度也辨不清如len("中華人民共和國")的返回值為 7。而其 FileLen() 的返回值卻又似乎正常,等于文件的長(cháng)度(Bit),請問(wèn)到底得如何解決?

???? A: VB4.0 以后,string 類(lèi)型以 UNICODE 存放,以 ANSI 形式寫(xiě)入文件。所以,len 和 FileLen 結果不同。len 返回字數,每個(gè)中、英文均為 1;lenb 返回字節數,每個(gè)中、英文均為 2。?

 ? 如果需要返回 ANSI 的字節數,可用如下函數:

????? Public Function LenANSI(strU as string) as long?

??????? LenANSI = LenB(StrConv(strU, vbFromUnicode))?

????? End function?

? 23,Q:能否在 VB 中作 DLL 文件?

???? A:VB 不能制作 Win32 DLL 文件,但它可創(chuàng )建 ActiveX DLL。

? 24,Q:如何在不使用 Windows 的打印對話(huà)框或打印設置框的情況下,在 VB 程序中設定打印機的自定義紙張尺寸?

???? A:可設置 Printer 對象的 Width 和 Height 屬性。對于同一種打印機,Windows9X 往往可以成功設置自定義紙張大小,而 NT 不能。這主要取決于打印機驅動(dòng)程序。另外,即使驅動(dòng)程序接受這些設置,它也會(huì )根據情況作些微調。

? 25,Q:在 VB 中如何控制計算結果的整數位和小數位?

???? A:可用 Format 函數,或 VB 新增的 FormatNumber(可本地化)等函數。

? 26,Q:在 VB6.0 中如何區分漢字和半角西文字符?

???? A:用 LenB(StrConv(str, vbFromUnicode)),結果為 1 是半角,為 2 是全角。另外一個(gè) undocumented 的方法是,ASC(str),結果>0是半角,

?27,Q:微軟VISUAL J++ 和 JAVA 有什么不同?

???? A:微軟已經(jīng)放棄了java,他發(fā)布了一個(gè)新產(chǎn)品叫 C# 與 sun 的 java 競爭。C# 與 C++ 類(lèi)似卻很容易開(kāi)發(fā)COM/DCOM 程序,但目前北美沒(méi)有人用 C#。而 sun 的 java 卻很熱,年薪在 6 萬(wàn)元以上。

? 28,Q:如何在 VB 中調用資源文件中的資源,如圖片、光標等?

???? A:可用 LoadResPicture(index,format) 來(lái)調用。其中“index”是必需的,它是一個(gè)整數或字符串,用來(lái)指定資源文件中數據的標識符 (ID) ,“format”是必需的一個(gè)數值或常數,指定返回數據的格式,返回一個(gè) Picture 對象,例如位圖、圖標或光標。

???例如:Picture1.Picture=LoadResPicture(100, vbResBitmap),常量有vbResBitmap ,vbResCursor, vbResIcon 等。*.res 文件可以用 VC++ 來(lái)產(chǎn)生和編輯,在 VB 中調用。

? 29,Q:是否運行用 Delphi 開(kāi)發(fā)的數據庫應用程序時(shí),一定要裝 BDE? 能否可以將其包含在應用程序中,使不安裝 BDE,就可運行??

???? A:不可以。BDE 是 Delphi 和 Inprise 公司其他一些產(chǎn)品的數據引擎!有它才可以和 ODBC 相連接。

? 30,Q:請問(wèn)怎么樣將用VFP5.0編寫(xiě)的小軟件編繹成可以脫離VFP而獨立運行的軟件?

???? A:將 VFP5.0 的的兩個(gè)支持文件放置在與可執行文件相同的目錄中,或者在 MS-DOS 搜索路徑中,即可獨立運行。

? 31,Q: 如何在 VC++6.0 中使用 MSComm 控件與單片機通訊? 要求是 PC 機發(fā)一個(gè)字節的命令,單片機返回相應的1--3字節數據。

???? A:首先將端口串行化:

?? commh = CreateFile(tmpstr, GENERIC_READ,GENERIC_WRITE, NULL, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);

?? 然后設 DCB。讀使用 ReadFile(hComm, lpBuf, READ_BUF_SIZE, &dwRead, &osReader); 寫(xiě)使用 WriteFile(hComm, lpBuf, dwToWrite, &dwWritten, &osWrite);

?? 也可以使用 _inp, _outp 來(lái)直接寫(xiě)串口的端口。

? 32,Q:在 VB 網(wǎng)格中輸入數據:

???? A:VISUAL BASIC 提供的網(wǎng)格控制(Grid)主要是用來(lái)直觀(guān)地輸出數據,但不能輸入數據,使用起來(lái)很不方便。能不能向網(wǎng)格中輸入數據呢?這里提供一種解決方法,供大家參考:

??? 利用一文本框作為緩沖,實(shí)現編輯功能。當網(wǎng)格改變行列時(shí),把網(wǎng)格當前行列的內容傳遞給文本框;當網(wǎng)格中有 ASCII 字符產(chǎn)生時(shí),把輸入焦點(diǎn)設置為文本框,并把輸入的 ASCII 字符送給文本框;當編輯完文本框的內容時(shí),按 Enter 鍵或 TAB 鍵,把文本框的內容送給網(wǎng)格的當前行列,并把輸入焦點(diǎn)設置為網(wǎng)格。

??? 如下程序所示(其中 Textl 為文本框,Labell 為標簽,Gridl 為網(wǎng)格):

??? Option Explicit

??? Const EnterAsc=13

??? Const TabAsc=9

??? Private Sub Form_Load()

???? Labell.Caption=”請輸入”

??? End Sub

??? Private Sub Gridl_KeyPress(KeyAscii As Integer)

???? Text1.StFocus

???? Textl.SelStart=0

???? If KeyAscii <> EnterAsc And KeyAscii <> TabAsc Then

????? SendKeys Chr(KeyAscii)

???? End IF

??? End Sub

??? Private Sub Gridl_RowColChange()

???? Textl.Text=Grid1.Text

??? End Sub

??? Private Sub Text1_KeyPress(KeyAscii As Integer)

???? If KeyAscii=EnterAsc Then

????? Grid1.SetFocus

????? KeyAscii=0

???? End If

??? End Sub

??? Private Sub Text1_LostFocus()

???? Grid1.Text=Text1.Text

??? End Sub

? 33,Q:啟動(dòng)“控制面板”中的設置程序:

???? A:

'控制面板 Control Panel ( CONTROL.EXE )

'Control Panel:

' rundll32.exe shell32.dll,Control_RunDLL

'輔助選項 Accessability Options ( ACCESS.CPL )

'Accessability Properties (Keyboard):

' rundll32.exe shell32.dll,Control_RunDLL access.cpl,,1

'Accessability Properties (Sound):

' rundll32.exe shell32.dll,Control_RunDLL access.cpl,,2

'Accessability Properties (Display):

' rundll32.exe shell32.dll,Control_RunDLL access.cpl,,3

'Accessability Properties (Mouse):

' rundll32.exe shell32.dll,Control_RunDLL access.cpl,,4

'Accessability Properties (General):

' rundll32.exe shell32.dll,Control_RunDLL access.cpl,,5

'添加/刪除程序 Add/Delete Programs ( APPWIZ.CPL )

'Add/Remove Programs Properties (Install/Uninstall):

' rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,1

'Add/Remove Programs Properties (Windows Setup):

' rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,2

'Add/Remove Programs Properties (Startup Disk):

' rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,3

'顯示設置 Display Options ( DESK.CPL )

'Display Properties (Background):

' rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0

'Display Properties (Screen Saver):

' rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,1

'Display Properties (Appearance):

' rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,2

'Display Properties (Settings):

' rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,3

'區域設置 Regional Settings ( INTL.CPL )

'Regional Settings Properties (Regional Settings):

' rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,0

'Regional Settings Properties (Number):

' rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,1

'Regional Settings Properties (Currency):

' rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,2

'Regional Settings Properties (Time):

' rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,3

'Regional Settings Properties (Date):

' rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,4

'Joystick Options ( JOY.CPL )

'游戲控制器 Joystick Properties (Joystick):

' rundll32.exe shell32.dll,Control_RunDLL joy.cpl

'鼠標、鍵盤(pán) Mouse/Keyboard/Printers/Fonts Options ( MAIN.CPL )

'Mouse Properties:

' rundll32.exe shell32.dll,Control_RunDLL main.cpl @0

'Keyboard Properties:

' rundll32.exe shell32.dll,Control_RunDLL main.cpl @1

'Printers:

' rundll32.exe shell32.dll,Control_RunDLL main.cpl @2

'Fonts:

' rundll32.exe shell32.dll,Control_RunDLL main.cpl @3

'郵件和傳真 Mail and Fax Options ( MLCFG32.CPL )

'Microsoft Exchange Profiles (General):

' rundll32.exe shell32.dll,Control_RunDLL mlcfg32.cpl

'多媒體 Multimedia/Sounds Options ( MMSYS.CPL )

'Multimedia Properties (Audio):

' rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,0

'Multimedia Properties (Viedo):

' rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,1

'Multimedia Properties (MIDI):

' rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,2

'Multimedia Properties (CD Music):

' rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,3

'Multimedia Properties (Advanced):

' rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,4

'聲音屬性 Sounds Properties:

' rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl @1

'安裝調制解調器 Modem Options ( MODEM.CPL )

'Modem Properties (General):

' rundll32.exe shell32.dll,Control_RunDLL modem.cpl

'網(wǎng)絡(luò )設置 Network Option ( NETCPL.CPL )

'Network (Configuration):

' rundll32.exe shell32.dll,Control_RunDLL netcpl.cpl

'口令設置 Password Option ( PASSWORD.CPL )

'Password Properties (Change Passwords):

' rundll32.exe shell32.dll,Control_RunDLL password.cpl

'系統/添加新硬件設置 System/Add new Hardware ( SYSDM.CPL )

'System Properties (General):

' rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,0

'System Properties (Device Manager):

' rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,1

'System Properties (Hardware Profiles):

' rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,2

'System Properties (Performance):

' rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,3

'Add New Hardware Wizard:

' rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl @1

'日期和時(shí)間設置 Date and Time Options ( TIMEDATE.CPL )

'Date/Time Properties:

' rundll32.exe shell32.dll,Control_RunDLL timedate.cpl

'微軟郵局設置 Microsoft Mail Postoffice Options ( WGPOCPL.CPL )

'Microsoft Workgroup Postoffice Admin:

' rundll32.exe shell32.dll,Control_RunDLL wgpocpl.cpl

? 34,Q:交換鼠標左、右鍵:

??? A:拉兩個(gè) Command 按鈕,鍵入以下代碼可也:

Option Explicit

Private Declare Function SwapMouseButton Lib "user32" (ByVal bSwap As Long) As Long

Private Sub Command1_Click()

SwapMouseButton False '左手

End Sub

Private Sub Command2_Click()

SwapMouseButton True '右手

End Sub

? 35,Q:程序控制光驅(開(kāi))關(guān):

??? A:在工程中添加“Microsoft multimedia Control6.0”控件,再在窗體上加入該 MMControl 控件和 Command 控件,再鍵入以下代碼(據說(shuō)是可以開(kāi)和關(guān),但我沒(méi)放光盤(pán)測試時(shí)只能關(guān)閉光驅):

Private Sub Command1_Click()

With MMControl1

.DeviceType = "CDAudio"

.Command = "Open"

.Command = "Play"

.Command = "Eject"

.Command = "Close"

End With

End Sub

Private Sub Form_Initialize()

MMControl1.Visible = False

End Sub

另外,有人介紹以下調用 API 的方法開(kāi)、關(guān)光驅?zhuān)浏湮业臋C器上也不能實(shí)現,大家可以研究一下:

Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long

Dim retval As Long, retstr As String

Private Sub Command1_Click()

retval = mciSendString("Set CDAudio door open", retstr, 127, 0) '開(kāi)

End Sub

Private Sub Command2_Click()

retval = mciSendString("Set CDAudio door closed", retstr, 127, 0) '關(guān)

End Sub

? 36,Q:用程序遙控計算器 - VB 的 SendKeys 語(yǔ)句范例:

??? A:本示例使用 Shell 函數來(lái)運行 Microsoft Windows 所附的計算器程序;然后使用 SendKeys 語(yǔ)句來(lái)按下計算器的某些數字鍵,最后退出計算器。(若要觀(guān)察示例運行過(guò)程,可將示例粘貼到過(guò)程中,再運行過(guò)程即可。因為 AppActivate 會(huì )將焦點(diǎn)轉移到計算器應用程序,故本示例不能以單步方式來(lái)運行。)

Dim ReturnValue, I

ReturnValue = Shell("CALC.EXE", 1) ' 運行計算器。

AppActivate ReturnValue ' 激活計算器。

For I = 1 To 100 ' 設置計數循環(huán)。

SendKeys I & "{+}", True ' 按下按鍵給計算器

Next I' 將所有 I 值相加。

SendKeys "=", True ' 取得總和

SendKeys "%{F4}", True ' 按 ALT+F4 關(guān)閉計算器。

? 37,Q:ASP 編程中參數傳遞的幾種方法:

??? A:

?? (1)、

??? 在 do.asp 中用 request.form("var1") 取參數的值;

?? (2)、在 中 action=do.asp?var=參數值,或

??? 然后在 do.asp 中用 request.querystring("var") 取參數的值(這是一種明文傳遞方式);

?? (3)、使用 Cookies。設置 ,取值 ;

?? (4)、用 session 變量傳遞參數。設置,取值

??? (注意:一旦使用了 的 ASP“標志”符號,該語(yǔ)句就必須保存在 ASP 文件中。)

? 38,Q:一次性清空本窗口內所有文本框(TextBox):

??? A:

???? Dim txt As Control

???? For Each txt In Me.Controls

????? If TypeOf txt Is TextBox Then

?????? txt.Text = ""

????? End If

???? Next txt

??? (想一下:如果窗口中有幾十個(gè)文本框,用傳統的編程法要寫(xiě)多少行代碼?體會(huì )一下面向對象編程的巨大威力吧!)

? 39,Q:怎樣在 VB 程序中播放 Flash 動(dòng)畫(huà)?

???? A:要用到一個(gè)播放 Flash 動(dòng)畫(huà)的控件 Shockwave Flash。該控件在 Flash4 安裝盤(pán)的 Plugins 目錄下,安裝文件是 InstallAXFlash.exe,安裝后在 VB 部件中選定即可使用。該控件的主要屬性和方法如下:

?? 屬性:Movie 動(dòng)畫(huà)文件

???????? Playing True/False 是否自動(dòng)播放

???????? Loop True/False 是否循環(huán)播放

?? 方法:Play 播放

???????? Stop 停止

???????? Forward 快進(jìn)

???????? Back 快退

???????? Rewind 回放

???????? GotoFrame(n) 繞到指定的幀播放

???????? SetZoomRect(left,top,right,bottom) 設置放大時(shí)的位置

? 40,Q:怎樣在 VB 程序中實(shí)現圖象掃描功能?

???? A:同樣要借用第三方提供的函數。在網(wǎng)站 中調用了。

? 41,Q:在 VB 編程中檢測聲卡是否存在?

???? A:

???? Option Explicit

???? Private Declare Function auxGetNumDevs Lib "winmm.dll" () As Long

???? Private Sub Form_Load()

????? Dim i As Integer

????? i = auxGetNumDevs()

????? If i > 0 Then 'There is at least one sound card on the system

?????? MsgBox "A Sound Card has been detected."

????? Else 'auxGetNumDevs returns a 0 if there is no sound card

?????? MsgBox "There is no Sound Card on this system."

????? End If

???? End Sub

? 42,Q:在 VB 中終止 Windows95 的運行:

???? A:在Visual Basic 程序中,可以使用 Windows API 的 ExitWindowsEx 函數來(lái)從程序中重新啟動(dòng)計算機系 統。 要使用該函數,需要將如下聲明語(yǔ)句包含在窗體的通常聲明部分中:?

   Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long?

   ExitWindowsEx 函數需要 2 個(gè)參數,可以使用一個(gè)或多個(gè)下面的標識的組合來(lái)告訴 ExitWindowsEx 函 數希望進(jìn)行哪種關(guān)機過(guò)程。?

   EWX_FORCE 所有進(jìn)程都被強制終止?

   EWX_LOGOFF 所有的進(jìn)程被強制止,并且用戶(hù)退出登錄(logged off)

   EWX_POWEROFF 計算機系統被關(guān)機,并且如果支持節電特性則計算機被物理關(guān)機?

   EWX_REBOOT 計算機系統被關(guān)機并重新啟動(dòng)?

   EWX_SHUTDOWN 計算機被物理地安全地關(guān)機?

   下面的樣例程序中使用了上面的三個(gè)標識的組合。該標識組合(EWX_LOGOFF,EWX_FORCE,以及EWX_REBOOT) 告訴 Windows 退出所有正在執行的進(jìn)程,使用戶(hù)退出網(wǎng)絡(luò )登錄,使計算機系統處于準備狀態(tài)以供 用戶(hù)關(guān)機。?

樣例程序的使用:

?   1,在 VB 中開(kāi)始一個(gè)新的項目,采用缺省的方法建立 Form1;

 ?? 2,將如下常量和聲明語(yǔ)句添加到 Form1 的通常聲明部分中(注意該聲明語(yǔ)句需要書(shū)寫(xiě)在一行內):?

???? Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long

???? Const EWX_LOGOFF = 0

???? Const EWX_SHUTDOWN = 1

???? Const EWX_REBOOT = 2

???? Const EWX_FORCE = 4

???? Const EWX_POWEROFF = 8

???? Const EWX_RESET = EWX_LOGOFF + EWX_FORCE + EWX_REBOOT

?   3,在 Form1 上添加一個(gè)命令按鈕控件,采用缺省的方法建立 Comand1, 將它的 Caption 屬性設置為“ 重 新啟動(dòng)計算機”;

?   4,將如下代碼添加到 Command1 的單擊事件中:?

???? Private Sub Command1_Click()

????? Dim X As Long

????? X = ExitWindowsEx(EWX_RESET, dwReserved)

???? End Sub

 ?? 按下 F5 來(lái)運行上述樣例程序,單擊命令按鈕,即可重新啟動(dòng)計算機系統。?

? 43,Q:給一大段 VB 程序一次性加上注釋符號:

???? A:VB 注釋程序代碼的符號是 ',只要在某行程序前面加上該符號就可以注釋該行程序。但如果程序代碼語(yǔ)句很多的時(shí)候,一行一行地注釋就非常不方便。其實(shí) VB 本身提供了一次性注釋多條語(yǔ)句的功能:在主菜單“視圖”選項的“工具欄”下,選中“編輯”,VB 的界面會(huì )出現一排工具按鈕,其中就有用于“設置注釋塊”和“解除注釋塊”功能的按鈕。選中一塊語(yǔ)句,按該按鈕即可。

? 44,Q:VB 中在一個(gè)窗體中執行另一個(gè)窗體中的代碼:

???? A:可以用“窗體.代碼”的模式去執行別的窗體的代碼。假設要在窗體 frm1 里執行窗體 frm2 的Form_Click 代碼,程序如下:?

???? Private Sub Form_Click()?

?????? frm2.Form_Click() '在frm1 里執行 frm2 的 From_Click 代碼?

???? End Sub?

? 45,Q:Visual Basic 5.0 支持類(lèi)嗎?

???? A:支持。您可以在 Visual Basic 5.0/6.0 的內部創(chuàng )建自己的類(lèi)。具體說(shuō),您可以為各種類(lèi)型的應用程序創(chuàng )建標準的基礎類(lèi)庫,以便為具體類(lèi)型的程序提供特定的功能,然后將這些類(lèi)編譯進(jìn)您的應用程序中。這樣做可以節省大量您在某一應用程序中重新編寫(xiě)一系列標準功能所需花費的時(shí)間。

? 46,Q:在 VB 5.0 中文版中,表單上最多允許有多少個(gè)控件?

???? A: Visual Basic 5.0 允許在表單上最多可以有 255 個(gè)控件。

? 47,Q:Visual Basic 能用來(lái)創(chuàng )建在 Windows CE 環(huán)境下運行的應用程序嗎?

???? A:不能。目前情況下,您必須使用 Visual C++ 或其他與 Windows 95 兼容的 C/C++ 編譯工具。

? 48,Q:Visual Basic5.0/6.0 能用來(lái)創(chuàng )建 Windows NT 服務(wù)嗎?

???? A:不能。Windows NT 中的服務(wù)必須是完全用機器代碼編譯的可執行文件。Visual Basic 目前不具備這一功能。您必須使用 Visual C++ 4.x 或其他與 Windows NT 兼容的 C/C++ 編譯工具來(lái)創(chuàng )建服務(wù)。有關(guān)編寫(xiě) Windows NT 服務(wù)的信息,請參閱微軟 MSDN 的有關(guān)內容。

? 49,Q:Microsoft Visual Basic 5 除了支持本機編譯的代碼外,還支持 p 代碼嗎?

???? A:支持。VB5.0 是第一個(gè)在將應用程序編譯成 p 代碼或本機代碼方面提供了靈活操作可能性的 RAD 工具。編譯成 p 代碼可使應用程序的大小優(yōu)化為最小。p 代碼憑借這一最小化特性成為了低帶寬條件下創(chuàng )建 Internet 應用程序的首選方式。本機代碼編譯極大地提高了速度(最高快 20 倍),但生成的可執行文件較大。 Visual Basic 是唯一既能夠支持 RAD 的解釋方式、編輯與連續、以及開(kāi)發(fā)等,又能夠支持從本機編譯的 .EXE 文件的 RAD 工具。

? 50,Q:Microsoft Visual Basic 可以在 Macintosh 上使用嗎?

???? A:VB4.0 引入了可移植的 VBA (Visual Basic for Applications)語(yǔ)言引擎。Microsoft Excel 5.0 最近已在 Macintosh 上發(fā)行,其中隨附了 Excel 的 VBA 組件,因此在它上面就有這個(gè)語(yǔ)言引擎。微軟目前似乎對 Macintosh 上的 Visual Basic 版沒(méi)有任何承諾。

? 51,Q:Visual Basic 5.0/6.0 支持 16 位開(kāi)發(fā)嗎?

???? A:不支持。Visual Basic 5.0/6.0 只能創(chuàng )建 32 位可執行文件。開(kāi)發(fā) 16 位 Windows 應用程序需要 Visual Basic 4.0。

? 52,Q:Visual Basic 5.0 中文版內的 Text Box 能存儲 64K 以上的數據嗎?

???? A:不能。VB5.0 中文版沒(méi)有突破文本框的 64K 限制,因為它是由操作系統指定的。如果您需要存儲 64K 以上的數據,應使用 Visual Basic 內含的多信息文本框。多信息文本框類(lèi)似于多行文本控件,不同的是增加了個(gè)別字符和段落的格式編排功能。多信息文本框能夠保存 64K 以上的文本,提供內置的 OLE 2.0 客戶(hù)支持,主要特性包括:使一個(gè)段落內的文本左、右、居中對齊,可定義左制表位、字體樣式、簡(jiǎn)單的項目符號、查找/替換、上標、下標、加刪除線(xiàn)等格式編排。

? 53,Q:在 ASP 編程中統計查詢(xún)結果的記錄數:

???? A:

???? ????? Set theConn=Sever.CreateObject("ADODB.Connection")

????? Set theRs=Sever.CreateObject("ADODB.RecordSet")

????? theConn.Open "FILEDSN=d:\Program Files\Common Files\ODBC\Data Sources\MyData.dsn"

????? theRs.Open "SELECT COUNT(*) as Mycount FROM theTable",theConn

???? %>

???? 共有條記錄

???? ????? theRs.Close

????? theConn.Close

???? %>

? 54,Q:為何無(wú)法編譯成 dll 文件?

???? A:無(wú)論是用 VB 還是 VJ++,在編譯 Active dll 文件時(shí)都會(huì )發(fā)現無(wú)法重新編譯成 dll 文件的問(wèn)題。原因是第一次編譯后 dll 文件已經(jīng)被自動(dòng)注冊了。這時(shí)關(guān)閉 Web server 后即可再次編譯,待編譯完畢后再打開(kāi) Web server。

? 55,Q:資源文件有什么用處?

???? A:最重要的有兩個(gè)地方:

???? 1、國際發(fā)行:如果我們將 Application 中所有的文字從 Resource 中讀取,那么,只要更動(dòng) Resource 文件的內容,就可以用不同語(yǔ)言的方式來(lái)顯示;

???? 2、管理資源:例如,我們的軟件中用了數百張的圖片或聲音,不用 Resource 文檔的話(huà),在發(fā)行出去的軟件中,就必需有數百個(gè)圖形、聲音文檔,那似乎不太好,使用 Resource 文件,便可以將這些圖形、聲音放進(jìn)一個(gè) .Res 文檔中。

? 56,Q:如何在 DOS 程序結束執行時(shí),自動(dòng)將其關(guān)閉?

???? A:在 VB 程序中啟動(dòng) DOS 程序(或指令)的方法是:

?????? Shell "DOS可執行文件名", vbNormalFocus

??? 例如:Shell "Xcopy c:\temp\*.* d:\temp\*.*", vbNormalFocus

??? 但是當以上的 Xcopy 程序結束執行時(shí), 卻會(huì )殘留著(zhù) DOS 窗口沒(méi)有被關(guān)閉,如果想要讓 DOS 程序結束執行時(shí), DOS 窗口自動(dòng)被關(guān)閉, 則應該使用以下方法來(lái)啟動(dòng) DOS 程序:

021yin.com /C DOS可執行文件名", vbNormalFocus

021yin.com /C Xcopy c:\temp\*.* d:\temp\*.*", vbNormalFocus

? 57,Q:VB 編程中打開(kāi)默認網(wǎng)址和 Email 的更簡(jiǎn)單的方法:

021yin.com ", vbHide)

021yin.com ", vbHide)

? 58,Q:我用 VB6.0 的 ActiveX dll 工程開(kāi)發(fā)了一個(gè)在 ASP 中調用的 dll 類(lèi)型庫,里面有好多封裝的函數,我能不能在 VB 的 EXE 工程中利用它們?

???? A:當然可以! 這正是微軟 COM 模型的具體應用之一。具體用法是:在 VB 的 EXE 工程的 IDE 界面中,引用你建立的類(lèi)庫文件,然后在“對象瀏覽器”里就可以看到你的所有類(lèi)及其函數。比方你的類(lèi) myobj 中有函數 myfun(),則調用語(yǔ)句是:

????? dim theobj as new myobj

????? ret = theobj.myfun() 'ret 為函數返回值

??? 當然如果你要在別的機器上使用你的組件,就必須先進(jìn)行注冊:regsvr32

? 59,Q:“我愛(ài)你”病毒傳播的秘密:

???? A:千禧年五月分大面積流行的 "ILOVEYOU" 病毒至今讓人記憶尤新。這種病毒是一種通過(guò)電子郵件流行的典型的蠕蟲(chóng)病毒。她是通過(guò)調用 Outlook 的應用程序對象的屬性和方法進(jìn)行信件發(fā)送的,其發(fā)送郵件的基本代碼如下:

????? Set OlApp = CreateObject("outlook.application")

????? Set Oitem = OlApp.CreateItem(olMailItem)

????? With Oitem

????? .Subject = "郵件主題"

????? .To = "收件人"

????? .Body = "郵件正文"

????? .attachments.Add "path:附件"????? '? 添加附件

????? .Send ' 發(fā)送郵件

????? End With

? 60,Q:在 PowerBuilder 中使用 RichTextEdit 控件,屬性中沒(méi)用 Font,我想設置字體怎么辦(如果不設字體,讀入一個(gè)文本文件,缺省的字體對不齊)?

???? A:RichTextEdit 沒(méi)有 Font 屬性,在 Document 屬性頁(yè)中選擇 Toolbar,使用的時(shí)候可以自行選擇字體。

? 61,Q:在一個(gè) PowerBuilder 程序中,我想用 RichTextEdit 控件從本地取文本文件顯示,可是在我的機器上 RTE 只能顯示出少量英文和亂碼,程序并沒(méi)有編錯,因為相同的程序在其他人的機器上顯示出的是正確的文本,不知是什么原因?

???? A:應該是默認的類(lèi)型不正確,導入的時(shí)候指定類(lèi)型為 FileTypeText 試試。

? 62,Q:如何在 PowerBuilder 的 BLOB 字段中寫(xiě)入大于 1M 的文件(數據庫為MSSQL 7.0)?

???? A:源文件分塊寫(xiě)。

? 63,Q:用程序控制電腦說(shuō)英語(yǔ)?

???? A:現在,應用 Microsoft 提供的一套文字朗讀引擎(Text-To-Speech Engine,簡(jiǎn)稱(chēng) TTS),可以在程序中編寫(xiě)代碼來(lái)使安裝了聲卡的電腦流暢的朗讀英文。如果安裝了“金山詞霸2000”,那么 Windows 文件夾下會(huì )有一個(gè) Speech 文件夾,里面的文件 vtxtauto.tlb 文件就包含了有關(guān)的類(lèi)型庫和函數,我們完全可以在我們的程序中調用它們,使電腦開(kāi)口說(shuō)話(huà)。TTS 包含在“金山詞霸2000”的安裝盤(pán)上,文件名為 mstts.exe 和 spchapi.exe。要在 VB 程序中調用 TTS,必須首先引用 vtxtauto.tlb 文件中的“VoiceText 1.0 Type Library”類(lèi)型庫,然后參考以下代碼,電腦就可以說(shuō)話(huà)了:

????? Option Explicit

????? Private Sub Form_Load()

????? Call VTxtAuto.VTxtAuto.Register(Space(1), Space(1))

????? VTxtAuto.VTxtAuto.Speed = 170 '設置語(yǔ)速(170 為正常語(yǔ)速,值越小語(yǔ)速越慢)

????? Dim strTxt

????? strTxt = "I love you very much.Do you love me? "

????? On Error GoTo ErrorHandler

????? Call VTxtAuto.VTxtAuto.Speak(strTxt, vtxtsp_VERYHIGH + vtxtst_READING)

????? MsgBox "OK!"

????? End

????? ErrorHandler:

????? ' 錯誤處理語(yǔ)句

????? End

????? End Sub

???? 至于語(yǔ)速、頻率等的控制,大家可以在“對象瀏覽器”里參看相關(guān)的控制屬性。

??? (站長(cháng)話(huà)題:什么時(shí)候能夠讓電腦說(shuō)一口流利的中國普通話(huà)甚至是方言呢??

?????????????? 但愿不會(huì )讓我們等待太久!

?????????????? 但愿生產(chǎn)廠(chǎng)家能夠像微軟一樣把技術(shù)公布給普通用戶(hù)!)

? 64,Q:怎樣判斷、防止程序重復執行?

???? A:?

??? Private Sub Form_load()

??? '判斷程序是否已經(jīng)運行

??? If App.PrevInstance Then

???? MsgBox "本程序已經(jīng)運行!", vbInformation Or vbOKOnly, "提示信息"

???? Unload Me

???? Exit Sub

??? End If

??? '以下是主要程序

??? End Sub

??? 附:另一個(gè)例子:

??? Option Explicit

??? Public Sub CheckExist(fm As Form) '防止程序重復執行

????? Dim title As String

????? If App.PrevInstance Then

????? title = App.title

????? Call MsgBox("這程序已執行", vbCritical)

????? App.title = "" '如此才不會(huì ) Avtivate 到自己

????? fm.Caption = ""

????? AppActivate title 'activate 先前就已運行的程序

????? End ' 結束

????? End If

??? End Sub

??? Private Sub Form_Load()

???? Call CheckExist(Me)

??? End Sub

? 65,Q:如何結束 Shell 所啟動(dòng)的程序?

???? A:如果被 Shell 所啟動(dòng)的程序還沒(méi)有結束,我們就想主動(dòng)結束它,該怎么做呢? 此時(shí)應調用的 Windows API 是 TerminateProcess, 細節如下:

??? 1. API 的聲明:

???? Const SYNCHRONIZE = &H100000

???? Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long

???? Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

???? Private Declare Function TerminateProcess Lib "kernel32" Alias "TerminateProcess" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long

??? (注1:如果以上的聲明放在「一般模塊」底下,應將 Declare 之前的 Private 保留字去掉,并且在 Const 之前加上 Public 保留字。)

??? 2. Shell 的程序范例:(以執行 MS-DOS 為例)

???? Dim pId As Long, pHnd As Long ' 分別聲明 Process Id 及 Process Handle 變數

021yin.com ", vbNormalFocus) ' Shell 傳回 Process Id

???? pHnd = OpenProcess(SYNCHRONIZE, 0, pId) ' 取得 Process Handle

???? Call TerminateProcess( pHnd, 0 ) ' TerminateProcess 所傳入的是 Process Handle

???? Call CloseHandle( pHnd )

?? (注2:以上的方案只適用于 Shell 所啟動(dòng)的程序,ShellExecute 則不適用,原因是 ShellExecute 函數是通過(guò)資源管理器來(lái)啟動(dòng)程序,而資源管理器啟動(dòng)程序之后,并沒(méi)有將 Process ID 或 Process Handle 傳回來(lái)。

??? 注3:以上程序在 Windos98、VB6.0 下調試通過(guò)。)

? 66,Q:用 VB5.0 創(chuàng )建 Windows 程序組中的快捷方式:

???? A:

??? 'API 函數聲明:要在 VB5.0 中創(chuàng )建 Windows 的快捷方式,需要用到一個(gè)動(dòng)態(tài)鏈接庫 Vb5stkit.dll。在該動(dòng)態(tài)鏈接庫中提供了三個(gè)函數 OSfCreateShellGroup、OSfCreateShellLink、OSfRemoveShellLink,分別用于創(chuàng )建快捷方式程序組、快捷方式、刪除快捷方式。這三個(gè)函數的聲明形式分別如下:

?? Private Declare Function OSfCreateShellGroup Lib "Vb5stkit.dll" Alias "fCreateShellFolder" (ByVal lpstrDirName As String) As Long

?? Private Declare Function OSfCreateShellLink Lib "Vb5stkit.dll" Alias "fCreateShellLink" (ByVal lpstrFolderName As String, ByVal lpstrLinkName As String,ByVal lpstrLinkPath As String, ByVal lpstrLinkArguments As String) As Long

?? Private Declare Function OSfRemoveShellLink Lib "Vb5stkit.dll" Alias "fRemoveShellLink" (ByVal lpstrFolderName?? As String, ByVal lpstrLinkName As String) As Long

?? '實(shí)現的語(yǔ)句:

?? Dim lresult As Long

?? lresult = OSfCreateShellGroup("Test") '在程序菜單中添加一個(gè)名為 Test 的程序組

?? lresult = OSfCreateShellLink("test", "記事本", "c:\Windows\notepad.exe", "")

?? '在程序菜單的Test程序組下創(chuàng )建記事本的快捷方式

?? lresult = OSfRemoveShellLink("Test", "記事本") '刪除 Test 程序組下的快捷方式

?? (注:在 Windows98/NT4.0、VB5.0 下可以正常運行。但創(chuàng )建桌面快捷方式和 Start Menu 快捷方式有些問(wèn)題。在 VB6.0 中也有些問(wèn)題(是否要安裝 SP3?)。)

? 67,Q:VB 中使 TextBox 按 Mouse 右鍵時(shí)只出現自定 PopUp Menu?

???? A:一般我們可能在 TextBox 的 MouseDown Event 中 Check 是否按右鍵,若是,則設定出現 Popup Menu 程式如下:

?? Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

??? If Button = 2 Then

???? PopupMenu MyMenu

??? End If

?? End Sub

??? 可是出現的還是原先內定的 Popup Menu,之后再按一次右鍵,才出現我們自定的 menu。很奇怪吧?如果用 API 來(lái)解決,那便是要攔截 Mouse 的按鍵(使用 SubClassing 的技巧),但是有人發(fā)現了以下的方式便可以解決(也是一個(gè)十分實(shí)作性的經(jīng)驗):

?? Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

??? If Button = 2 Then

???? Text1.Enabled = False : Text1.Enabled = True

???? PopupMenu MyMenu

??? End If

?? End Sub

? 68,Q:用 VB 實(shí)現拖放功能:

???? A:拖放是用鼠標拖動(dòng)一個(gè)對象到其它對象的活動(dòng)。在圖形操作過(guò)程中,拖放是最常用的功能之一,下面我們來(lái)看看怎樣用 VB 實(shí)現拖放功能。

  首先介紹與拖放有關(guān)的控件:

  1.屬性:DragMode 決定拖動(dòng)操作的初始化是人工方式還是自動(dòng)方式,DragIcon 確定在拖動(dòng)過(guò)程中顯示的指針的圖標形狀;

  2.方法:Drag 開(kāi)始,結束或取消拖動(dòng)控件;

  3.事件:MouseDown 事件發(fā)生于用戶(hù)按下鼠標按鈕時(shí),DragOver 事件發(fā)生于拖動(dòng)操作完成時(shí),DragDrop 事件發(fā)生于拖動(dòng)操作正在進(jìn)行時(shí)。

  然后編寫(xiě)一個(gè)小程序,這個(gè)程序能實(shí)現在窗口中或窗口間拖動(dòng)圖標的功能。建立窗口 Form1 和 Form2,在窗口中都加入 Image1,為它們設置初始顯示的圖片。鍵入以下代碼(本程序在 VB5.0/6.0,Window95/98/NT4.0 環(huán)境下通過(guò)):

  ' Form1 下程序代碼為:

  Option Explicit

  Dim dragx As Single

  Dim dragy As Single

  Const BEGIN_DRAG=1

  Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)

???? Image1.Picture=Source   'Sourse為被拖動(dòng)的控件

   Form2.Image1.Picture=LoadPicture("")

   Image1.Move(X-dragx),(Y-dragy) ' X,Y為鼠標所在目標窗體或控件的當前坐標

  End Sub

  Private Sub Form_Load()

   Load Form2

   Form2.Show 0

  End Sub

  Private Sub Image1_MouseDown(Button As Integer,Shift As Integer,X As Single,Y As Single)

   dragx=X

 ?? dragy=Y

   Image1.Drag BEGIN_DRAG  '開(kāi)始拖動(dòng)操作

   Image1.DragIcon = LoadPicture("按下鼠標時(shí)想顯示的光標")

  End Sub

  ' Form2 下程序代碼為:

  Option Explicit

  Dim dragx As Single

  Dim dragy As Single

  Const BEGIN_DRAG=1

  Private Sub Form_DragDrop(Source As Control,X As Single,Y As Single)

   Image1.Picture=Source

   Form1.Image1.Picture=LoadPicture("")

   Image1.Move(X-dragx),(Y-dragy)

  End Sub

  Private Sub Image1_MouseDown(Button As Integer,Shift As Integer,X As Single,Y As Single)

   dragx=X

   dragy=Y

   Image1.Drag BEGIN_DRAG

   Image1.DragIcon=LoadPicture("按下鼠標時(shí)想顯示的光標")

  End Sub

? 69,Q:用 VB 程序如何改變桌面的墻紙圖片?

???? A:此一問(wèn)題需調用 SystemParametersInfo API 函數,細節如下:

?? 1. API 的聲明:

??? Const SPI_SETDESKWALLPAPER = 20

??? Const SPIF_UPDATEINIFILE = &H1

??? Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As Any, ByVal fuWinIni As Long) As Long

??? 注:如果以上的聲明放在「一般模塊」底下,應在 Const 之前加上 Public 保留字,并且將 Private 保留字去掉。

?? 2. 程序范例:

??? Call SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, BMP圖檔名稱(chēng), SPIF_UPDATEINIFILE)

??? 例如:

??? ' 1. 將桌面圖片設定成 c:\windows\setup.bmp:

??????? Call SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "c:\windows\setup.bmp", SPIF_UPDATEINIFILE)

??? ' 2. 將桌面圖片清掉:

??????? Call SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "", SPIF_UPDATEINIFILE)

??? 程序如下:

??????? Call SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, BMP圖檔名稱(chēng), SPIF_UPDATEINIFILE)

??? 但以上程序設定圖片之后,必須等到下次 Windows 重新啟動(dòng)時(shí)才生效,如果希望設定之后立刻生效,則程序須修改如下:

???? Const SPIF_UPDATEINIFILE = &H1

???? Const SPIF_SENDWININICHANGE = &H2

???? Const SPI_SETDESKWALLPAPER = 20

???? Call SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "c:\windows\setup.bmp", SPIF_UPDATEINIFILE +????? SPIF_SENDWININICHANGE)

??? 此外希望只有本次使用 Windows 時(shí)改變桌面圖片(下次開(kāi)機時(shí)還原原狀),則程序如下:

???? Call SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "c:\windows\setup.bmp", SPIF_SENDWININICHANGE) ' 去掉 SPIF_UPDATEINIFILE

? 70,Q:用 VB 程序捕捉屏幕圖像:

???? A:在 Form1 上添加一個(gè) Picture 和 Command 控件,代碼如下(Windows98/NT、VB6.0):

?? Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long

?? Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long

?? Private Declare Function EmptyClipboard Lib "user32" () As Long

?? Private Declare Function SetClipboardData Lib "user32" (ByVal wFormat As Long, ByVal hMem As Long) As Long

?? Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long

?? Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long

?? Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long

?? Private Declare Function CreateDC Lib "gdi32" Alias "CreateDCA" (ByVal lpDriverName As String, ByVal lpDeviceName As String, ByVal lpOutput As String, lpInitData As Long) As Long

?? Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long

?? Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long

?? Private Declare Function CloseClipboard Lib "user32" () As Long

?? Sub ScrnCap(Lt, Top, Rt, Bot)

??? rWidth = Rt - Lt

??? rHeight = Bot - Top

??? SourceDC = CreateDC("DISPLAY", 0, 0, 0)

??? DestDC = CreateCompatibleDC(SourceDC)

??? BHandle = CreateCompatibleBitmap(SourceDC, rWidth, rHeight)

??? SelectObject DestDC, BHandle

??? BitBlt DestDC, 0, 0, rWidth, rHeight, SourceDC, Lt, Top, &HCC0020

??? Wnd = Screen.ActiveForm.hwnd

??? OpenClipboard Wnd

??? EmptyClipboard

??? SetClipboardData 2, BHandle

??? CloseClipboard

??? DeleteDC DestDC

??? ReleaseDC DHandle, SourceDC

?? End Sub

?? Sub Command1_Click()

??? Form1.Visible = False

??? ScrnCap 0, 0, 640, 480

??? Form1.Visible = True

??? Picture1 = Clipboard.GetData()

?? End Sub

? 71,Q:測試表中的記錄總數又一法(笨而準確):

???? A:

???? Dim db As Database ' DAO

???? Dim rs As Recordset

???? Dim theRecordNum As Long

???? Set db = OpenDatabase(App.Path & "\mylib.mdb")

???? Set rs = db.OpenRecordset("test") '測試表 test 中記錄數

???? theRecordNum = 0

???? rs.MoveFirst

???? Do While Not rs.EOF()

????? theRecordNum = theRecordNum + 1

????? rs.MoveNext

??? Loop

??? Debug.Print theRecordNum ' 在監視窗口中輸出

? 72,Q:如何判斷生成的記錄集是“空集”(記錄數為 0)?

???? A:如果記錄集的 eof 為真,則記錄集是“空集”:

????? if AdoRS.EOF=true then

????? EndIf

? 73,Q:VB 編程中如何使窗口右上角的關(guān)閉按鈕(X)失效?

???? A:用以下兩個(gè)過(guò)程中的一個(gè)即可:

??? 1、Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)

??????? Cancel = True

?????? End Sub

??? 2、Private Sub Form_Unload(Cancel As Integer)

??????? Cancel = True

?????? End Sub

? 74,Q:用 VB 實(shí)現超級鏈接功能:

021yin.com 網(wǎng)站。

???? Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

???? Private Sub my)

?????? Line1.Visible = False

???? End Sub

???? Private Sub my)

?????? Line1.Visible = True

???? End Sub

???? Private Sub Form_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)

?????? Line1.Visible = False

???? End Sub

???? Private Sub my()

?????? Dim

?????? Dim MyUrl As String

021yin.com "

?????? )

???? End Sub

? 75,Q:在 VB 安裝程序中加入“卸載”功能:

???? A:在制作安裝盤(pán)的過(guò)程中,在建立程序項的時(shí)候,建立一個(gè)名為“卸載”的程序項,“目標”文本框中填入命令:

??????? $(WinPath)\st6unst.exe -n "$(AppPath)\st6unst.log"

?????? 這樣安裝后的程序就會(huì )有卸載功能了。

? 76,Q:怎樣在 VC++ 中產(chǎn)生閃爍的光標

???? A:先調用函數 CreateCaret(),然后再調用函數 ShowCaret()。例如:

  if(CreateCaret(hWnd,NULL,2,20))

????? SetCaretPos(0,0);

???  ShowCaret(hWnd);

? 77,Q:VFP 程序編譯成 .EXE 文件后運行,為在什么屏幕上一閃而過(guò)就結束了?

???? A:這是初學(xué) VFP 的人易犯的一個(gè)錯誤,只要在主文件中加入 read events 語(yǔ)句,在退出程序中加入 clear events 即可。

? 78,Q:VB 中如何在保存并覆蓋文件時(shí)讓其出現對話(huà)框,詢(xún)問(wèn)是否替換

???? A:用 CommonDailog 控件,在 CommonDialog 控件 Flags 屬性設定中添加 cdlOFNOverwritePrompt,如:

CommonDialog1.Flags=CommonDialog1.Flags Or cdlOFNOverwritePrompt?

  CommonDialog1.ShowSave

? 79,Q:VB6 中的字體出現亂碼怎么辦?

???? A:這是 VB 的 Bug。引起的原因是系統中安裝了 Word2000 或 IE5.x 以及繁體支持,將繁體支持刪除,或者安裝 VB6 的 SP3 或 SP4 就可以解決問(wèn)題。

? 80,Q:怎樣用 VB 編寫(xiě)多線(xiàn)程程序

???? A:盡管 VB5.0 是單線(xiàn)程的,但用 addressof 加上一些 API 函數,就可以非常容易的做多線(xiàn)程程序。每一個(gè)線(xiàn)程約占用 20 毫秒的時(shí)間片。

???? VB5 有一個(gè)主線(xiàn)程,我們可以另外加一個(gè)工作線(xiàn)程。對于不清楚什么是單/多線(xiàn)程的程序員,我們用一個(gè)簡(jiǎn)單的列子來(lái)說(shuō)明一下:

在 Form 里加上兩個(gè) timer 控件,把 interval 屬性設成 5000(5秒),然后在兩個(gè) timer1_timer 事件中放一個(gè)大 Loop,如 for 10000 next, 運行。你會(huì )看到第二個(gè) timer 控件不會(huì )在五秒后執行,除非 timer1 的for-next 結束。同樣,如果你的程序中有大量的數據庫讀寫(xiě),你的用戶(hù)界面可能被“凍”。這時(shí),我們就需要用多線(xiàn)程來(lái)改進(jìn)程序了。(當然你可以用 DoEvents 來(lái)避免被凍,但用 DoEvents 有很多副作用-這里不提。)

??? 我們用的第一個(gè) API 是 CreateThread,VB 的格式是:

???? private declare function CreateThread Lib "kernel32" (byval pThreadAttributes as any, byval dwStackSize as long, byval lpStartAddress as long, lpParameter as any, byval dwCreationFlags as long, lpThreadID as long) as long

???? CreateThread 的參數指出你將要創(chuàng )立的線(xiàn)程是什么樣子的,CreateThread 的返回值是一個(gè)線(xiàn)程的 handle。以下是

???? VB 的多線(xiàn)程初始化程序:

????? Public Sub Initialize(lpfnBasFunc as long)?

????? dim dwStackSize as long?

????? dim dwCreationFlags as long?

????? dim lpThreadId as long?

????? dim lpParameter as long?

????? dim myNull as long?

????? myNull = 0& 'create a null pointer

????? dwStackSize = 0 '0 表示用 exe stack size

????? dwCreationFlags = 4 '用 4 表示初始化后先不激活,讓別人來(lái)激活

????? Me.Thread = CreateThread(myNull, dwStackSize, lpfnBasFunc, myNull, dwCreationFlags,lpThreadId)?

????? If Me.Thread = myNull then

??????? Msgbox "create thread failed"?

????? End if

????? End Sub

??? 下面是兩個(gè) API 用來(lái)激活/暫停該線(xiàn)程:

????? private declare function ResumeThread lib "kernel32"(byval hThread as long)as long

????? private declare function SuspendThread lib "kernel32"(byval hThread as long)as long

??? 讓我們來(lái)用一個(gè)變量表示當前線(xiàn)程的狀態(tài):

????? public ThreadStatus as boolean

??? 在 VB 里,可用 property 來(lái)實(shí)現 ThreadStatus 的管理。

????? Public property Let Enabled(byval vNewValue as boolean)?

????? if vNewValue = true and Me.ThreadStatus = false then

????? ResumeThread Me.Thread

????? Me.ThreadStatus = True

????? elseif Me.ThreadStatus = true then

????? SuspendThread Me.Thread?

????? Me.ThreadStatus = False?

????? end if

????? End Property

??? 這個(gè)簡(jiǎn)單的類(lèi)可以用 New Object 來(lái)引用:

????? 'make new thread object

????? dim myThread as New clsThreads '創(chuàng )建縣城 Foo

????? myThread.Initialize AddressOf Foo '激活縣城

????? myThread.Enabled = True

??? 執行后,你可以用 PVIEW95.EXE 看到你的線(xiàn)程。你還可以提高你的線(xiàn)程的優(yōu)先級:

????? SetThreadPriority '設優(yōu)先級

????? GetThreadPriority '查優(yōu)先級

??? 你把以上的程序加入 timer 例子,就會(huì )看到兩個(gè) timer 同時(shí)運行。

??? 這里要提醒一下,VB5 的開(kāi)發(fā)環(huán)境是單線(xiàn)程的,如果你的程序寫(xiě)錯,或中斷后試圖恢復,往往會(huì )出錯,有時(shí)是嚴重出錯。總之,用 VB 的多線(xiàn)程可以寫(xiě)出和 VC++ 一樣快的程序,而且開(kāi)發(fā)容易的多,開(kāi)發(fā)效率也快得多。

? 81,Q:加快 Delphi5.0 啟動(dòng)速度

???? A:Delphi5.0 的啟動(dòng)確實(shí)有點(diǎn)慢,既要顯示快閃窗口,又要讀注冊表設置,對于配置低的機器簡(jiǎn)直是一種折磨,實(shí)際上我們可以通過(guò)啟動(dòng)參數來(lái)控制它:

建立一個(gè)快捷方式,目標為:C:\DELPHI5\Delphi5\Bin\delphi32.exe /ns /np (假設 delphi 裝在C:\delphi5 目錄下),ns 表示 no splash,即不顯示快閃屏幕,np 表示 no project,即不加載工程。

? 82,Q:觀(guān)察 Delphi5.0 內存堆分配情況:

???? A:建立一快捷方式,目標為:C:\DELPHI5\Delphi5\Bin\delphi32.exe /hm /hv

???? 此后每啟動(dòng)此快捷方式就可看到 Delphi5.0 的標題欄上不停變化的堆分配字節數。

? 83,Q:Delphi 中如何在打印或打印預覽前獲取報表頁(yè)數

???? A:有時(shí)需要在打印前獲取報表的打印頁(yè)數,比如我們需要在頁(yè)眉或頁(yè)腳中打印“共 xx 頁(yè) 第 xx 頁(yè)”,如何實(shí)現呢?QuickReport 生成 Report 之前,我們是無(wú)法得知報表頁(yè)數的,而 QuickReport 是在打印或打印預覽時(shí)才生成報表,換言之我們只有在打印或打印預覽前先將報表生成一次才能獲取打印頁(yè)數。生成報表的方法是 Prepare,請參考以下的例子:

? var nPageCount:integer;

? begin

  QuickRep1.Prepare;

  nPageCount:=QuickRep1.QRPrinter.PageCount;

  QuickRep1.QRPrinter.Free;

  QuickRep1.QRPrinter:=nil;

  {在此修改QuickRep1,實(shí)現在頁(yè)眉或頁(yè)腳中打印“共 xx 頁(yè) 第 xx 頁(yè)” ... }

  QuickRep1.PreView;

? End;

? 84,Q:如何在 Delphi 中實(shí)現普通文件的拷貝?

???? A:示例代碼如下:

??? procedure TForm1.btnCopyClick(Sender: TObject);

??? var

???? sfile,dfile : String;

??? begin

??? sfile :='a.txt'; //被copy的文件

??? dfile :='b.txt'; //copy后的文件名

??? CopyFile(pchar(sfile),pchar(dfile),false);

??? 第三個(gè)參數為 false,如果 b.txt 已經(jīng)存在,則覆蓋;如果為 true,則不進(jìn)行操作。

? 85,Q:用 Delphi 編寫(xiě)支持多國語(yǔ)言的程序

???? A:使用 Delphi5.0 的 Integrated Translation Environment(ITE) 可以輕易完成這個(gè)工作。

??? 創(chuàng )建一個(gè)示意性的工程 MultiLanguage,在 Form 上放一個(gè) Label 和一個(gè) Button,分別把 Caption 賦值為“English Label”和“English Button”。

??? 選擇菜單 Project|anguages|Add ...,Delphi 顯示 Add Languages 對話(huà)框, 選擇 Next。

??? 從語(yǔ)言列表中選中“英語(yǔ)(美國)”和“中文(中國)”,選擇 Next。

??? ITE 會(huì )根據所選的語(yǔ)言創(chuàng )建子目錄,目錄名稱(chēng)是語(yǔ)言的縮寫(xiě),選擇 Next。

??? 第一次增加語(yǔ)言時(shí),Update Mode 為 Create new, 選擇 Next。選擇 Finish。

??? Delphi 會(huì )自動(dòng)創(chuàng )建支持不同語(yǔ)言的資源動(dòng)態(tài)庫。Delphi 還會(huì )自動(dòng)創(chuàng )建一個(gè)工程組,其中包括原有的 MultiLanguages.EXE,還包括新建的兩個(gè)資源動(dòng)態(tài)庫(MultiLanguages.enu,MultiLanguages.chs)。保存工程組。

??? Delphi 啟動(dòng) Translation Manager,左邊是需要翻譯的語(yǔ)言,右邊是完成百分比。選擇“中文(中國)”|Forms|Unit1,在右邊第 15 行和 20 行填寫(xiě)翻譯后的中文。保存并關(guān)閉。

??? 打開(kāi) Project Manager,編譯 MultiLanguages.enu 和 MultiLanguages.chs,Delphi 會(huì )在相應的子目錄生成資源動(dòng)態(tài)庫,但后綴不是 DLL 而是 ENU 和 CHS。

? 86,Q:在 SQL Server 中怎么樣恢復數據的存儲?

???? A:在 SQL Server 中提供了這種恢復方式的存儲過(guò)程。

??? 一個(gè)數據庫包括兩個(gè)文件,mdf 數據庫文件和 ldf 日志文件

??? 1.sp_attach_db [@dbname =] 'dbname',[@filename1 =] 'filename_n'

??? 給系統添加一個(gè)數據庫,在 dbname 指定數據庫名稱(chēng),filename_n 指定數據庫的文件和日志文件。比如我有一個(gè) ji 的庫,停止SQL Server 服務(wù)備份 ji_data.mdf,ji_log.ldf,啟動(dòng)SQL server,刪除掉這個(gè)庫,然后再把這兩個(gè)文件拷到 sql server DATA 目錄中,在 Query Analyzer 中執行如下語(yǔ)句:

??? EXEC sp_attach_db @dbname = N'ji',

??? @filename1 = N'd:\mssql7\data\ji_data.mdf',

??? @filename2 = N'd:\mssql7\data\ji_log.ldf'

??? 就會(huì )把這個(gè)庫加入到 SQL Server Group 中。

? 87,Q:Asp 中無(wú) DSN 法連接 SQL Server 數據庫的方法及其注意問(wèn)題

???? A:無(wú) DSN 法連接 SQL Server 數據庫的方法示例如下:

??? 'Less-DSN 法連接 SQLServer 服務(wù)器

??? set conn=server.createObject("adodb.connection")

??? conn.Open "driver={SQL Server};server=mysqlserver; database=jspcs; uid=sa; pwd=sql"

??? 其中服務(wù)器名為 mysqlserver(ip=192.168.0.1),數據庫為 jspcs,用戶(hù)名為 sa,口令為 sql。由于使用了 TCP/IP 協(xié)議,所以 server=mysqlserver 語(yǔ)句段還可以寫(xiě)成指向安裝 SQL Server 的機器的 IP 地址,即 server=192.168.0.1,注意該 IP 地址必須是網(wǎng)卡的默認(基本) IP 地址。同時(shí),如果在 Client 端設置 SQL Server ODBC,也可以把服務(wù)器名輸成 SQL Server 的 IP 地址。

? 88,Q:Delphi 中判斷系統是否已經(jīng)安裝了聲卡

???? A:要判斷系統是否安裝了聲卡,調用 Winmm.dll 中的 waveOutGetNumDevs 和 midiOutGetNumDevs 函數就可以了。這兩個(gè)函數在 Var 部分的說(shuō)明如下:

??? function waveOutGetNumDevs: longint; stdcall; external 'winmm.dll' name 'waveOutGetNumDevs';

??? function midiOutGetNumDevs: longint; stdcall; external 'winmm.dll' name 'midiOutGetNumDevs';

??? //判斷聲卡是否存在

??? Function IsSoundcardInstalled : Boolean;

??? Var

??? WaveOutPutDeviceCount : Integer;

??? MidiOutPutDeviceCount : Integer;

??? Begin

??? Result := False;

??? WaveOutPutDeviceCount := waveOutGetNumDevs;

??? MidiOutPutDeviceCount := midiOutGetNumDevs;

??? if (WaveOutPutDeviceCount>0) and (MidiOutPutDeviceCount>0) Then

????? Result := True

??? Else

????? Result := False;

??? End;

??? procedure TForm1.Button1Click(Sender: TObject);

??? Begin

??? if IsSoundcardInstalled Then

????? ShowMessage('系統已經(jīng)安裝了聲卡.')

??? Else

????? ShowMessage('系統沒(méi)有安裝聲卡.');

??? end;

? 89,Q:用 ASP 打開(kāi) Web 服務(wù)器上的應用程序

???? A:

??? ???? dim wsh

???? set wsh = createobject("WScript.Shell")

021yin.com ")

???? set wsh = nothing

??? %>

? 90,Q:一個(gè)用進(jìn)度條表示的時(shí)鐘

???? A:在 Form 上拖 3 個(gè)進(jìn)度條,命名為 h、m、s,分別表示時(shí)、分、秒,再放一個(gè) Timer 控件,然后鍵入以下代碼:

???? Private Sub Form_Load()

????? h.Orientation = ccOrientationVertical

????? h.Scrolling = ccScrollingSmooth

????? h.Max = 24: h.Min = 0

????? m.Orientation = ccOrientationVertical

????? m.Scrolling = ccScrollingSmooth

????? m.Max = 60: m.Min = 0

????? s.Orientation = ccOrientationVertical

????? s.Scrolling = ccScrollingSmooth

????? s.Max = 60: s.Min = 0

???? End Sub

???? Private Sub Timer1_Timer()

????? h.Value = Format$(Now, "hh")

????? m.Value = Minute(Now)

????? s.Value = Format$(Now, "ss")

???? End Sub

? 91,Q:Delphi 中實(shí)現對日期數據的有效性檢驗

???? A:函數如下:

???? function isdate(s:string):boolean;

???? begin

?????? result:=false;

?????? try

???????? strtodate(s);

???????? result:=true;

?????? except

???????? on econverterror do

???????? result:=false;

?????? end;

???? end;

? 92,Q:PHP4 的 CGI 版本和 ISAPI 版本有什么區別?

???? A:1、CGI 方式是以 php.exe 來(lái)解釋 .PHP 文件的,ISAPI 方式是以 php4ts.dll 來(lái)解釋 .PHP 文件的;

???? 2、ISAPI 會(huì )快一些;

???? 3、ISAPI 據說(shuō)可以支持 HTTP 認證等功能;

???? 4、ISAPI 方式?jīng)]有 CGI 方式穩定,也不大好配置;

???? 5、ISAPI 方式只有 WIN32 下才有,而且在 ISAPI 方式下和 CGI 方式下的一些全局變量的值會(huì )不一樣。

? 93,Q:VFP6.0 一條語(yǔ)句有多長(cháng)?

???? A:VFP6 的參考中說(shuō),每條語(yǔ)句中字符數的最大值是 8192個(gè),但命令編輯器每行最多只能鍵入 255 個(gè)字符,對于超過(guò) 255 個(gè)字符的命令行,可以用分號將語(yǔ)句分成多行,每行都不長(cháng)過(guò) 250 個(gè)字符即可。注意如果是字符串常量跨行,則后續行應以編輯器本行的第一個(gè)位置為基準,否則字符串中間會(huì )無(wú)端地加許多空格。

? 94,Q:Delphi 中調用 Windows API 函數 ShellExecute 實(shí)現打開(kāi) IE 和 Outlook 應用程序?

???? A:在 uses 單元加入 Shellapi 引用,然后應用以下語(yǔ)句(函數):

???? 打開(kāi) IE:ShellExecute(Handle,'open',');

???? 打開(kāi) IE:ShellExecute(Handle,'open','mailto:who@mail.addr?subject=…&body=…',nil,nil,SW_SHOWNORMAL);

???? 如果以上函數的返回值小于或等于 32,則表明發(fā)生網(wǎng)絡(luò )錯誤。

? 95,Q:用一條 SQL 語(yǔ)句找出“相同的客戶(hù)代碼中序號最大”的那些數據:

???? A: Select * from meney_in_list WHERE 序號 IN (select MAX(序號) from meney_in_list Group by 客戶(hù)代碼)

? 96,Q:在 Delphi5.0 中怎么找不到 Html 組件?

???? A: Html 組件在 Delphi4.0 中有,在 Delphi5.0 中已經(jīng)升級為 TWebBrowser 組件,且功能有所加強,比如支持圖片。

? 97,Q:在 Delphi 中實(shí)現控件焦點(diǎn)轉移?

???? A:要在 Delphi 中實(shí)現按回車(chē)后控件焦點(diǎn)的轉移,可以調用 Windows API 消息發(fā)送函數 PostMessage,做法如下:

???? 把 Form1 的 KeyPreview 屬性設為 True,在 Edit 和 Memo 的 OnKeyPress 事件中加入以下代碼:

????? if Key=#13 then

?????? if not (ActiveControl is TMemo) then

??????? PostMessage(Handle,WM_KERYDOWN,VK_TAB,0);

? 98,Q:在 Delphi 中判斷本程序是否已經(jīng)運行?

???? A:要判斷實(shí)例是否運行,必須在程序的消息循環(huán)之前,在 Delphi 中,是在 Application.Initialize 之前。實(shí)現本功能, Delphi 使用的主要函數是 CreateMutex。這個(gè)函數用來(lái)生成一個(gè) Mutex 對象的句柄,這個(gè)句柄具有操作系統的全局命名空間。

  Delphi 例子程序的部分代碼如下:

  const MB_MINE = MB_OK or MB_ICONINFORMATION or MB_TASKMODAL;

  var

   hMutex: DWORD;

  begin

   hMutex := CreateMutex(nil, TRUE, 'MyMutex'); //TRUE 標明該進(jìn)程擁有此 Mutex 對象

  if (GetLastError = ERROR_ALREADY_EXISTS) then //Mutex 對象是否存在

   begin

    ReleaseMutex(hMutex);

   Exit; //退出程序

    end

   else

   if hMutex = ERROR_INVALID_HANDLE then //檢查"mymutex"這個(gè)名字是否被其他諸如文件映射、信號燈和事件等對象占用

  MessageBox(0, 'The name matched with a existing object!', 'Information',MB_MINE)

  else

   begin

   Application.Initialize;

   Application.CreateForm(TForm1, Form1);

   Application.Run;

   ReleaseMutex(hMutex); //釋放 Mutex 對象

   end;

? 99,Q:Delphi 與 VB、ASP 帶變量參數 SQL 語(yǔ)句的比較

???? A:在 SQL 語(yǔ)句的 where 條件表達式中要帶字符串變量 s 和數值變量 v,在 Delphi 中為:

????? strSQL:='select * from a_table where a_f1='+''''+s+''''+' and a_f2='+'v';

??? 在 VB 和 Asp 中為:

????? strSQL="select * from a_table where a_f1='" & s & "' and a_f2=" & v

? 100,Q:Delphi 實(shí)現漸變窗口背景

????? A:創(chuàng )建一個(gè)應用程序,在 Form1 的 OnPaint 事件里面添加如下一段代碼:

????? procedure TForm1.FormPaint(Sender: TObject);

????? var

?????? i:word;

?????? dy,y:real;

????? begin

?????? dy:=clientheight/256;

?????? y:=0;

?????? for i:=255 downto 0 do

?????? begin

??????? canvas.brush.color:=$00000000+i*$10000;

??????? canvas.fillrect(rect(0,round(y),clientwidth,round(y+dy)));

??????? y:=y+dy;

?????? end;

???? end;

Copyright(C) By MarsV

注意了,這里為你送上一冊非常有用的代碼!

self.onError=null; currentX = currentY = 0; whichIt = null; lastScrollX = 0; lastScrollY = 0; NS = (document.layers) ? 1 : 0; IE = (document.all) ? 1: 0;function movelogo() { if(IE) { diffY = document.body.scrollTop; diffX = document.body.scrollLeft; } if(NS) { diffY = self.pageYOffset; diffX = self.pageXOffset; } if(diffY!=lastScrollY) { percent = .1 * (diffY - lastScrollY); if(percent > 0) percent = Math.ceil(percent); else percent = Math.floor(percent); if(IE) document.all.floater.style.pixelTop += percent; if(NS) document.floater.top += percent; lastScrollY = lastScrollY + percent; } if(diffX != lastScrollX) { percent = .1 * (diffX - lastScrollX); if(percent > 0) percent = Math.ceil(percent); else percent = Math.floor(percent); if(IE) document.all.floater.style.pixelLeft += percent; if(NS) document.floater.left += percent; lastScrollX = lastScrollX + percent; } }if(NS || IE) action = window.setInterval("movelogo()",1);

0
0
收藏0
回帖

注意了,這里為你送上一冊非常有用的代碼! 期待您的回復!

取消
載入表情清單……
載入顏色清單……
插入網(wǎng)絡(luò )圖片

取消確定

圖片上傳中
編輯器信息
提示信息