lazarus/lcl/lmessages.pp
paul 8140fd8755 lcl: add more extra mouse buttons support
git-svn-id: trunk@20536 -
2009-06-09 04:25:32 +00:00

979 lines
25 KiB
ObjectPascal

{ $Id$ }
{
/***************************************************************************
lMessages.pp
------------
Initial Revision : Wed Jun 30 CST 1999
Shane Miller
***************************************************************************/
*****************************************************************************
* *
* This file is part of the Lazarus Component Library (LCL) *
* *
* See the file COPYING.modifiedLGPL.txt, included in this distribution, *
* for details about the copyright. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* *
*****************************************************************************
}
unit LMessages;
{$mode objfpc}{$H+}
interface
uses Classes, SysUtils, LCLType, GraphType
{$ifdef WINDOWS}
,messages
{$endif WINDOWS}
;
const
// TODO: review this list of messages and remove obsoleted/uneeded, move
// internal gtk things (like LM_CONFIGUREEVENT) directly to gtk interface code
//-------------
// lcl messages
//
// This should be a list of LCL specific messages
// RECEIVED from the interface, here are no defines
// of messages send to the interface
//-------------
LM_USER = $400; // standard WM_USER value
WM_USER = LM_USER;
// reserve some space for LM_USER messages
LM_LCL = LM_USER + $10000;
LM_ACTIVATEITEM = LM_LCL + 04; // GTK internal. Should be removed later
LM_CHANGED = LM_LCL + 05;
LM_FOCUS = LM_LCL + 06;
LM_CLICKED = LM_LCL + 07;
LM_PRESSED = LM_LCL + 08;
LM_RELEASED = LM_LCL + 09;
LM_ENTER = LM_LCL + 11;
LM_LEAVE = LM_LCL + 12;
LM_CHECKRESIZE = LM_LCL + 14;
LM_SETEDITABLE = LM_LCL + 18;
LM_MOVEWORD = LM_LCL + 19;
LM_MOVEPAGE = LM_LCL + 20;
LM_MOVETOROW = LM_LCL + 21;
LM_MOVETOCOLUMN = LM_LCL + 22;
LM_KILLCHAR = LM_LCL + 23;
LM_KILLWORD = LM_LCL + 24;
LM_KILLLINE = LM_LCL + 25;
LM_CONFIGUREEVENT = LM_LCL + 31; // GTK internal. Should be removed later.
LM_PAINT = LM_LCL + 32;
LM_TIMER = LM_LCL + 40;
LM_EXIT = LM_LCL + 60;
LM_CLOSEQUERY = LM_LCL + 62;
LM_DRAGSTART = LM_LCL + 63;
LM_DEACTIVATE = LM_LCL + 64; //used when a form is no longer in front
LM_QUIT = LM_LCL + 65;
LM_MONTHCHANGED = LM_LCL + 66;
LM_YEARCHANGED = LM_LCL + 67;
LM_DAYCHANGED = LM_LCL + 68;
LM_MOUSEFIRST2 = LM_LCL + 70;
LM_LBUTTONTRIPLECLK = LM_MOUSEFIRST2 + 0;
LM_LBUTTONQUADCLK = LM_MOUSEFIRST2 + 1;
LM_MBUTTONTRIPLECLK = LM_MOUSEFIRST2 + 2;
LM_MBUTTONQUADCLK = LM_MOUSEFIRST2 + 3;
LM_RBUTTONTRIPLECLK = LM_MOUSEFIRST2 + 4;
LM_RBUTTONQUADCLK = LM_MOUSEFIRST2 + 5;
LM_MOUSEENTER = LM_MOUSEFIRST2 + 6;
LM_MOUSELEAVE = LM_MOUSEFIRST2 + 7;
LM_XBUTTONTRIPLECLK = LM_MOUSEFIRST2 + 8;
LM_XBUTTONQUADCLK = LM_MOUSEFIRST2 + 9;
LM_MOUSELAST2 = LM_XBUTTONQUADCLK;
// for triple and quad clicks see below
LM_GRABFOCUS = LM_LCL + 80;
LM_DRAWLISTITEM = LM_LCL + 81;
LM_CONTEXTMENU = LM_LCL + 82;
// these IDs are reserved for internal messages in the interfaces
LM_INTERFACEFIRST = LM_LCL + 99;
LM_INTERFACELAST = LM_LCL + 199;
LM_UNKNOWN = LM_INTERFACELAST + 1;
//-------------
//end of messages that are sent to the interface
//-------------
//-------------
// Windows Compatability}
//-------------
{ System Menu Commands }
SC_SIZE = 61440;
SC_MOVE = 61456;
SC_MINIMIZE = 61472;
SC_MAXIMIZE = 61488;
SC_NEXTWINDOW = 61504;
SC_PREVWINDOW = 61520;
SC_CLOSE = 61536;
SC_VSCROLL = 61552;
SC_HSCROLL = 61568;
SC_MOUSEMENU = 61584;
SC_KEYMENU = 61696;
SC_ARRANGE = 61712;
SC_RESTORE = 61728;
SC_TASKLIST = 61744;
SC_SCREENSAVE = 61760;
SC_HOTKEY = 61776;
SC_DEFAULT = 61792;
SC_MONITORPOWER = 61808;
SC_CONTEXTHELP = 61824;
SC_SEPARATOR = 61455;
//-------------
// Messages
//-------------
LM_NULL = $0000;
LM_CREATE = $0001;
LM_DESTROY = $0002;
LM_MOVE = $0003;
LM_SIZE = $0005;
LM_ACTIVATE = $0006;
LM_SETFOCUS = $0007;
LM_KILLFOCUS = $0008;
LM_ENABLE = $000A;
LM_GETTEXTLENGTH = $000E;
LM_ERASEBKGND = $0014;
LM_SHOWWINDOW = $0018;
LM_CANCELMODE = $001F;
LM_SETCURSOR = $0020;
LM_DRAWITEM = $002B;
LM_MEASUREITEM = $002C;
LM_DELETEITEM = $002D;
LM_VKEYTOITEM = $002E;
LM_CHARTOITEM = $002F;
LM_SETFONT = $0030;
LM_COMPAREITEM = $0039;
LM_WINDOWPOSCHANGING = $0046;
LM_WINDOWPOSCHANGED = $0047;
LM_NOTIFY = $004E;
LM_NOTIFYFORMAT = $0055;
LM_NCCALCSIZE = $0083;
LM_NCHITTEST = $0084;
LM_NCPAINT = $0085;
LM_NCACTIVATE = $0086;
LM_GETDLGCODE = $0087;
LM_NCMOUSEMOVE = $00A0;
LM_NCLBUTTONDOWN = $00A1;
LM_NCLBUTTONUP = $00A2;
LM_NCLBUTTONDBLCLK = $00A3;
LM_KEYFIRST = $0100;
LM_KEYDOWN = $0100;
LM_KEYUP = $0101;
LM_CHAR = $0102;
LM_SYSKEYDOWN = $0104;
LM_SYSKEYUP = $0105;
LM_SYSCHAR = $0106;
LM_KEYLAST = $0108;
LM_COMMAND = $0111;
LM_SYSCOMMAND = $0112;
LM_HSCROLL = $0114;
LM_VSCROLL = $0115;
LM_CTLCOLORMSGBOX = $0132;
LM_CTLCOLOREDIT = $0133;
LM_CTLCOLORLISTBOX = $0134;
LM_CTLCOLORBTN = $0135;
LM_CTLCOLORDLG = $0136;
LM_CTLCOLORSCROLLBAR = $0137;
LM_CTLCOLORSTATIC = $0138;
LM_MOUSEFIRST = $0200;
LM_MOUSEMOVE = $0200;
LM_LBUTTONDOWN = $0201;
LM_LBUTTONUP = $0202;
LM_LBUTTONDBLCLK = $0203;
LM_RBUTTONDOWN = $0204;
LM_RBUTTONUP = $0205;
LM_RBUTTONDBLCLK = $0206;
LM_MBUTTONDOWN = $0207;
LM_MBUTTONUP = $0208;
LM_MBUTTONDBLCLK = $0209;
LM_MOUSEWHEEL = $020A;
LM_XBUTTONDOWN = $020B;
LM_XBUTTONUP = $020C;
LM_XBUTTONDBLCLK = $020D;
LM_MOUSELAST = $020D;
LM_PARENTNOTIFY = $0210;
LM_CAPTURECHANGED = $0215;
LM_DROPFILES = $0233;
LM_SELCHANGE = $0234;
LM_CUT = $0300;
LM_COPY = $0301;
LM_PASTE = $0302;
LM_CLEAR = $0303;
const
// Moved from Controls to avoid circles
CM_BASE = $B000;
CM_ACTIVATE = CM_BASE + 0;
CM_DEACTIVATE = CM_BASE + 1;
CM_GOTFOCUS = CM_BASE + 2;
CM_LOSTFOCUS = CM_BASE + 3;
CM_CANCELMODE = CM_BASE + 4;
CM_DIALOGKEY = CM_BASE + 5;
CM_DIALOGCHAR = CM_BASE + 6;
CM_FOCUSCHANGED = CM_BASE + 7;
//CM_PARENTFONTCHANGED = CM_BASE + 8; // LCL doesn't send or receive
CM_PARENTCOLORCHANGED = CM_BASE + 9;
CM_HITTEST = CM_BASE + 10;
CM_VISIBLECHANGED = CM_BASE + 11;
CM_ENABLEDCHANGED = CM_BASE + 12;
CM_COLORCHANGED = CM_BASE + 13;
CM_FONTCHANGED = CM_BASE + 14;
CM_CURSORCHANGED = CM_BASE + 15;
//CM_CTL3DCHANGED = CM_BASE + 16;
//CM_PARENTCTL3DCHANGED = CM_BASE + 17;
CM_TEXTCHANGED = CM_BASE + 18;
CM_MOUSEENTER = CM_BASE + 19;
CM_MOUSELEAVE = CM_BASE + 20;
CM_MENUCHANGED = CM_BASE + 21;
CM_APPKEYDOWN = CM_BASE + 22;
CM_APPSYSCOMMAND = CM_BASE + 23;
CM_BUTTONPRESSED = CM_BASE + 24;
CM_SHOWINGCHANGED = CM_BASE + 25;
CM_ENTER = CM_BASE + 26;
CM_EXIT = CM_BASE + 27;
CM_DESIGNHITTEST = CM_BASE + 28;
CM_ICONCHANGED = CM_BASE + 29;
CM_WANTSPECIALKEY = CM_BASE + 30;
CM_INVOKEHELP = CM_BASE + 31;
CM_WINDOWHOOK = CM_BASE + 32;
CM_RELEASE = CM_BASE + 33;
CM_SHOWHINTCHANGED = CM_BASE + 34;
CM_PARENTSHOWHINTCHANGED= CM_BASE + 35;
CM_SYSCOLORCHANGE = CM_BASE + 36;
CM_WININICHANGE = CM_BASE + 37;
CM_FONTCHANGE = CM_BASE + 38;
CM_TIMECHANGE = CM_BASE + 39;
CM_TABSTOPCHANGED = CM_BASE + 40;
CM_UIACTIVATE = CM_BASE + 41;
CM_UIDEACTIVATE = CM_BASE + 42;
CM_DOCWINDOWACTIVATE = CM_BASE + 43;
CM_CONTROLLISTCHANGE = CM_BASE + 44;
CM_GETDATALINK = CM_BASE + 45;
CM_CHILDKEY = CM_BASE + 46;
//CM_DRAG = CM_BASE + 47; //Method TControl.DoDragMsg()
CM_HINTSHOW = CM_BASE + 48;
CM_DIALOGHANDLE = CM_BASE + 49;
CM_ISTOOLCONTROL = CM_BASE + 50;
CM_RECREATEWND = CM_BASE + 51;
CM_INVALIDATE = CM_BASE + 52;
CM_SYSFONTCHANGED = CM_BASE + 53;
CM_CONTROLCHANGE = CM_BASE + 54;
CM_CHANGED = CM_BASE + 55;
//CM_DOCKCLIENT = CM_BASE + 56; //Method TWinControl.DoDockClientMsg()
//CM_UNDOCKCLIENT = CM_BASE + 57; //Method TWinControl.DoUndockClientMsg()
//CM_FLOAT = CM_BASE + 58; //Method TControl.DoFloatMsg()
CM_BORDERCHANGED = CM_BASE + 59;
CM_BIDIMODECHANGED = CM_BASE + 60;
CM_PARENTBIDIMODECHANGED= CM_BASE + 61;
CM_ALLCHILDRENFLIPPED = CM_BASE + 62;
CM_ACTIONUPDATE = CM_BASE + 63;
CM_ACTIONEXECUTE = CM_BASE + 64;
CM_HINTSHOWPAUSE = CM_BASE + 65;
CM_DOCKNOTIFICATION = CM_BASE + 66;
CM_MOUSEWHEEL = CM_BASE + 67;
CM_APPSHOWBTNGLYPHCHANGED = CM_BASE + 68;
CM_APPSHOWMENUGLYPHCHANGED = CM_BASE + 69;
CN_BASE = $BC00;
CN_CHARTOITEM = CN_BASE + LM_CHARTOITEM;
CN_COMMAND = CN_BASE + LM_COMMAND;
CN_COMPAREITEM = CN_BASE + LM_COMPAREITEM;
CN_CTLCOLORBTN = CN_BASE + LM_CTLCOLORBTN;
CN_CTLCOLORDLG = CN_BASE + LM_CTLCOLORDLG;
CN_CTLCOLOREDIT = CN_BASE + LM_CTLCOLOREDIT;
CN_CTLCOLORLISTBOX = CN_BASE + LM_CTLCOLORLISTBOX;
CN_CTLCOLORMSGBOX = CN_BASE + LM_CTLCOLORMSGBOX;
CN_CTLCOLORSCROLLBAR = CN_BASE + LM_CTLCOLORSCROLLBAR;
CN_CTLCOLORSTATIC = CN_BASE + LM_CTLCOLORSTATIC;
CN_DELETEITEM = CN_BASE + LM_DELETEITEM;
CN_DRAWITEM = CN_BASE + LM_DRAWITEM;
CN_HSCROLL = CN_BASE + LM_HSCROLL;
CN_MEASUREITEM = CN_BASE + LM_MEASUREITEM;
CN_PARENTNOTIFY = CN_BASE + LM_PARENTNOTIFY;
CN_VKEYTOITEM = CN_BASE + LM_VKEYTOITEM;
CN_VSCROLL = CN_BASE + LM_VSCROLL;
CN_KEYDOWN = CN_BASE + LM_KEYDOWN;
CN_KEYUP = CN_BASE + LM_KEYUP;
CN_CHAR = CN_BASE + LM_CHAR;
CN_SYSKEYUP = CN_BASE + LM_SYSKEYUP;
CN_SYSKEYDOWN = CN_BASE + LM_SYSKEYDOWN;
CN_SYSCHAR = CN_BASE + LM_SYSCHAR;
CN_NOTIFY = CN_BASE + LM_NOTIFY;
//-------------
// End of Windows Compatability and messages
//-------------
type
{ LCL Messages }
TLMDrawItems = record
Msg: Cardinal;
{$ifdef cpu64}
UnusedMsg: Cardinal;
{$endif}
Ctl: HWND;
DrawItemStruct: PDrawItemStruct;
Result: LRESULT;
end;
TLMDrawListItem = record
// message from the interface to the LCL
Msg: Cardinal;
{$ifdef cpu64}
UnusedMsg: Cardinal;
{$endif}
Unused: PtrInt;
DrawListItemStruct : PDrawListItemStruct;
Result: LRESULT;
end;
TLMMeasureItem = record
// message from the interface to the LCL
Msg: Cardinal;
{$ifdef cpu64}
UnusedMsg: Cardinal;
{$endif}
idCtl: PtrUint;
MeasureItemStruct: PMeasureItemStruct;
Result: LRESULT;
end;
{$ifndef WINDOWS}
TLMNoParams = record
Msg: Cardinal;
{$ifdef cpu64}
UnusedMsg: Cardinal;
{$endif}
Unused: array[0..1] of PtrInt;
Result: LRESULT;
end;
{$else}
TLMNoParams = TWMNoParams;
{$endif}
TLMEraseBkgnd = record
Msg: Cardinal;
{$ifdef cpu64}
UnusedMsg: Cardinal;
{$endif}
DC: HDC;
Unused: PtrInt;
Result: LRESULT;
end;
TLMGetText = record
Msg: Cardinal;
{$ifdef cpu64}
UnusedMsg: Cardinal;
{$endif}
TextMax: PtrInt;
Text: PChar;
Result: LRESULT;
end;
TLMGetTextLength = TLMNoParams;
TLMKey = record
Msg: Cardinal;
{$ifdef cpu64}
UnusedMsg: Cardinal;
{$endif}
{$IFDEF FPC_LITTLE_ENDIAN}
CharCode: Word; // VK_XXX constants as TLMKeyDown/Up, ascii if TLMChar
Unused: Word;
{$ELSE}
Unused: Word;
CharCode: Word; // VK_XXX constants as TLMKeyDown/Up, ascii if TLMChar
{$ENDIF}
{$ifdef cpu64}
Unused2 : Longint;
{$endif cpu64}
KeyData: PtrInt;
Result: LRESULT;
end;
TLMChar = TLMKey;
TLMKeyDown = TLMKey;
TLMKeyUp = TLMKey;
TLMSysChar = TLMKey;
TLMSysKeyDown = TLMKey;
TLMSysKeyUp = TLMKey;
TLMMouse = record
Msg : Cardinal;
Keys: PtrInt;
case Integer of
0: (
XPos: SmallInt;
YPos: SmallInt);
1: (
Pos : TSmallPoint);
2: (
Dummy: LPARAM; // needed for64 bit alignment
Result: LRESULT);
end;
TLMMouseMove = TLMMouse;
TLMMove = record
Msg: Cardinal;
{$ifdef cpu64}
UnusedMsg: Cardinal;
{$endif}
MoveType: PtrInt; // 0 = update, 1 = force RequestAlign,
// 128 = Source is Interface (Widget has moved)
case Integer of
0: (
XPos: Smallint;
YPos: Smallint);
1: (
Pos : TSmallPoint);
2: (
Dummy: LPARAM; // needed for64 bit alignment
Result: LRESULT);
end;
TLMActivate = record
Msg: Cardinal;
{$ifdef cpu64}
UnusedMsg: Cardinal;
{$endif}
{$IFDEF FPC_LITTLE_ENDIAN}
Active: WordBool;
Minimized: WordBool;
{$ELSE}
Minimized: WordBool;
Active: WordBool;
{$ENDIF}
{$ifdef cpu64}
Unused : Longint;
{$endif cpu64}
ActiveWindow: HWND;
Result: LRESULT;
end;
TLMNCActivate = record
Msg: Cardinal;
{$ifdef cpu64}
UnusedMsg: Cardinal;
{$endif}
Active: LongBool;
{$ifdef cpu64}
Unused2 : Longint;
{$endif cpu64}
Unused: LPARAM;
Result: LRESULT;
end;
TLMNotify = record
Msg: Cardinal;
{$ifdef cpu64}
UnusedMsg: Cardinal;
{$endif}
IDCtrl: PtrInt;
NMHdr: PNMHdr;
Result: LRESULT;
end;
TLMNotifyFormat = record
Msg: Cardinal;
{$ifdef cpu64}
UnusedMsg: Cardinal;
{$endif}
From: HWND;
Command: LPARAM;
Result: LRESULT;
end;
TLMPaint = record
Msg: Cardinal;
{$ifdef cpu64}
UnusedMsg: Cardinal;
{$endif}
DC: HDC;
PaintStruct: PPaintStruct;
Result: LRESULT;
end;
PWindowPos = ^TWindowPos;
tagWINDOWPOS = record
hwnd: THANDLE; //hwnd: hwnd doesnt compile on the next line
hwndInsertAfter: THANDLE;
x: Integer;
y: Integer;
cx: Integer;
cy: Integer;
flags: Cardinal;
end;
TWindowPos = tagWINDOWPOS;
WINDOWPOS = tagWINDOWPOS;
TLMWindowPosMsg = record
Msg: Cardinal;
{$ifdef cpu64}
UnusedMsg: Cardinal;
{$endif}
Unused: WPARAM;
WindowPos: PWindowPos;
Result: LPARAM;
end;
TLMWindowPosChanged = TLMWindowPosMsg;
TLMWindowPosChanging = TLMWindowPosMsg;
{PNCCalcSizeParams}
PNCCalcSizeParams = ^TNCCalcSizeParams;
tagNCCalcSize_Params = record
rgrc: array[0..2] of TRect;
lpPos: PWindowPos;
end;
TNCCalcSizeParams = tagNCCalcSize_Params;
ncCalcSizeParams = tagNCCalcSize_Params;
TLMNCCalcSize = record
Msg: Cardinal;
{$ifdef cpu64}
UnusedMsg: Cardinal;
{$endif}
CalcValidRects: LongBool;
{$ifdef cpu64}
Unused : Longint;
{$endif cpu64}
CalcSize_Params: PNCCalcSizeParams;
Result: LResult;
end;
TLMSysColorChange = TLMNoParams;
TLMSysCommand = record
Msg: Cardinal;
{$ifdef cpu64}
UnusedMsg: Cardinal;
{$endif}
case CmdType: PtrInt of
SC_HOTKEY: (
ActivateWnd: HWND;
Result: LRESULT);
SC_KEYMENU: (
{$IFDEF FPC_LITTLE_ENDIAN}
Key: Word);
{$ELSE}
Unused: Word;
Key: Word);
{$ENDIF}
SC_CLOSE, SC_HSCROLL, SC_MAXIMIZE, SC_MINIMIZE, SC_MOUSEMENU, SC_MOVE,
SC_NEXTWINDOW, SC_PREVWINDOW, SC_RESTORE, SC_SCREENSAVE, SC_SIZE,
SC_TASKLIST, SC_VSCROLL: (
XPos: Smallint;
YPos: Smallint);
end;
TLMSysDeadChar = record
Msg: Cardinal;
{$ifdef cpu64}
UnusedMsg: Cardinal;
{$endif}
{$IFDEF FPC_LITTLE_ENDIAN}
CharCode: Word;
Unused: Word;
{$ELSE}
Unused: Word;
CharCode: Word;
{$ENDIF}
{$ifdef cpu64}
Unused2 : Longint;
{$endif cpu64}
KeyData: LPARAM;
Result: LRESULT;
end;
TLMSystemError = record
Msg: Cardinal;
{$ifdef cpu64}
UnusedMsg: Cardinal;
{$endif}
{$IFDEF FPC_LITTLE_ENDIAN}
ErrSpec: Word;
Unused1 : Word;
{$ELSE}
Unused1 : Word;
ErrSpec: Word;
{$ENDIF}
{$ifdef cpu64}
Unused2 : Longint;
{$endif cpu64}
Unused: LPARAM;
Result: LRESULT;
end;
TLMTimeChange = TLMNoParams;
// todo: remove TLMSetText
TLMSetText = record
Msg: Cardinal;
{$ifdef cpu64}
UnusedMsg: Cardinal;
{$endif}
Unused: WPARAM;
Text: PChar;
Result: LRESULT;
end;
PLMMouseEvent = ^TLMMouseEvent;
TLMMouseEvent = record
Msg: Cardinal;
{$ifdef cpu64}
UnusedMsg: Cardinal;
{$endif}
{$IFDEF FPC_LITTLE_ENDIAN}
Button: Word; // 1=left, 2=right, 3=middle
WheelDelta: SmallInt; // -1 for up, 1 for down
{$ELSE}
WheelDelta: SmallInt; // -1 for up, 1 for down
Button: Word; // 1=left, 2=right, 3=middle
{$ENDIF}
{$ifdef cpu64}
Unused1 : Longint;
{$endif cpu64}
X: Smallint; // under gtk this is longint
Y: Smallint; // ditto
{$ifdef cpu64}
Unused2 : Longint;
{$endif cpu64}
Result: LRESULT; // to fit std message size
UserData: pointer; // used under gtk
State: TShiftState; // in win is the equivalent of button
end;
TLMLButtonDown = TLMMouse;
TLMRButtonDown = TLMMouse;
TLMMButtonDown = TLMMouse;
TLMXButtonDown = TLMMouse;
TLMLButtonDblClk = TLMMouse;
TLMRButtonDblClk = TLMMouse;
TLMMButtonDblClk = TLMMouse;
TLMXButtonDblClk = TLMMouse;
TLMLButtonTripleClk = TLMMouse;
TLMRButtonTripleClk = TLMMouse;
TLMMButtonTripleClk = TLMMouse;
TLMXButtonTripleClk = TLMMouse;
TLMLButtonQuadClk = TLMMouse;
TLMRButtonQuadClk = TLMMouse;
TLMMButtonQuadClk = TLMMouse;
TLMXButtonQuadClk = TLMMouse;
TLMLButtonUp = TLMMouse;
TLMRButtonUp = TLMMouse;
TLMMButtonUp = TLMMouse;
TLMXButtonUp = TLMMouse;
TLMSetFocus = record
Msg: Cardinal;
{$ifdef cpu64}
UnusedMsg: Cardinal;
{$endif}
FocusedWnd: HWND;
Unused: LPARAM;
Result: LRESULT;
end;
{$ifndef windows}
TLMSize = record
Msg: Cardinal;
{$ifdef cpu64}
UnusedMsg: Cardinal;
{$endif}
SizeType: PtrInt; // see LCLType.pp (e.g. Size_Restored)
Width: Word;
Height: Word;
{$ifdef cpu64}
Unused : Longint;
{$endif cpu64}
Result: LResult;
End;
{$else}
TLMSize = TWMSize;
{$endif}
TLMNoPara = record
Msg: Cardinal;
end;
PLMessage = ^TLMessage;
{$ifndef windows}
TLMessage = record
Msg : Cardinal;
{$ifdef cpu64}
UnusedMsg: Cardinal;
{$endif}
case Integer of
0 : (
WParam: LclType.WPARAM;
LParam: LclType.LPARAM;
Result: LclType.LRESULT);
{$IFNDEF CPU64}
// on a 64 bit platform these make no sense
1 : (
{$IFDEF FPC_LITTLE_ENDIAN}
WParamLo: Word;
WParamHi: Word;
LParamLo: Word;
LParamHi: Word;
ResultLo: Word;
ResultHi: Word);
{$ELSE}
WParamHi: Word;
WParamLo: Word;
LParamHi: Word;
LParamLo: Word;
ResultHi: Word;
ResultLo: Word);
{$ENDIF}
{$endif}
end;
{$else}
TLMessage = TMessage;
{$endif}
TLMEnter = TLMNoPara;
TLMExit = TLMNoPara;
// MWE: TLMScroll has not the same size as the VCL/Winapi counterpart.
// IMO we don't have to force all widgetsets to be compatible in a shortcoming
// in the win32 API.
// So POS: SmallInt -> LongInt and a win32compatible smallpos is added
// Due to this, the record is a LongInt to large.
TLMScroll = record
Msg: Cardinal;
{$ifdef cpu64}
UnusedMsg: Cardinal;
{$endif}
{$IFDEF FPC_LITTLE_ENDIAN}
ScrollCode: SmallInt; // SB_xxx
SmallPos: SmallInt;
{$ELSE}
SmallPos: SmallInt;
ScrollCode: SmallInt; // SB_xxx
{$ENDIF}
{$ifdef cpu64}
Unused : Longint;
{$endif cpu64}
ScrollBar: HWND;
Result: LRESULT; // See remark
Pos: LongInt; //
end;
TLMHScroll = TLMScroll;
TLMVScroll = TLMScroll;
{$ifndef windows}
TLMShowWindow = record
Msg: Cardinal;
{$ifdef cpu64}
UnusedMsg: Cardinal;
{$endif}
Show: LongBool;
{$ifdef cpu64}
Unused : Longint;
{$endif cpu64}
Status: LPARAM;
Result: LRESULT;
end;
{$else}
TLMShowWindow = TWMShowWindow;
{$endif}
{$ifndef windows}
TLMKILLFOCUS = TLMSetFocus;
{$else}
TLMKillFocus = TWMKillFocus;
{$endif}
TLMNCHITTEST = record
Msg: Cardinal;
{$ifdef cpu64}
UnusedMsg: Cardinal;
{$endif}
Unused: WPARAM;
case Integer of
0 : (
XPos : SmallInt;
YPos : SmallInt);
1 : (
Pos : TSmallPoint);
2: (
Dummy: LPARAM; // needed for64 bit alignment
Result: LRESULT);
end;
TLMDestroy = TLMNoParams;
TLMCommand = record
Msg: Cardinal;
{$ifdef cpu64}
UnusedMsg: Cardinal;
{$endif}
{$IFDEF FPC_LITTLE_ENDIAN}
ItemID: Word;
NotifyCode: Word;
{$ELSE}
NotifyCode: Word;
ItemID: Word;
{$ENDIF}
{$ifdef cpu64}
Unused : Longint;
{$endif cpu64}
Ctl: HWND;
Result: LRESULT;
end;
{ Combo Box Notification Codes }
const
CBN_ERRSPACE = (-1);
CBN_SELCHANGE = 1;
CBN_DBLCLK = 2;
CBN_SETFOCUS = 3;
CBN_KILLFOCUS = 4;
CBN_EDITCHANGE = 5;
CBN_EDITUPDATE = 6;
CBN_DROPDOWN = 7;
CBN_CLOSEUP = 8;
CBN_SELENDOK = 9;
CBN_SELENDCANCEL = 10;
function GetMessageName(const AMessage: Integer): String;
Implementation
function GetMessageName(const AMessage: Integer): String;
begin
case AMessage of
//-------------
// lcl messages
//
// This should be a list of LCL specific messages
// RECEIVED from the interface, here are no defines
// of messages send to the interface
//-------------
LM_ACTIVATE : Result:='LM_ACTIVATE';
LM_SETFOCUS : Result:='LM_SETFOCUS';
LM_KILLFOCUS : Result:='LM_KILLFOCUS';
LM_SHOWWINDOW : Result:='LM_SHOWWINDOW';
LM_SIZE : Result:='LM_SIZE';
LM_MOVE : Result:='LM_MOVE';
// LM_MOUSEFIRST : Result:='LM_MOUSEFIRST';
LM_MOUSEMOVE : Result:='LM_MOUSEMOVE';
LM_LBUTTONDOWN : Result:='LM_LBUTTONDOWN';
LM_LBUTTONUP : Result:='LM_LBUTTONUP';
LM_CAPTURECHANGED : Result:='LM_CAPTURECHANGED';
LM_SELCHANGE : Result:='LM_SELCHANGE';
LM_USER :Result:='LM_USER';
LM_DESTROY :Result:='LM_DESTROY';
LM_ACTIVATEITEM :Result:='LM_ACTIVATEITEM';
LM_CHANGED :Result:='LM_CHANGED';
LM_FOCUS :Result:='LM_FOCUS';
LM_CLICKED :Result:='LM_CLICKED';
LM_PRESSED :Result:='LM_PRESSED';
LM_RELEASED :Result:='LM_RELEASED';
LM_ENTER :Result:='LM_ENTER';
LM_LEAVE :Result:='LM_LEAVE';
LM_CHECKRESIZE :Result:='LM_CHECKRESIZE';
LM_SETEDITABLE :Result:='LM_SETEDITABLE';
LM_MOVEWORD :Result:='LM_MOVEWORD';
LM_MOVEPAGE :Result:='LM_MOVEPAGE';
LM_MOVETOROW :Result:='LM_MOVETOROW';
LM_MOVETOCOLUMN :Result:='LM_MOVETOCOLUMN';
LM_KILLCHAR :Result:='LM_KILLCHAR';
LM_KILLWORD :Result:='LM_KILLWORD';
LM_KILLLINE :Result:='LM_KILLLINE';
LM_CUT :Result:='LM_CUT';
LM_COPY :Result:='LM_COPY';
LM_PASTE :Result:='LM_PASTE';
LM_CLEAR :Result:='LM_CLEAR';
LM_CONFIGUREEVENT :Result:='LM_CONFIGUREEVENT';
LM_PAINT :Result:='LM_PAINT';
LM_KEYDOWN :Result:='LM_KEYDOWN';
LM_KEYUP :Result:='LM_KEYUP';
LM_TIMER :Result:='LM_TIMER';
LM_EXIT :Result:='LM_EXIT';
LM_CLOSEQUERY :Result:='LM_CLOSEQUERY';
LM_DRAGSTART :Result:='LM_DRAGSTART';
LM_DEACTIVATE :Result:='LM_DEACTIVATE';
LM_MONTHCHANGED :Result:='LM_MONTHCHANGED';
LM_YEARCHANGED :Result:='LM_YEARCHANGED';
LM_DAYCHANGED :Result:='LM_DAYCHANGED';
//LM_MOUSEFIRST2 :Result:='';
LM_LBUTTONTRIPLECLK :Result:='LM_LBUTTONTRIPLECLK';
LM_LBUTTONQUADCLK :Result:='LM_LBUTTONQUADCLK';
LM_MBUTTONTRIPLECLK :Result:='LM_MBUTTONTRIPLECLK';
LM_MBUTTONQUADCLK :Result:='LM_MBUTTONQUADCLK';
LM_RBUTTONTRIPLECLK :Result:='LM_RBUTTONTRIPLECLK';
LM_RBUTTONQUADCLK :Result:='LM_RBUTTONQUADCLK';
LM_MOUSEENTER :Result:='LM_MOUSEENTER';
LM_MOUSELEAVE :Result:='LM_MOUSELEAVE';
//LM_MOUSELAST2 :Result:='';
LM_GRABFOCUS :Result:='LM_GRABFOCUS';
LM_DRAWLISTITEM :Result:='LM_DRAWLISTITEM';
// these IDs are reserved for internal messages in the interfaces
LM_INTERFACEFIRST :Result:='LM_INTERFACEFIRST';
LM_INTERFACELAST :Result:='LM_INTERFACELAST';
LM_UNKNOWN :Result:='LM_UNKNOWN';
else
Result := Format('Unknown message 0x%x (%d)', [AMessage, AMessage]);
end;
Result := Trim(Result);
end;
end.