Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как создать собственное Hint-окно

Delphi , Синтаксис , Hint подсказки

Как создать собственное Hint-окно

Автор: Олег Кулабухов


procedure TForm1.FormCreate(Sender: TObject);
begin
  Timer1.Enabled := false;
  Panel1.Visible := false;
  Panel1.BevelInner := bvNone;
  Panel1.BevelOuter := bvNone;
  Panel1.BorderStyle := bsSingle;
  Panel1.Color := clWhite;
  Button1.Hint := 'Hint test';
end;

procedure TForm1.ShowAHint(x: integer;
  y: integer;
  Caption: string;
  Duration: LongInt);
var
  dc: hdc;
  OldFont: hFont;
  pt: TSize;
  p: pChar;
begin
  if Timer1.Enabled <> false then
    Timer1.Enabled := false;
  Timer1.Enabled := false;
  if Panel1.Visible <> false then
    Panel1.Visible := false;
  if Caption = '' then
    exit;
  Panel1.Caption := caption;
  {Get the width of the caption string}
  GetMem(p, Length(Panel1.Caption) + 1);
  StrPCopy(p, Panel1.Caption);
  dc := GetDc(Panel1.Handle);
  OldFont := SelectObject(dc, Panel1.Font.Handle);
  GetTextExtentPoint32(dc, p, Length(Panel1.Caption), pt);
  SelectObject(dc, OldFont);
  ReleaseDc(Panel1.Handle, Dc);
  FreeMem(p, Length(Panel1.Caption) + 1);
  {Position and show the panel}
  Panel1.Left := x;
  Panel1.Top := y;
  Panel1.Width := pt.cx + 6;
  Panel1.Height := pt.cy + 2;
  Panel1.Visible := true;
  {Fire off the timer to hide the panel}
  Timer1.Interval := Duration;
  Timer1.Enabled := true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if Panel1.Visible <> false then
    Panel1.Visible := false;
  Timer1.Enabled := false;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  {Let the button repaint}
  Application.ProcessMessages;
  ShowAHint(Button1.Left,
    Button1.Top + Button1.Height + 6,
    Button1.Hint,
    2000);
end;

Пример программирования на Delphi, демонстрирующий создание пользовательского окна подсказки с помощью панели управления и таймера. Процедура ShowAHint принимает четыре параметра: координаты x и y для позиционирования окна подсказки, строку заголовка и значение длительности в миллисекундах.

Рассмотрим код:

  1. В обработчике события FormCreate, таймер Timer1 отключается, а панель Panel1 становится невидимой с одиночным стилем границы.
  2. Процедура ShowAHint создает окно подсказки:
    • Она отключает таймер Timer1, если он включен.
    • Она устанавливает свойство Caption панели Panel1 в предоставленную строку заголовка.
    • Она рассчитывает ширину и высоту текста заголовка с помощью функции API GetTextExtentPoint32.
    • Она позиционирует и отображает панель Panel1 на указанных координатах x и y, с шириной равной ширине текста заголовка плюс 6 пикселей, и высотой равной высоте текста заголовка плюс 2 пикселя.
    • Она включает таймер Timer1 для скрытия окна подсказки после указанного периода времени.
  3. В обработчике события Timer1Timer, оно скрывает панель Panel1, если она видима.
  4. Обработчик события Button1Click вызывает процедуру ShowAHint с координатами кнопки и текстом подсказки в параметрах.

Чтобы создать пользовательское окно подсказки на Delphi, вы можете использовать этот пример как стартовую точку и модифицировать его для соответствия вашим конкретным потребностям. Например, вы могли изменить внешний вид панели управления или добавить дополнительную функциональность к окну подсказки.

Некоторые предложения по улучшению:

  • Вместо использования GetMem и FreeMem для выделения памяти для текста заголовка, рассмотрите использование переменной типа string.
  • Вы можете использовать встроенный тип AnsiString Delphi вместо pChar для манипуляции строками.
  • Рассмотрите добавление обработки ошибок для ситуаций, когда панель Panel1 или таймер Timer1 могут не существовать на момент запуска программы.
  • Если вы планируете поддерживать несколько окон подсказки одновременно, рассмотрите использование отдельного таймера и панели для каждого окна подсказки.

В целом, этот пример предоставляет хороший старт для создания пользовательских окон подсказки на Delphi.

Создать собственное Hint-окно в приложении на языке Delphi, позволяет использовать процедуру ShowAHint, которая позиционирует и отображает панель с текстовым контентом на указанном месте экрана.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Hint подсказки ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:00:46/0.0058159828186035/1