Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.21;
Скачать: CL | DM;

Вниз

Подсказки на 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 вся ветка

Текущий архив: 2004.11.21;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.05 c
3-1098842650
piople
2004-10-27 06:04
2004.11.21
Blop поля


1-1099573511
Вася
2004-11-04 16:05
2004.11.21
Приложение без окон


14-1099639552
eukar
2004-11-05 10:25
2004.11.21
Простая школьная задачка


4-1097270355
Comp
2004-10-09 01:19
2004.11.21
Решение проблемы реализации классов на API


14-1099253398
Вопрошающий1
2004-10-31 23:09
2004.11.21
Интеграция однопольз. 1С и сторонего клиент-сервер с выписки.