Форум: "WinAPI";
Текущий архив: 2004.11.21;
Скачать: [xml.tar.bz2];
ВнизПодсказки на ToolBar Найти похожие ветки
← →
Comp © (2004-10-11 16:36) [0]Здравствуйте, уважаемые мастера. Разрешите задать вам такой вопрос. Я создал 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"), но только с нулевыми координатами (в левом верхнем углу экрана). И висит постоянно. А это далеко не то, что нужно.
Что еще не хватает?
Подскажите пожалуйста. Буду благодарен за любой ответ.
← →
DVM © (2004-10-11 17:04) [1]Посмотри вот тут небольшой пример. Там усе работает.
Вообще то ты неправильно обрабатываешь WM_NOTIFY. Точнее не совсем.
http://www.ict.nsc.ru/~cancel/delphi/files/?act=d&id=3
← →
Comp © (2004-10-11 17:15) [2]DVM © (11.10.04 17:04) [1]
СПАСИБО ОГРОМНОЕ!
ТЕПЕРЬ РАЗБЕРУСЬ, ЧТО К ЧЕМУ.
← →
XProger © (2004-10-11 17:19) [3]Извини что не по вопросу, но где находится процедур CreateToolbarEx? Неужели чистый Win API?
← →
Comp © (2004-10-11 17:27) [4]В заключение:
Кое-какую инфу по тулбарам я еще откопал на MSDN
http://msdn.microsoft.com/library/en-us/shellcc/platform/commctls/toolbar/toolbar_using.asp
> XProger ©
Да, так тоже можно создавать тулбар - даже немного проще.Это API. Модуль СommСtrl.pas
← →
Comp © (2004-10-11 19:26) [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;
Народ, мастера всемиуважаемые, подскажите, почему такая ерунда? Ведь в примерах все делают - хендл окна указывают.
А все остальное в моем коде работает.
← →
Суслик © (2004-10-11 19:28) [6]Почему в точности не знаю, но могу процитировать кусок хелпа кассаемый второго параметра
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:31) [7]
> Суслик © (11.10.04 19:28) [6]
0 - GetMessage ИЗВЛЕКАЕТ сообщения для любого окна, которое принадлежит разговору резьбы и сообщений резьбы объявленным в разговор резьбы через PostThreadMessage.
Понял. Спасибо.
← →
Comp © (2004-10-11 19:38) [8]Значит, если указать хендл - обрабатывать сообщения чисто указанного окна. Если 0 - то всех.
> Суслик © (11.10.04 19:28) [6]
Спасибо еще раз.
← →
Суслик © (2004-10-11 19:44) [9]
> [8] Comp © (11.10.04 19:38)
Да не за что.
Прочел бы Рихтера (советовал тебе раньше), сам бы ответ на свой вопрос знал. Почитай 26 главу. Много полезного узнаешь.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.11.21;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.035 c