![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подсказки на ToolBar [D6, D7, WinXP]
Comp © (2004-10-11 16:36:00)Здравствуйте, уважаемые мастера. Разрешите задать вам такой вопрос. Я создал ToolBar (чисто на API). Соответственно к нему кнопки и все остальное. Но вот с подсказками (ToolTip) у меня уже неделю большая проблема.
Пишу код:
procedure ToolbarCreate;
var
i:integer;
begin
for i:=0 to 9 do
with tbButtons[i] do
begin
...
end;
Toolbar1 :=CreateToolbarEx(handle,WS_VISIBLE+WS_BORDER+TBSTYLE_TOOLTIPS,
1,1,Hinstance,105,@tbButtons,10,16,16,16,16, Sizeof(TTBButton));
TH:=SendMessage(Toolbar1,TB_GETTOOLTIPS ,0, 0);
// SendMessage(TH, TTM_TRACKACTIVATE,WPARAM(TRUE), LPARAM(@ti));
end;
procedure WndProc_OnNotify(lparametr:LongInt);
var
ppd: PTOOLTIPTEXT;
s:array[0..128] of Char;
begin
ppd:=PTOOLTIPTEXT(lParametr);
begin
if (ppd.Hdr.Code =TTN_NEEDTEXT) then
begin
ppd.lpszText:='llkkkjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj';
end;
end;
end;
function WindowProc(hWnd,Msg,wParam,lParam:Longint):Longint; stdcall;
begin
Result:=DefWindowProc(hWnd,Msg,wParam,lParam);
case Msg of
WM_COMMAND:
...
WM_CREATE:...;
WM_NOTIFY: WndProc_OnNotify(lparam);
end;
end;
...
begin
...
ToolBarCreate;
...
end;
Почему не создается ToolTip?
Переменная TH после выполнения TB_GETTOOLTIPS не пустая - я проверял. Если выполнить
SendMessage(TH, TTM_TRACKACTIVATE,WPARAM(TRUE), LPARAM(@ti));
после TB_GETTOOLTIPS - подсказка вроде как появляется ('llkkkjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj'), но только с нулевыми координатами (в левом верхнем углу экрана). И висит постоянно. А это далеко не то, что нужно.
Что еще не хватает?
Подскажите пожалуйста. Буду благодарен за любой ответ.
Суслик (2004-10-11 19:44:00) [1]
> [8] Comp © (11.10.04 19:38)
Да не за что.
Прочел бы Рихтера (советовал тебе раньше), сам бы ответ на свой вопрос знал. Почитай 26 главу. Много полезного узнаешь.
Comp (2004-10-11 19:38:00) [2]Значит, если указать хендл - обрабатывать сообщения чисто указанного окна. Если 0 - то всех.
> Суслик © (11.10.04 19:28) [6]
Спасибо еще раз.
Comp (2004-10-11 19:31:00) [3]
> Суслик © (11.10.04 19:28) [6]
0 - GetMessage ИЗВЛЕКАЕТ сообщения для любого окна, которое принадлежит разговору резьбы и сообщений резьбы объявленным в разговор резьбы через PostThreadMessage.
Понял. Спасибо.
Суслик (2004-10-11 19:28:00) [4]Почему в точности не знаю, но могу процитировать кусок хелпа кассаемый второго параметра
0 - GetMessage retrieves messages for any window that belongs to the calling thread and thread messages posted to the calling thread via PostThreadMessage.
Таким образом ты обрабатываешь сообщения всех окон.
Comp (2004-10-11 19:26:00) [5]Люди, я нашел ошибку. Твою дивизию!
Я делал:
while(GetMessage(Msg,HWnd,0,0))do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
а надо( благодаря примеру [1]);
while(GetMessage(Msg, 0,0,0))do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
Народ, мастера всемиуважаемые, подскажите, почему такая ерунда? Ведь в примерах все делают - хендл окна указывают.
А все остальное в моем коде работает.
Comp (2004-10-11 17:27:00) [6]В заключение:
Кое-какую инфу по тулбарам я еще откопал на MSDN
http://msdn.microsoft.com/library/en-us/shellcc/platform/commctls/toolbar/toolbar_using.asp
> XProger ©
Да, так тоже можно создавать тулбар - даже немного проще.Это API. Модуль СommСtrl.pas
XProger (2004-10-11 17:19:00) [7]Извини что не по вопросу, но где находится процедур CreateToolbarEx? Неужели чистый Win API?
Comp (2004-10-11 17:15:00) [8]DVM © (11.10.04 17:04) [1]
СПАСИБО ОГРОМНОЕ!
ТЕПЕРЬ РАЗБЕРУСЬ, ЧТО К ЧЕМУ.
DVM (2004-10-11 17:04:00) [9]Посмотри вот тут небольшой пример. Там усе работает.
Вообще то ты неправильно обрабатываешь WM_NOTIFY. Точнее не совсем.
http://www.ict.nsc.ru/~cancel/delphi/files/?act=d&id=3