Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо