Вверх ↑
Этот топик читают: Гость
Ответов: 249
Рейтинг: 4
#1: 2022-07-08 10:59:15 ЛС | профиль | цитата
Не как не соображу как добавить подсказку к заголовкам столбов.


Add(MainForm,2953706,154,91)
{
Width=366
Height=296
}
Add(MTStrTbl,8679275,266,161)
{
Left=20
Top=10
Width=315
Height=240
Name="tt"
Columns=#1:1|1:2|1:3|1:4|
}
Add(StyleXP,3193399,154,56)
{
}

карма: 1

0
Ответов: 783
Рейтинг: 168
#2: 2022-07-08 20:36:39 ЛС | профиль | цитата
ric писал(а):
как добавить подсказку к заголовкам столбов

Вот пример. При клике по заголовку столбца появится подсказка.

Add(MTStrTbl,8679275,119,168)
{
Left=20
Top=10
Width=315
Height=240
Name="tt"
Columns=#1:1|1:2|1:3|1:4|
ColumnClick=1
Point(Handle)
link(onColumnClick,5683803:doEvent1,[])
}
Add(StyleXP,3193399,119,119)
{
}
Add(BaloonToolTips,6223352,413,161)
{
Mode=1
link(Handle,6800013:Handle,[(419,103)(447,103)])
link(Point,2141492:Point,[])
}
Add(StrList,4354825,231,154)
{
Strings=#11:1 - столбец|11:2 - столбец|11:3 - столбец|11:4 - столбец|
Point(doGetString)
Point(onGetString)
Point(String)
link(onGetString,7201183:doEvent1,[])
}
Add(Timer,16274757,329,175)
{
Interval=100
Enable=1
AutoStop=20
Point(onStop)
link(onTimer,6223352:doShow,[])
link(onStop,13662369:doWork3,[(375,188)])
}
Add(Hub,7201183,287,161)
{
link(onEvent1,6223352:doCreate,[])
link(onEvent2,16274757:doTimer,[(312,174)(312,181)])
}
Add(MouseEvent,6800013,427,49)
{
Point(Handle)
}
Add(PointXY,2141492,427,112)
{
link(X,6800013:MouseX,[])
link(Y,6800013:MouseY,[])
}
Add(Hub,5683803,175,175)
{
link(onEvent1,13662369:doWork1,[(200,181)(200,146)(375,146)])
link(onEvent2,4354825:doGetString,[])
}
Add(HubEx,13662369,371,168)
{
link(onEvent,6223352:doDestroy,[])
}

карма: 15

0
Ответов: 249
Рейтинг: 4
#3: 2022-07-11 14:09:00 ЛС | профиль | цитата
Gunta писал(а):


Да это не совсем то, при клике выполняется действие а при наведении надо описание действия показать.

Редактировалось 2 раз(а), последний 2022-07-11 14:09:25
карма: 1

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#4: 2022-07-11 16:45:31 ЛС | профиль | цитата
ric писал(а):
а при наведении надо описание действия показать.

Определение местоположения мыша на заголовке таблицы не реализовано, тк это довольно непростая задача, в силу того, что заголовок таблицы это сопутсвующий контрол, не имеющий с нашими контролами никакой связи. Если бы это было просто реализовать, то это давно было бы реализовано. Я пока даже не знаю, можно ли это вообще реализовать.

Редактировалось 2 раз(а), последний 2022-07-11 16:47:08
карма: 22

0
Ответов: 249
Рейтинг: 4
#5: 2022-07-11 17:12:41 ЛС | профиль | цитата
nesco все понятно, вопросов нет.
карма: 1

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#6: 2022-07-12 00:31:26 ЛС | профиль | цитата
Я еще поюзаю эту тему, может чего и получится, но не обещаю.
карма: 22

0
Ответов: 263
Рейтинг: 18
#7: 2022-07-12 05:22:02 ЛС | профиль | цитата
nesco писал(а):
Я еще поюзаю эту тему, может чего и получится, но не обещаю.


Если еще правый клик мышью удастся перехватить (для контекстного меню столбца), будет вообще здорово!
карма: 3

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#8: 2022-07-12 11:06:24 ЛС | профиль | цитата
fox-video писал(а):
Если еще правый клик мышью удастся перехватить (для контекстного меню столбца), будет вообще здорово!

Думаю, что можно будет сделать, но это пока будет IC, а не компонент.
карма: 22

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#9: 2022-07-12 19:27:29 ЛС | профиль | цитата
Вот что получилось. Как говорится -- тестовый прототип

Схема

Add(MainForm,2887726,525,329)
{
Position=1
Point(PHandle)
link(onCreate,13943538:doInitSubClass,[])
}
Add(InlineCode,13943538,616,343)
{
WorkPoints=#14:doInitSubClass|
EventPoints=#36:onHDMouseDown=ARG(MouseCode,ItemIdx)|14:onHDMouseEnter|14:onHDMouseLeave|
DataPoints=#7:pHandle|8:HintList|8:Tracking|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|40:uses Windows, Messages, kol,Share,Debug;|0:|5:const|28: HDM_HITTEST = $00001206;|28: HHT_ONHEADER = $00000002;|28: HHT_ONDIVIDER = $00000004;|28: HHT_ONDIVOPEN = $00000008;|0:|0:|30: TTDT_AUTOMATIC = 0;|30: TTDT_RESHOW = 1;|30: TTDT_AUTOPOP = 2;|32: TTDT_INITIAL = 3; |0:|4:type|35: PHDHitTestInfo = ^THDHitTestInfo;|32: THDHitTestInfo = packed record|18: Point: TPoint;|20: Flags: Cardinal;|18: Item: Integer;|6: end;|34: HD_HITTESTINFO = THDHITTESTINFO;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|19: onHDMouseDown,|20: onHDMouseEnter,|20: onHDMouseLeave,|13: pHandle,|14: HintList,|25: Tracking: THI_Event;|21: constructor Create;|34: destructor Destroy; override;|59: procedure doInitSubClass(var _Data:TData; Index:word);|5: end;|0:|14:implementation|0:|116: function TrackMouseEvent(var EventTrack: TTrackMouseEvent): BOOL; stdcall; external user32 name 'TrackMouseEvent';|0:|4:type|23: UINT_PTR = Cardinal;|23: DWORD_PTR = Cardinal;|0:|141: TSubClassProc = function (hWnd:HWND; uMsg:UINT; wParam:WPARAM; lParam:LPARAM; uIdSubclass:UINT_PTR; dwRefData:DWORD_PTR) :LRESULT; stdcall;|5:const|28: cctrl = Windows.comctl32;|0:|3:var|21: Header: HWND = 0; |21: fTThwnd: HWND = 0; |33: t_MouseEvent: TTrackMouseEvent;|34: InitMouseEvent: boolean = false;|16: ti: TTOOLINFO;|22: pHintList: PStrList;|24: CurItem: integer = -2;|0:|178:function SetWindowSubclass (hWnd: Windows.HWND; pfnSubclass: TSubClassProc; uIdSubclass: UINT_PTR; dwRefData: DWORD_PTR):BOOL; stdcall; external cctrl name 'SetWindowSubclass';|181:function RemoveWindowSubclass(hWnd: Windows.HWND; pfnSubclass: TSubClassProc; uIdSubclass: UINT_PTR):BOOL; stdcall; external cctrl name 'RemoveWindowSubclass';|176:function DefSubclassProc (hWnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM):LRESULT; stdcall; external cctrl name 'DefSubclassProc';|0:|145:function sws_HeaderWndProc(hWnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM; uIdSubclass: UINT_PTR; dwRefData: DWORD_PTR):LRESULT; stdcall;|3:var|23: MyClass: THiAsmClass;|13: pt: TPoint;|32: HDHitTestInfo: THDHitTestInfo;|16: dc, di: TData;|5:begin|37: MyClass := THiAsmClass(dwRefData); |56: Result := DefSubclassProc(hWnd, uMsg, wParam, lParam);|14: case uMsg of|17: WM_MOUSEMOVE:|9: begin|29: if not InitMouseEvent then|8: begin|56: t_MouseEvent.cbSize := SizeOf(TTrackMouseEvent);|42: t_MouseEvent.dwFlags := TME_HOVER;|41: t_MouseEvent.hwndTrack := Header;|40: t_MouseEvent.dwHoverTime := 100;|38: TrackMouseEvent(t_MouseEvent);|31: InitMouseEvent := true;|10: end;|29: pt.X := LoWord(lParam);|30: pt.Y := HiWord(lParam); |32: HDHitTestInfo.Point := pt;|31: HDHitTestInfo.flags := 0;|67: Sendmessage(hWnd, HDM_HITTEST, 0, DWORD_PTR(@HDHitTestInfo));|49: if HDHitTestInfo.flags <> HHT_ONHEADER then|33: HDHitTestInfo.Item := -1;|41: if HDHitTestInfo.Item <> CurItem then |11: begin|66: ti.lpszText := PChar(pHintList.Items[HDHitTestInfo.Item]);|67: SendMessage(fTThwnd, TTM_UPDATETIPTEXT, 0, dword_ptr(@ti));|39: CurItem := HDHitTestInfo.Item; |10: end;|52: if (ToIntegerEvent(MyClass.Tracking) = 1) then|75: SendMessage(fTThwnd, TTM_TRACKPOSITION, 0, MAKELPARAM(pt.X, pt.Y));|65: SendMessage(fTThwnd, TTM_TRACKACTIVATE, 1, dword_ptr(@ti));|8: end;|51: WM_LBUTTONDOWN, WM_RBUTTONDOWN, WM_MBUTTONDOWN:|6: begin|39: if (wParam = 1) or (wParam = 2) then|33: dtInteger(dc, wParam - 1)|30: else if wParam = 16 then|24: dtInteger(dc, 2)|7: else|7: exit;|29: pt.X := LoWord(lParam);|30: pt.Y := HiWord(lParam); |32: HDHitTestInfo.Point := pt;|42: HDHitTestInfo.flags := HHT_ONHEADER;|67: Sendmessage(hWnd, HDM_HITTEST, 0, dword_ptr(@HDHitTestInfo));|40: dtInteger(di, HDHitTestInfo.Item);|19: dc.ldata := @di;|45: _hi_onEvent_(MyClass.onHDMouseDown, dc)|5: end;|18: WM_MOUSEHOVER:|6: begin|40: t_MouseEvent.dwFlags := TME_LEAVE;|42: _hi_onEvent(MyClass.onHDMouseEnter);|5: end;|18: WM_MOUSELEAVE:|6: begin|65: SendMessage(fTThwnd, TTM_TRACKACTIVATE, 0, dword_ptr(@ti));|30: InitMouseEvent := false;|42: _hi_onEvent(MyClass.onHDMouseLeave);|5: end;|6: end;|4:end;|0:|31:constructor THiAsmClass.Create;|5:begin|12: inherited;|26: pHintList := NewStrList;|4:end;|0:|31:destructor THiAsmClass.Destroy;|5:begin|17: pHintList.free;|21: if Header <> 0 then|56: RemoveWindowSubclass(Header, @sws_HeaderWndProc, 1);|22: if fTThwnd <> 0 then|7: begin|57: SendMessage(fTThwnd, TTM_DELTOOL, 0, dword_ptr(@ti));|27: DestroyWindow(fTThwnd);|6: end;|12: inherited;|4:end;|0:|37:procedure THiAsmClass.doInitSubClass;|3:var|21: sControl: PControl;|28: Buf: array [Byte] of Char;|5:begin|48: sControl := PControl(ToIntegerEvent(pHandle));|38: if not Assigned(sControl) then exit;|59: GetClassName(sControl.GetWindowHandle, Buf, sizeof(Buf));|42: if Buf <> 'obj_SysListView32' then exit;|0:|52: pHintList.SetText(ToStringEvent(HintList), false);|50: Header := sControl.Perform(LVM_GETHEADER, 0, 0);|38: FillChar(ti, sizeof(TTOOLINFO), #0);|33: ti.cbSize := sizeof(TTOOLINFO);|63: ti.uFlags := TTF_SUBCLASS or TTF_IDISHWND or TTF_TRANSPARENT;|20: ti.hwnd := Header;|16: ti.hinst := 0;|20: ti.uId := Header; |0:|106: fTThwnd := CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASS, nil, TTS_NOPREFIX or TTS_ALWAYSTIP or WS_POPUP,|108: integer(CW_USEDEFAULT), integer(CW_USEDEFAULT), integer(CW_USEDEFAULT), integer(CW_USEDEFAULT),|41: Header, 0, hInstance, nil );|0:|94: SetWindowPos(fTThwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE);|55: SendMessage(fTThwnd, TTM_ADDTOOL, 0, dword_ptr(@ti));|61: SendMessage(fTThwnd, TTM_SETDELAYTIME, TTDT_AUTOMATIC, -1);|81: SetWindowSubclass(Header, @sws_HeaderWndProc, 1, dword_ptr(THiAsmClass(Self)));|4:end;|0:|4:end.|
link(onHDMouseDown,12301008:doEvent,[])
link(pHandle,13232672:PHandle,[])
link(HintList,13015242:Text,[(629,243)(650,243)])
link(Tracking,4930132:State,[(636,320)(650,320)])
}
Add(MTStrTbl,13232672,588,196)
{
Width=384
Height=185
Align=2
Columns=#3:111|3:222|3:333|
Point(PHandle)
Point(onMouseDown)
}
Add(StyleXP,2894046,525,196)
{
}
Add(PopupMenu,2558660,805,357)
{
@Hint=#91:Тестовый вызов меню над пустым полем заголовка. Можно вывести над любым элементом заголовка|
Menu=#6:Test_1|6:Test_2|6:Test_3|
AddHint(41,-46,199,39,@Hint)
}
Add(StrList,13015242,644,203)
{
@Hint=#121:Список хинтов для каждого элемента заголовка. При отсутствии хинта с нужным индексом хинт над элементом выводится не будет|
Strings=#24:Первый элемент заголовка|24:Второй элемент заголовка|24:Третий элемент заголовка|
AddHint(50,30,193,52,@Hint)
}
Add(Case,4367113,749,350)
{
Value=Integer(-1)
link(onTrue,2558660:doPopupHere,[])
}
Add(MT_IndexToChanel,12301008,693,343)
{
link(onEvent2,4367113:doCase,[])
}
Add(Button,6878611,525,294)
{
Left=25
Top=205
Width=90
TabOrder=-1
Caption="Tracking On"
link(onClick,4930132:doOn,[])
}
Add(Button,7495608,525,252)
{
Left=120
Top=205
Width=90
TabOrder=-1
Caption="Tracking Off"
link(onClick,4930132:doReset,[(634,258)(634,293)])
}
Add(Switch,4930132,644,280)
{
@Hint=#20:Управление трекингом|
DataOn=Integer(1)
DataOff=Integer(0)
Default=0
Point(State)
Point(doOn)
AddHint(40,37,134,13,@Hint)
}


Редактировалось 3 раз(а), последний 2022-07-12 19:30:45
карма: 22

1
Голосовали:fox-video
Ответов: 263
Рейтинг: 18
#10: 2022-07-12 19:39:12 ЛС | профиль | цитата
nesco писал(а):
Вот что получилось


Отлично, то что нужно!
карма: 3

0
Ответов: 2236
Рейтинг: 676
#11: 2022-07-12 20:55:40 ЛС | профиль | цитата
nesco, а если это убрать, разве не будет лучше?
//  if (ToIntegerEvent(MyClass.Tracking) = 1) then
// SendMessage(fTThwnd, TTM_TRACKPOSITION, 0, MAKELPARAM(pt.X, pt.Y));
// SendMessage(fTThwnd, TTM_TRACKACTIVATE, 1, dword_ptr(@ti));
И без XP у меня подсказка на win10 не убирается.

Редактировалось 4 раз(а), последний 2022-07-12 21:00:24
карма: 11

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#12: 2022-07-12 21:47:59 ЛС | профиль | цитата
sla8a писал(а):
а если это убрать, разве не будет лучше?

Это трекинг, изначально и было без него. Пусть останется.
sla8a писал(а):
И без XP у меня подсказка на win10 не убирается.

Ну, это приколы MOUSELEAVE. Надо глянуть, как это лучше сделать. Не думал, что XP как-то влияет на обработку событий мыша, а оно вона как. Этот MOUSELEAVE меня уже и так положительно достал.

P.S. Кстати, чего я XP поставил. У меня, в 10-ке ни один хинт без него не работает, тупо не показывает, вот я его и поставил дефолтом.

Редактировалось 3 раз(а), последний 2022-07-12 21:54:51
карма: 22

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#13: 2022-07-12 23:58:33 ЛС | профиль | цитата
Немного поправил. Теперь вроде нормально работает без XP-стиля и вроде корректно отображает хинты при отключенном трекинге без непонятного прыгания.
Схема

Add(MainForm,2887726,245,231)
{
Position=1
Point(PHandle)
link(onCreate,13943538:doInitSubClass,[])
}
Add(InlineCode,13943538,336,245)
{
WorkPoints=#14:doInitSubClass|
EventPoints=#36:onHDMouseDown=ARG(MouseCode,ItemIdx)|
DataPoints=#7:pHandle|8:HintList|8:Tracking|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|40:uses Windows, Messages, kol,Share,Debug;|0:|5:const|28: HDM_HITTEST = $00001206;|28: HHT_ONHEADER = $00000002;|28: HHT_ONDIVIDER = $00000004;|28: HHT_ONDIVOPEN = $00000008;|0:|30: TTDT_AUTOMATIC = 0;|30: TTDT_RESHOW = 1;|30: TTDT_AUTOPOP = 2;|32: TTDT_INITIAL = 3; |0:|25: TID_POLLMOUSE = 100;|25: MOUSE_POLL_DELAY = 500;|0:|4:type|35: PHDHitTestInfo = ^THDHitTestInfo;|32: THDHitTestInfo = packed record|18: Point: TPoint;|20: Flags: Cardinal;|18: Item: Integer;|6: end;|34: HD_HITTESTINFO = THDHITTESTINFO;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|19: onHDMouseDown,|13: pHandle,|14: HintList,|25: Tracking: THI_Event;|21: constructor Create;|34: destructor Destroy; override;|59: procedure doInitSubClass(var _Data:TData; Index:word);|5: end;|0:|14:implementation|0:|116: function TrackMouseEvent(var EventTrack: TTrackMouseEvent): BOOL; stdcall; external user32 name 'TrackMouseEvent';|0:|4:type|23: UINT_PTR = Cardinal;|23: DWORD_PTR = Cardinal;|0:|141: TSubClassProc = function (hWnd:HWND; uMsg:UINT; wParam:WPARAM; lParam:LPARAM; uIdSubclass:UINT_PTR; dwRefData:DWORD_PTR) :LRESULT; stdcall;|5:const|28: cctrl = Windows.comctl32;|0:|3:var|21: Header: HWND = 0; |21: fTThwnd: HWND = 0; |33: t_MouseEvent: TTrackMouseEvent;|16: ti: TTOOLINFO;|22: pHintList: PStrList;|24: CurItem: integer = -2;|29: InitTimer: boolean = false;|0:|178:function SetWindowSubclass (hWnd: Windows.HWND; pfnSubclass: TSubClassProc; uIdSubclass: UINT_PTR; dwRefData: DWORD_PTR):BOOL; stdcall; external cctrl name 'SetWindowSubclass';|181:function RemoveWindowSubclass(hWnd: Windows.HWND; pfnSubclass: TSubClassProc; uIdSubclass: UINT_PTR):BOOL; stdcall; external cctrl name 'RemoveWindowSubclass';|176:function DefSubclassProc (hWnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM):LRESULT; stdcall; external cctrl name 'DefSubclassProc';|0:|145:function sws_HeaderWndProc(hWnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM; uIdSubclass: UINT_PTR; dwRefData: DWORD_PTR):LRESULT; stdcall;|3:var|23: MyClass: THiAsmClass;|13: pt: TPoint;|32: HDHitTestInfo: THDHitTestInfo;|16: dc, di: TData;|5:begin|37: MyClass := THiAsmClass(dwRefData); |56: Result := DefSubclassProc(hWnd, uMsg, wParam, lParam);|14: case uMsg of|17: WM_MOUSEMOVE:|9: begin|54: t_MouseEvent.cbSize := SizeOf(TTrackMouseEvent);|37: t_MouseEvent.hwndTrack := hWnd;|37: t_MouseEvent.dwHoverTime := 10;|41: t_MouseEvent.dwFlags := TME_LEAVE; |36: TrackMouseEvent(t_MouseEvent);|6: |29: pt.X := LoWord(lParam);|30: pt.Y := HiWord(lParam); |32: HDHitTestInfo.Point := pt;|31: HDHitTestInfo.flags := 0;|67: Sendmessage(hWnd, HDM_HITTEST, 0, DWORD_PTR(@HDHitTestInfo));|49: if HDHitTestInfo.flags <> HHT_ONHEADER then|33: HDHitTestInfo.Item := -1;|41: if HDHitTestInfo.Item <> CurItem then |11: begin|66: ti.lpszText := PChar(pHintList.Items[HDHitTestInfo.Item]);|67: SendMessage(fTThwnd, TTM_UPDATETIPTEXT, 0, dword_ptr(@ti));|39: CurItem := HDHitTestInfo.Item; |67: SendMessage(fTThwnd, TTM_TRACKACTIVATE, 0, dword_ptr(@ti));|21: InitTimer := false;|10: end;|52: if (ToIntegerEvent(MyClass.Tracking) = 1) then|75: SendMessage(fTThwnd, TTM_TRACKPOSITION, 0, MAKELPARAM(pt.X, pt.Y));|24: if not InitTimer then|8: begin|61: SetTimer(hWnd, TID_POLLMOUSE, MOUSE_POLL_DELAY, nil);|20: InitTimer := true;|7: end;|5: end;|13: WM_TIMER:|9: begin|65: SendMessage(fTThwnd, TTM_TRACKACTIVATE, 1, dword_ptr(@ti));|37: KillTimer(hWnd, TID_POLLMOUSE);|25: InitTimer := false;|8: end;|51: WM_LBUTTONDOWN, WM_RBUTTONDOWN, WM_MBUTTONDOWN:|6: begin|39: if (wParam = 1) or (wParam = 2) then|33: dtInteger(dc, wParam - 1)|30: else if wParam = 16 then|24: dtInteger(dc, 2)|7: else|7: exit;|29: pt.X := LoWord(lParam);|30: pt.Y := HiWord(lParam); |32: HDHitTestInfo.Point := pt;|42: HDHitTestInfo.flags := HHT_ONHEADER;|67: Sendmessage(hWnd, HDM_HITTEST, 0, dword_ptr(@HDHitTestInfo));|40: dtInteger(di, HDHitTestInfo.Item);|19: dc.ldata := @di;|45: _hi_onEvent_(MyClass.onHDMouseDown, dc)|5: end;|18: WM_MOUSELEAVE:|6: begin|65: SendMessage(fTThwnd, TTM_TRACKACTIVATE, 0, dword_ptr(@ti));|37: KillTimer(hWnd, TID_POLLMOUSE);|25: InitTimer := false;|5: end;|6: end;|4:end;|0:|31:constructor THiAsmClass.Create;|5:begin|12: inherited;|26: pHintList := NewStrList;|4:end;|0:|31:destructor THiAsmClass.Destroy;|5:begin|17: pHintList.free;|21: if Header <> 0 then|56: RemoveWindowSubclass(Header, @sws_HeaderWndProc, 1);|22: if fTThwnd <> 0 then|7: begin|57: SendMessage(fTThwnd, TTM_DELTOOL, 0, dword_ptr(@ti));|27: DestroyWindow(fTThwnd);|6: end;|12: inherited;|4:end;|0:|37:procedure THiAsmClass.doInitSubClass;|3:var|21: sControl: PControl;|28: Buf: array [Byte] of Char;|5:begin|48: sControl := PControl(ToIntegerEvent(pHandle));|38: if not Assigned(sControl) then exit;|59: GetClassName(sControl.GetWindowHandle, Buf, sizeof(Buf));|42: if Buf <> 'obj_SysListView32' then exit;|0:|52: pHintList.SetText(ToStringEvent(HintList), false);|50: Header := sControl.Perform(LVM_GETHEADER, 0, 0);|38: FillChar(ti, sizeof(TTOOLINFO), #0);|33: ti.cbSize := sizeof(TTOOLINFO);|63: ti.uFlags := TTF_SUBCLASS or TTF_IDISHWND or TTF_TRANSPARENT;|20: ti.hwnd := Header;|16: ti.hinst := 0;|20: ti.uId := Header; |0:|106: fTThwnd := CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASS, nil, TTS_NOPREFIX or TTS_ALWAYSTIP or WS_POPUP,|108: integer(CW_USEDEFAULT), integer(CW_USEDEFAULT), integer(CW_USEDEFAULT), integer(CW_USEDEFAULT),|41: Header, 0, hInstance, nil );|0:|94: SetWindowPos(fTThwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE);|55: SendMessage(fTThwnd, TTM_ADDTOOL, 0, dword_ptr(@ti));|63:// SendMessage(fTThwnd, TTM_SETDELAYTIME, TTDT_AUTOMATIC, -1);|81: SetWindowSubclass(Header, @sws_HeaderWndProc, 1, dword_ptr(THiAsmClass(Self)));|4:end;|0:|4:end.|
link(onHDMouseDown,12301008:doEvent,[])
link(pHandle,13232672:PHandle,[])
link(HintList,13015242:Text,[(349,145)(370,145)])
link(Tracking,4930132:State,[(356,222)(370,222)])
}
Add(MTStrTbl,13232672,308,98)
{
Width=384
Height=185
Align=2
Columns=#3:111|3:222|3:333|
Point(PHandle)
Point(onMouseDown)
}
Add(PopupMenu,2558660,525,259)
{
@Hint=#91:Тестовый вызов меню над пустым полем заголовка. Можно вывести над любым элементом заголовка|
Menu=#6:Test_1|6:Test_2|6:Test_3|
AddHint(41,-46,199,39,@Hint)
}
Add(StrList,13015242,364,105)
{
@Hint=#121:Список хинтов для каждого элемента заголовка. При отсутствии хинта с нужным индексом хинт над элементом выводится не буде|0:|
Strings=#24:Первый элемент заголовка|24:Второй элемент заголовка|24:Третий элемент заголовка|
AddHint(50,30,193,52,@Hint)
}
Add(Case,4367113,469,252)
{
Value=Integer(-1)
link(onTrue,2558660:doPopupHere,[])
}
Add(MT_IndexToChanel,12301008,413,245)
{
link(onEvent2,4367113:doCase,[])
}
Add(Button,6878611,245,196)
{
Left=25
Top=205
Width=90
TabOrder=-1
Caption="Tracking On"
link(onClick,4930132:doOn,[])
}
Add(Button,7495608,245,154)
{
Left=120
Top=205
Width=90
TabOrder=-1
Caption="Tracking Off"
link(onClick,4930132:doReset,[(354,160)(354,195)])
}
Add(Switch,4930132,364,182)
{
@Hint=#20:Управление трекингом|
DataOn=Integer(1)
DataOff=Integer(0)
Default=0
Point(State)
Point(doOn)
AddHint(40,37,134,13,@Hint)
}


Редактировалось 1 раз(а), последний 2022-07-12 23:59:14
карма: 22

0
Ответов: 263
Рейтинг: 18
#14: 2022-07-13 08:56:42 ЛС | профиль | цитата
На Windows 10 всё отлично работает, и с ХР и без него.
карма: 3

0
Ответов: 249
Рейтинг: 4
#15: 2022-07-13 13:40:17 ЛС | профиль | цитата
А IC завернуть в компонент нельзя? и добавить в палитру строковая таблица МТ как расширение для вывода хинтов и контекста мыша для столбов.
карма: 1

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)