diff options
author | Alexey Kulakov <panda75@bk.ru> | 2014-12-08 19:32:16 +0000 |
---|---|---|
committer | Alexey Kulakov <panda75@bk.ru> | 2014-12-08 19:32:16 +0000 |
commit | 9e46759e7968e312841f7050a42f64808b4c0d22 (patch) | |
tree | 8bcc8fe951332f18533bd484a7ede98aa1156c47 /plugins/ExternalAPI/delphi/m_text.inc | |
parent | f43e875851959070502a73d8313ca1586e0e54d1 (diff) |
Awkward's private repo sync
git-svn-id: http://svn.miranda-ng.org/main/trunk@11279 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'plugins/ExternalAPI/delphi/m_text.inc')
-rw-r--r-- | plugins/ExternalAPI/delphi/m_text.inc | 269 |
1 files changed, 269 insertions, 0 deletions
diff --git a/plugins/ExternalAPI/delphi/m_text.inc b/plugins/ExternalAPI/delphi/m_text.inc new file mode 100644 index 0000000000..5847cd92e1 --- /dev/null +++ b/plugins/ExternalAPI/delphi/m_text.inc @@ -0,0 +1,269 @@ +{$IFNDEF M_MTEXT}
+{$DEFINE M_MTEXT}
+
+// NEW mtextcontrol interface:
+//
+// obtain the full mtextcontrol interface from the library. it is much faster as use of
+// miranda core CallService to access to mtextcontrol (no core traffic).
+// This interface provides full access to mtextcontrol internal functions,
+// thus enabling devs to fully utilize the mtextcontrol API.
+// All functions will be exported as miranda services for compatibility.
+//
+// the interface is populated during the Load(PLUGINLINK *link) handler, so you can assume it is ready when Miranda
+// throw the ME_SYSTEM_MODULESLOADED event and you can generate a warning in your ModulesLoaded() when
+// it depends on the mtextcontrol interface and the mtextcontrol plugin is missing.
+//
+// example:
+//
+// MTEXT_INTERFACE MText = {0};
+//
+// mir_getMTI(&MText);
+//
+// all interface function designed as old mtextcontrol helper functions.
+// therefore it is easy to convert your old plugin code to new interface.
+//
+// example:
+//
+// old code: MTextCreate (...
+// new code: MText.Create(...
+
+// Text control
+const
+ MTEXTCONTROLCLASS = 'MTextControl';
+ MTM_SETUSER = WM_USER;
+ MTM_UPDATE = WM_USER+1;
+
+type
+ TMTEXT_INTERFACE = record
+ cbSize:size_t;
+ version:dword;
+
+ Register :function(const userTitle:PAnsiChar; options:dword):THANDLE; stdcall;
+ Create :function(userHandle:THANDLE; text:pointer):THANDLE; stdcall;
+ CreateEx :function(userHandle:THANDLE; hContact:TMCONTACT; text:pointer; flags:dword):THANDLE; stdcall;
+ Measure :function(dc:HDC; sz:PSIZE; text:THANDLE):int; stdcall;
+ Display :function(dc:HDC; pos:TPOINT; sz:TSIZE; text:THANDLE):int; stdcall;
+ SetParent :function(text:THANDLE; hwnd:HWND; rect:TRECT):int; stdcall;
+ SendMsg :function(hwnd:HWND; text:THANDLE; msg:uint; wParam:WPARAM; lParam:LPARAM):int; stdcall;
+ CreateProxy:function(text:THANDLE):HWND; stdcall;
+ Destroy :function(text:THANDLE):int; stdcall;
+ end;
+
+const
+// get access to the interface
+// wParam = 0
+// lParam = (LPARAM)(MTEXT_INTERFACE*)Mtext
+// dont vorget to set cbSize before call service
+ MS_TEXT_GETINTERFACE:PAnsiChar = 'MText/GetInterface';
+(*
+__forceinline INT_PTR mir_getMTI( MTEXT_INTERFACE* dest )
+{
+ dest->cbSize = sizeof(*dest);
+ INT_PTR result = CallService(MS_TEXT_GETINTERFACE, 0, (LPARAM)dest);
+ return result;
+}
+*)
+const
+ // visual text options, used in MS_TEXT_REGISTER
+ MTEXT_FANCY_SMILEYS = $00000010; // SmileyAdd smileys
+ MTEXT_FANCY_BBCODES = $00000020; // [b], [u], [i]
+ MTEXT_FANCY_MATHMOD = $00000040; // enable math module formula parsing
+ MTEXT_FANCY_URLS = $00000080; // underline urls
+ MTEXT_FANCY_BBCODES2 = $00000100; // [color], [img], [url], not implemented yet
+ MTEXT_FANCY_SIMPLEFMT = $00000200; // simple formatting ("_", "/" and "*")
+ MTEXT_FANCY_MASK = $00007FFF;
+ MTEXT_FANCY_DEFAULT = $00008000; // Use default options
+
+ // text options, used in MS_TEXT_REGISTER
+ MTEXT_SYSTEM_HICONS = $00010000; // [$handle=i<HICON as dword>$]
+ MTEXT_SYSTEM_HBITMAPS = $00010000; // [$handle=b<HBITMAP as dword>$], not implemented yet
+ MTEXT_SYSTEM_ESCAPED = $00020000; // passed text is escaped with slashes, not implemented yet
+ MTEXT_SYSTEM_MASK = $7FFF0000;
+ MTEXT_SYSTEM_DEFAULT = $80000000; // Use default option -- just nothing system is used :)
+
+ // text object flags
+ MTEXT_FLG_CHAR = $00000000;
+ MTEXT_FLG_WCHAR = $00000001;
+ MTEXT_FLG_BIDI_RTL = $00000002;
+
+// used in MS_TEXT_CREATEEX
+type
+ PMTEXTCREATE = ^TMTEXTCREATE;
+ TMTEXTCREATE = record
+ cbSize :dword;
+ hContact:TMCONTACT;
+ text :TChar; // this is 'char *' or 'WCHAR *'
+ flags :dword;
+ end;
+
+// used in MS_TEXT_MEASURE and MS_TEXT_DISPLAY
+type
+ PMTEXTDISPLAY = ^TMTEXTDISPLAY;
+ TMTEXTDISPLAY = record
+ cbSize:dword;
+ dc :HDC;
+ pos :TPOINT;
+ sz :TSIZE;
+ text :THANDLE;
+ end;
+
+// used in MS_TEXT_SETPARENT
+type
+ PMTEXTSETPARENT = ^TMTEXTSETPARENT;
+ TMTEXTSETPARENT = record
+ text:THANDLE;
+ hwnd:HWND;
+ rc :TRECT;
+ end;
+
+// used in MS_TEXT_SENDMESSAGE
+type
+ PMTEXTMESSAGE = ^TMTEXTMESSAGE;
+ TMTEXTMESSAGE = record
+ hwnd :HWND;
+ text :THANDLE;
+ msg :uint;
+ wParam:WPARAM;
+ lParam:LPARAM;
+ end;
+
+const
+//---------------------------------------------------------------------------
+// deprecatet service and helper functions
+// replaced by new mtext interface !!!!!!!
+//---------------------------------------------------------------------------
+
+// subscribe to MText services
+// wParam = (WPARAM)(DOWRD)defaultOptions
+// lParam = (LPARAM)(char *)userTitle
+// result = (LRESULT)(HANDLE)userHandle
+ MS_TEXT_REGISTER:PAnsiChar = 'MText/Register';
+
+// allocate text object (unicode)
+// wParam = (WPARAM)(HANDLE)userHandle
+// lParam = (LPARAM)(WCHAR *)text
+// result = (LRESULT)(HANDLE)textHandle
+ MS_TEXT_CREATEW:PAnsiChar = 'MText/CreateW';
+
+// allocate text object (advanced)
+// wParam = (WPARAM)(HANDLE)userHandle
+// lParam = (LPARAM)(LPMTEXTCREATE)createInfo
+// result = (LRESULT)(HANDLE)textHandle
+ MS_TEXT_CREATEEX:PAnsiChar = 'MText/CreateEx';
+
+(*
+__inline HANDLE MTextCreateEx(HANDLE userHandle, HANDLE hContact, void *text, DWORD flags)
+{
+ #ifdef __cplusplus
+ MTEXTCREATE textCreate;
+ #else
+ MTEXTCREATE textCreate = {0};
+ textCreate.cbSize = sizeof(textCreate);
+ #endif
+ textCreate.hContact = hContact;
+ textCreate.text = text;
+ textCreate.flags = flags;
+ return (HANDLE)CallService(MS_TEXT_CREATEEX, (WPARAM)userHandle, (LPARAM)&textCreate);
+}
+*)
+
+// measure text object
+// wParam = (LPARAM)(LPMTEXTDISPLAY)displayInfo
+// result = 1 (success), 0 (failure)
+// displayInfo->size.cx is interpreted as maximum width allowed.
+// wrapped text size is stored in displayInfo->size, text
+ MS_TEXT_MEASURE:PAnsiChar = 'MText/Measure';
+
+(*
+__inline int MTextMeasure(HDC dc, SIZE *sz, HANDLE text)
+{
+ #ifdef __cplusplus
+ MTEXTDISPLAY displayInfo;
+ #else
+ MTEXTDISPLAY displayInfo = {0};
+ displayInfo.cbSize = sizeof(displayInfo);
+ #endif
+ displayInfo.dc = dc;
+ displayInfo.pos.x = displayInfo.pos.y = 0;
+ displayInfo.sz = *sz;
+ displayInfo.text = text;
+ int result = (int)CallService(MS_TEXT_MEASURE, (WPARAM)&displayInfo, 0);
+ *sz = displayInfo.sz;
+ return result;
+}
+*)
+
+// display text object
+// wParam = (LPARAM)(LPMTEXTDISPLAY)displayInfo
+// result = 1 (success), 0 (failure)
+ MS_TEXT_DISPLAY:PAnsiChar = 'MText/Display';
+
+(*
+__inline int MTextDisplay(HDC dc, POINT pos, SIZE sz, HANDLE text)
+{
+ #ifdef __cplusplus
+ MTEXTDISPLAY displayInfo;
+ #else
+ MTEXTDISPLAY displayInfo = {0};
+ displayInfo.cbSize = sizeof(displayInfo);
+ #endif
+ displayInfo.dc = dc;
+ displayInfo.pos = pos;
+ displayInfo.sz = sz;
+ displayInfo.text = text;
+ return (int)CallService(MS_TEXT_DISPLAY, (WPARAM)&displayInfo, 0);
+}
+*)
+
+// set parent window for text object (this is required for mouse handling, etc)
+// wParam = (WPARAM)(LPMTEXTSETPARENT)info
+// result = message result
+ MS_TEXT_SETPARENT:PAnsiChar = 'MText/SetParent';
+
+(*
+__inline int MTextSetParent(HANDLE text, HWND hwnd, RECT rect)
+{
+ MTEXTSETPARENT info;
+ info.text = text;
+ info.hwnd = hwnd;
+ info.rc = rect;
+ return (int)CallService(MS_TEXT_SETPARENT, (WPARAM)&info, 0);
+}
+*)
+
+// send message to an object
+// wParam = (WPARAM)(LPMTEXTMESSAGE)message
+// result = message result
+ MS_TEXT_SENDMESSAGE:PAnsiChar = 'MText/SendMessage';
+
+(*
+__inline int MTextSendMessage(HWND hwnd, HANDLE text, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ #ifdef __cplusplus
+ MTEXTMESSAGE message;
+ #else
+ MTEXTMESSAGE message = {0};
+ #endif
+ message.hwnd = hwnd;
+ message.text = text;
+ message.msg = msg;
+ message.wParam = wParam;
+ message.lParam = lParam;
+ return (int)CallService(MS_TEXT_SENDMESSAGE, (WPARAM)&message, 0);
+}
+*)
+
+// create a proxy window
+// wParam = (LPARAM)(HANDLE)textHandle
+ MS_TEXT_CREATEPROXY:PAnsiChar = 'MText/CreateProxy';
+
+
+// destroy text object
+// wParam = (LPARAM)(HANDLE)textHandle
+ MS_TEXT_DESTROY:PAnsiChar = 'MText/Destroy';
+
+
+// MS_TEXT_QDISPLAY :PAnsiChar = 'MText/QDisplay';
+// MS_TEXT_QDISPLAYW:PAnsiChar = 'MText/QDisplayW';
+
+{$ENDIF}
|