請問這段程式vb改寫delphi那裏錯了呢 |
答題得分者是:jest0024
|
hotswin
中階會員 發表:72 回覆:92 積分:52 註冊:2003-11-06 發送簡訊給我 |
public
{ Public declarations }
prevWndProc : LongInt;
end; var
Form1: TForm1; implementation {$R *.dfm}
function WndProc(WindowHandle : hWnd; Msg : LongInt; ParamW : WParam; ParamL : LParam) : LongInt ; stdcall;
begin
If Msg = WM_USER Then
begin
If ParamW = VK_F2 Then
begin
showmessage('你按了 F2 ');
end;
end;
WndProc := CallWindowProc(prevWndProc, hWnd, Msg, wParam, Param) ; end; procedure TForm1.FormCreate(Sender: TObject);
begin
form1.Left := 0 ;
Form1.Top := 0 ;
// SetPriorityClass(GetCurrentProcess(),0x8000);
prevWndProc := GetWindowLong(self.Handle ,GWL_WNDPROC);
SetWindowLong(self.Handle , GWL_WNDPROC, @WndProc);
end; 請問以上的寫法錯在那了呢? vb:
From_Load()
prevWndProc = GetWindowLong(Me.hWnd, GWL_WNDPROC)
SetWindowLong Me.hWnd, GWL_WNDPROC, AddressOf WndProc
SetKeyboardHook Me.hWnd, WM_USER
end sub
.bas 中的宣告
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Declare Function SetKeyboardHook Lib "KeybHook" (ByVal hwndPost As Long, ByVal Msg As Long) As Long
Declare Function ReleaseKeyboardHook Lib "KeybHook" () As Long Public prevWndProc As Long
Public Ifid As String
Dim IsAltDown As Boolean, IsCtrlDown As Boolean, IsShiftDown As Boolean
Function WndProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If Msg = WM_USER Then
If wParam = vbKeyZ Then
msgbox "你按了 Z "
End If
WndProc = CallWindowProc(prevWndProc, hWnd, Msg, wParam, lParam)
End Function
------
xinjier禮品贈品 |
jest0024
高階會員 發表:11 回覆:310 積分:224 註冊:2002-11-24 發送簡訊給我 |
引言:學而時習之不亦樂乎!public { Public declarations } prevWndProc : LongInt; end; var Form1: TForm1; implementation {$R *.dfm} function WndProc(WindowHandle : hWnd; Msg : LongInt; ParamW : WParam; ParamL : LParam) : LongInt ; stdcall; begin If Msg = WM_USER Then begin If ParamW = VK_F2 Then begin showmessage('你按了 F2 '); end; end; WndProc := CallWindowProc(Pointer(prevWndProc), hWnd, Msg, wParam, Param) ; end; procedure TForm1.FormCreate(Sender: TObject); begin form1.Left := 0 ; Form1.Top := 0 ; // SetPriorityClass(GetCurrentProcess(),0x8000); prevWndProc := GetWindowLong(self.Handle ,GWL_WNDPROC); SetWindowLong(self.Handle , GWL_WNDPROC, Longint(@WndProc)); end; 參數要對應正確的"型態"!! |
hotswin
中階會員 發表:72 回覆:92 積分:52 註冊:2003-11-06 發送簡訊給我 |
它現在在這二行偵錯
prevWndProc := GetWindowLong(self.Handle ,GWL_WNDPROC);
SetWindowLong(self.Handle , GWL_WNDPROC, LongInt(@WndProc)); Build
[Error] Unit1.pas(86): Incompatible types: 'Integer' and 'Pointer'
[Error] Unit1.pas(87): Variable required
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
-------------------------
請問是 GWL_WNDPROC 這個參數沒宣告嗎?
我試著 var GWL_WNDPROC : LongInt; 結果是一樣
以 API的原式, GWL_WNDPROC 宣告 LongInt 有錯嗎?
我在VB裏面 GWL_WNDPROC 沒有宣告就直接用了,且沒有編譯時的錯誤
請問是什麼原因呢?
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
------
xinjier禮品贈品 |
jest0024
高階會員 發表:11 回覆:310 積分:224 註冊:2002-11-24 發送簡訊給我 |
引言:學而時習之不亦樂乎! 發表人 - jest0024 於 2004/05/24 07:02:47它現在在這二行偵錯 prevWndProc := GetWindowLong(self.Handle ,GWL_WNDPROC); ^--型態錯誤. prevWndProc := Pointer(GetWindowLong(Handle,GWL_WNDPROC)); SetWindowLong(self.Handle , GWL_WNDPROC, LongInt(@WndProc)); ^WndProc為內建程序,請宣告別的名稱 fWndProcBuild [Error] Unit1.pas(86): Incompatible types: 'Integer' and 'Pointer' [Error] Unit1.pas(87): Variable required [Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas' ------------------------- 請問是 GWL_WNDPROC 這個參數沒宣告嗎? 我試著 var GWL_WNDPROC : LongInt; 結果是一樣 以 API的原式, GWL_WNDPROC 宣告 LongInt 有錯嗎? 我在VB裏面 GWL_WNDPROC 沒有宣告就直接用了,且沒有編譯時的錯誤 請問是什麼原因呢? Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |