C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Всплывающее окошко
ykk
Отправлено: 20.04.2005, 12:29


Ученик-кочегар

Группа: Участник
Сообщений: 17



Ребята подскажите как сделать, чтобы при наведении мышки на какой то элемент (кнопка и т.д.) выскакивало всплывающее окошко типа Hint, только покруче какое то (но не отдельная форма).
Может компонента какая то есть. Подскажите плиз!

Заранее спасибо.
Sl@Sh
Отправлено: 20.04.2005, 15:49


Мастер участка

Группа: Участник
Сообщений: 383



Компонент glHint из набора Globus Lib. На этом сайте в загрузках кажется есть.
Rius
Отправлено: 21.04.2005, 08:07


Мастер участка

Группа: Участник
Сообщений: 321



Вот пример (паскаль), подключаешь к проекту и все.
CODE
unit HintX;
//-----------------------------------------------------------------------------

interface

uses
 Windows, Messages, Controls, Graphics, Classes;

type
 THintX = class(THintWindow)
 protected
   procedure Paint; override;
 public
   procedure ActivateHint(Rect: TRect; const  AHint: AnsiString); override;
   function CalcHintRect(MaxWidth: Integer; const AHint: string;
   AData: Pointer): TRect; override;
end;
//-----------------------------------------------------------------------------

implementation

uses Forms;

{ TIconHintX }

//-----------------------------------------------------------------------------
{-Вычисляем новый размер окошка подсказки для помещения в него иконки:-}
function THintX.CalcHintRect(MaxWidth: Integer;
const AHint: string; AData: Pointer): TRect;
begin
 Result := inherited CalcHintRect(MaxWidth, AHint, AData);
 Result.Right := (Canvas.TextWidth(AHint) + 10);
 Result.Bottom := Canvas.TextHeight('М') * 2 + 10;
//  MessageBeep(MB_OK);
end;
//-----------------------------------------------------------------------------

procedure THintX.Paint;
const
 MARGIN = 5;
var
Rect: TRect;
Styles: TFontStyles;

begin
//  inherited;
Include (Styles, fsBold);
Canvas.Font.Style := Styles;
Rect.Left := 2;
Rect.Top := 2;
Rect.Right := Width — 2;
Rect.Bottom := Canvas.TextHeight('М') + 2;
Canvas.TextRect(Rect, Rect.Left+2, Rect.Top, 'Подсказка');

Canvas.Pen.Color := clSkyBlue;
Canvas.MoveTo(2, Rect.Bottom+2);
Canvas.LineTo(Canvas.TextWidth('Подсказка') + 7,  Rect.Bottom+2);
Canvas.LineTo(Canvas.TextWidth('Подсказка') + 7, 2);

Exclude (Styles, fsBold);
Canvas.Font.Style := Styles;
Rect.Top := Rect.Bottom + 2;
Rect.Bottom := Height — 2;
Canvas.TextRect(Rect, Rect.Left+2, Rect.Top+2, Caption);

Canvas.Pen.Color := 12626353;
// Canvas.RoundRect(0,0,Width-2,Height-2,15,15);
Canvas.Rectangle(0,0,Width-2,Height-2);

//  Canvas.Draw(MARGIN, MARGIN * 5, Application.Icon);
 //рисуем рамку окошка подсказки
//  SendMessage(Handle, WM_NCPAINT, 0, 0);
end;
//-----------------------------------------------------------------------------

procedure THintX.ActivateHint(Rect: TRect; const AHint: AnsiString);
var
regn1: HRGN;
begin
inherited;
// regn1 := CreateRoundRectRgn(0,0,Width,Height,15,15);
//  SetWindowRgn(Self.Handle,regn1,true);
end;
//-----------------------------------------------------------------------------
initialization
 //связываем наш новый класс с классом окошка
 //подсказки установленным поумолчанию:
 HintWindowClass := THintX;

end.

Вернуться в Вопросы программирования в C++Builder