Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.04;
Скачать: [xml.tar.bz2];




Вниз

Можно ли создать своё окошко для подсказки (hint) и если да, то как? 


Andrey007   (2002-03-25 10:29) [0]

Нужно выводить некую информацию в окошке как у hint"a. Можно ли это сделать и если да, то как?



-=CrazyFish=-   (2002-03-25 10:42) [1]

Вешай обработчик на Application.OnHint и выводи свои собственные хинты.



Andrey007   (2002-03-25 10:48) [2]

А как это окошко создать?



Виктор Щербаков   (2002-03-25 11:45) [3]

Override THintWindow to customize the window that appears automatically for controls with their ShowHint property set to True. After overriding THintWindow to create a new derived type, assign the new type to the global HintWindowClass variable at application startup, so that the new hint window type is used for Help Hints.

Влом переводить :)



Andrey007   (2002-03-25 11:57) [4]

А-а, теперь я понял, что я неправильно вопрос задал. Я хочу высвечивать hint при движении мыши по ListBox"у. Если использовать обычный TListBox.Hint, то он располагает левый верхний угол hint"а в точку мышиного курсора. А мне надо чтобы hint загораживал надпись в TListBox"e и продолжался за его пределами. TListBox лежит на TTabSheet и TListBox.Align=alClient. Когда я рисую текст hint"a на канве TListBox, то, естественно, подсказка не может быть длиннее самого TListBox, а когда я рисую на канве PageControl"a, то TListBox загораживает эту надпись, то есть получается, что я пишу под TListBox"ом. Поэтому я хочу создавать своё окошко hint"a. Если же я переопределю ThintWindow, то легче мне от этого не станет, поскольку располагать это окошко в нужном месте я всё равно не умею. Кроме того, поскольку перерисовку этого окошка я осуществляю по TListBox.OnMouseMove, я уже проверил, что не каждая строчка почему-то высвечивается в hint"e. Поэтому мне нужно своё окошко для hint"a.



cdaDMITRIY   (2002-03-25 12:26) [5]

RE : The WORK ---> cdaDMITRIY .

http://delphi.vitpc.com/treasury/hintlistbox.htm


Автор Агранович Олег,
дата публикации 19 марта 2002г.

При движении по списку TListBox содержимое каждой строки показывается с помощью Hint-а. Код поддерживает обработку нескольких TListBox на форме.

{Вставляем в раздел public вашей формы:}

procedure ShowHint (var HintStr: string;
var CanShow: Boolean; var HintInfo: THintInfo);

{Вставляем где нибудь после implementation:}

procedure TForm1.ShowHint (var HintStr: string;
var CanShow: Boolean; var HintInfo: THintInfo);
var
ListRect,a: TRect;
begin
with HintInfo do
begin
{Здесь необходимо указать все ListBox на вашей форме, например в
этом случае это ListBox1 и ListBox2}
if (HintControl = ListBox1)or(HintControl = ListBox2) then
with HintControl as TListBox do
begin
if (ItemAtPos(CursorPos,true)<>-1)and
(Canvas.TextWidth(items.Strings[ItemAtPos(CursorPos,true)]) >
ItemRect(ItemAtPos(CursorPos,true)).Right-2)then
begin
HintStr := items.Strings[ItemAtPos(CursorPos,true)];
ListRect := ClientRect;
ListRect.Top := ListRect.Top + (ItemAtPos(CursorPos,true)-TopIndex)*ItemHeight;
ListRect.Bottom := ListRect.Top + ItemHeight;
CursorRect := ListRect;
GetWindowRect(Handle,a);
HintInfo.HintPos:=Point(ListRect.Left+a.Left+1,ListRect.Top+a.Top-1);
end;
end;
end;
end;

{В обработчике FormShow формы прописываем:}
Application.OnShowHint := ShowHint;
Application.HintHidePause:=5000; //Время которое будет держаться Hint.
Application.HintPause:=300; //Время перед появлением Hint"а.

{В обработчике FormHide формы прописываем:}
Application.HintHidePause:=2500;
Application.HintPause:=500;

Во всех ListBox"ах устанавливаем свойсто ShowHint в True
Агранович Олег




Andrey007   (2002-03-25 12:57) [6]

Спасибо!



cdaDMITRIY   (2002-03-25 13:55) [7]

RE : The WORK ---> cdaDMITRIY .

http://delphi.vitpc.com/treasury/hintlistbox.htm


Автор Агранович Олег,
дата публикации 19 марта 2002г.

При движении по списку TListBox содержимое каждой строки показывается с помощью Hint-а. Код поддерживает обработку нескольких TListBox на форме.

{Вставляем в раздел public вашей формы:}

procedure ShowHint (var HintStr: string;
var CanShow: Boolean; var HintInfo: THintInfo);

{Вставляем где нибудь после implementation:}

procedure TForm1.ShowHint (var HintStr: string;
var CanShow: Boolean; var HintInfo: THintInfo);
var
ListRect,a: TRect;
begin
with HintInfo do
begin
{Здесь необходимо указать все ListBox на вашей форме, например в
этом случае это ListBox1 и ListBox2}
if (HintControl = ListBox1)or(HintControl = ListBox2) then
with HintControl as TListBox do
begin
if (ItemAtPos(CursorPos,true)<>-1)and
(Canvas.TextWidth(items.Strings[ItemAtPos(CursorPos,true)]) >
ItemRect(ItemAtPos(CursorPos,true)).Right-2)then
begin
HintStr := items.Strings[ItemAtPos(CursorPos,true)];
ListRect := ClientRect;
ListRect.Top := ListRect.Top + (ItemAtPos(CursorPos,true)-TopIndex)*ItemHeight;
ListRect.Bottom := ListRect.Top + ItemHeight;
CursorRect := ListRect;
GetWindowRect(Handle,a);
HintInfo.HintPos:=Point(ListRect.Left+a.Left+1,ListRect.Top+a.Top-1);
end;
end;
end;
end;

{В обработчике FormShow формы прописываем:}
Application.OnShowHint := ShowHint;
Application.HintHidePause:=5000; //Время которое будет держаться Hint.
Application.HintPause:=300; //Время перед появлением Hint"а.

{В обработчике FormHide формы прописываем:}
Application.HintHidePause:=2500;
Application.HintPause:=500;

Во всех ListBox"ах устанавливаем свойсто ShowHint в True
Агранович Олег





Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.04;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.74 MB
Время: 0.016 c
7-9657            Самый главный Ламер   2001-12-30 18:12  2002.04.04  
Чтение из COM - порта и установка таймаутов.


3-9406            Tanya_                2002-03-12 19:47  2002.04.04  
ApplyUpdate и связь master-detail


1-9546            SemenK                2002-03-24 11:05  2002.04.04  
КАК СОЗДАТЬ ФОРМУ ОТПРАВКИ ПИСЬМА ?


14-9633           Neox                  2002-02-23 11:45  2002.04.04  
Delphi6 Help


6-9593            Андре                 2002-01-18 13:20  2002.04.04  
Ведение log файла.