1,183
社区成员
发帖
与我相关
我的任务
分享
//先用这句设置处理过程
SetWindowLong (FHandle, GWL_WNDPROC, LongWord (@NewWndCallBack));
//实际的处理过程在这里实现
procedure TStockDrawBaseObject.ProcessMessage(
var Message: TMessage; var Result: integer);
var Rect: TRect;
ch: Char;
index: integer;
bResult: boolean;
Brush :HBRUSH;
parentHWND :HWND;
begin
Case message.Msg of
WM_PAINT:
begin
Paint (TWMPaint (Message), result);
end;
WM_ERASEBKGND:
begin
self.EraseBkgnd(TWMEraseBkgnd(Message), result);
end;
WM_LBUTTONDOWN:
begin
DoLButtonDown (TWMLButtonDown (Message));
end;
WM_LBUTTONUP:
begin
DoLButtonUp (TWMLButtonUp (Message));
end;
WM_LBUTTONDBLCLK:
begin
DoLButtonDblClk ( TWMLButtonDblClk (Message));
end;
WM_MOUSEWHEEL:
begin
bResult := Result <> 0;
DoMouseWheel (self, TCMMouseWheel(Message).ShiftState,
TCMMouseWheel(Message).WheelDelta,
SmallPointToPoint(TCMMouseWheel(Message).Pos), bResult);
if bResult then
result := 1
else
result := 0;
end;
WM_MOUSEMOVE:
begin
DoMouseMove (TWMMouseMove(Message));
end;
WM_CHAR, WM_SYSCHAR:
begin
DoChar (TWMChar (Message));
end;
//其他消息捕获成功,这里普通的键也成功,VK_NEXT VK_PRIOR等几个特殊键不能捕获
WM_KEYDOWN, WM_SYSKEYDOWN:
begin
DoKeyDown(TWMKeyDown (Message));
end;
end;
if Assigned (FStockDrawOnMessage) then
FStockDrawOnMessage (FHandle, Message, result);
if self.FManager <> nil then
FManager.ProcessMessage(FHandle, Message, result);
end;