Главная страница
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.382 c
1-1099640046
Topepo
2004-11-05 10:34
2004.11.21
Помогите с тестовой оболочкой, плииз!


1-1099465145
Layner
2004-11-03 09:59
2004.11.21
Как секции в TMainMenu программно отобразить в TPopupMenu?


1-1099990169
race1
2004-11-09 11:49
2004.11.21
caption


4-1097239141
Ascan
2004-10-08 16:39
2004.11.21
Как правильно минимизировать чужое окно?


6-1094837666
Victor!
2004-09-10 21:34
2004.11.21
И все-таки - как копировать по сети.