请教把VB代码改写为delphi代码,

来源:互联网  时间:2016/7/7 10:17:26

关于网友提出的“ 请教把VB代码改写为delphi代码,”问题疑问,本网通过在网上对“ 请教把VB代码改写为delphi代码,”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 请教把VB代码改写为delphi代码,
描述:

Option Explicit
   Private Const GWL_WNDPROC = -4
   Public Const GWL_USERDATA = (-21)
   Public Const WM_SIZE = &H5
   Public Const WM_USER = &H400
   Private 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 
  Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
   (ByVal hwnd As Long, ByVal nIndex As Long) As Long
  Private Declare Function SetWindowLong Lib "user32" Alias _
   "SetWindowLongA" (ByVal hwnd As Long, _
    ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  Public Function Hook(ByVal hwnd As Long) As Long
   Dim pOld As Long
  ‘指定自定义的窗口过程
   pOld = SetWindowLong(hwnd, GWL_WNDPROC, _
   AddressOf WindowProc) 
  ‘保存原来默认的窗口过程指针
   SetWindowLong hwnd, GWL_USERDATA, pOld
   Hook = pOld
  End Function
  Public Sub Unhook(ByVal hwnd As Long, ByVal lpWndProc As Long)
   Dim temp As Long
   'Cease subclassing.
   temp = SetWindowLong(hwnd, GWL_WNDPROC, lpWndProc)
  End Sub
  Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, _
   ByVal wParam As Long, ByVal lParam As Long) As Long
   If uMsg = WM_SIZE Then
   ‘处理WM_SIZE消息
    MsgBox "SIZE"
   End If
   If uMsg = WM_USER + 1 Then
    MsgBox wParam
   End If
   Dim lpPrevWndProc As Long
  ‘查询原来默认的窗口过程指针
   lpPrevWndProc = GetWindowLong(hw, GWL_USERDATA)
  ‘调用原来的窗口过程
   WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg,wParam, lParam)
  End Function
  在Form中加入以下代码:
  Dim wParam As Long
  Dim lParam As Long
  Dim lResult As Long
  Private Sub Command1_Click()
   wParam = 12345
   lResult = SendMessage(Me.hwnd, WM_USER + 1, wParam, lParam)
  End Sub
  Private Sub Form_Load()
   Me.Tag = Hook(Me.hwnd)
  End Sub
  Private Sub Form_Unload(Cancel As Integer)
   Unhook Me.hwnd, Me.Tag
  End Sub


解决方案1:

//方案一
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    procedure WMSize(var Msg: TMessage); message WM_SIZE;
    procedure WMUSER1(var Msg: TMessage); message WM_USER + 1;
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.WMSize(var Msg: TMessage);
begin
  inherited;
  ShowMessage('WM_SIZE');
end;
procedure TForm1.WMUSER1(var Msg: TMessage);
begin
  inherited;
  ShowMessage(IntToStr(Msg.WParam));
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  SendMessage(Handle, WM_USER + 1, 1234, 0);
end;

上一篇动态创建button按钮问题
下一篇ShellExecute 的参数的问题。
明星图片
相关文章
《 请教把VB代码改写为delphi代码,》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)