Введение:
В Delphi компонент TTrackBar является оберткой для стандартного контрола трека бара операционной системы Windows. Одной из полезных функций этого компонента является отображение подсказок при перемещении ползунка. По умолчанию в подсказке отображается простое целое число в пределах минимума и максимума контрола. Однако, иногда требуется более гибкое форматирование этого числа, например, в процентах для контрола громкости. В данной статье мы рассмотрим, как можно изменить текст подсказки для TTrackBar в Delphi.
Проблема:
По умолчанию подсказка TTrackBar в Delphi отображает значение в виде целого числа. В некоторых случаях, например, при использовании TTrackBar в качестве индикатора громкости, было бы удобнее отображать значение в процентах. Существует сообщение TBM_GETTOOLTIPS в документации Windows, которое позволяет получить дескриптор подсказки, но не совсем ясно, как его использовать для обновления текста подсказки.
Решение:
Для обновления текста подсказки в TTrackBar можно использовать уведомление TTN_NEEDTEXT и структуру NMTTDISPINFO. При получении этого уведомления можно изменить текст подсказки на нужный, например, добавив проценты к значению ползунка.
Пример кода:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, CommCtrl;
type
TTrackBar = class(Vcl.ComCtrls.TTrackBar)
procedure WndProc(var Message: TMessage); override;
end;
TForm1 = class(TForm)
TrackBar1: TTrackBar;
private
public
end;
implementation
{$R *.dfm}
procedure TTrackBar.WndProc(var Message: TMessage);
begin
inherited;
case Message.Msg of
WM_NOTIFY:
if PNMHdr(Message.LParam).code = TTN_NEEDTEXT then
begin
var S := Round(100 * Position / Max).ToString + '%';
FillChar(
PNMTTDispInfo(Message.LParam).szText,
Length(PNMTTDispInfo(Message.LParam).szText) * SizeOf(Char),
0);
if S.Length <= Length(PNMTTDispInfo(Message.LParam).szText) then
CopyMemory(
@PNMTTDispInfo(Message.LParam).szText,
Pointer(S),
S.Length * SizeOf(Char)
);
end;
end;
end;
end.
В данном примере кода переопределяется обработчик сообщений WndProc для TTrackBar, который реагирует на уведомление TTN_NEEDTEXT. При получении этого уведомления, код округляет значение позиции ползунка до ближайшего целого числа, переводит его в проценты и устанавливает в качестве текста подсказки.
Заключение:
Использование уведомления TTN_NEEDTEXT и структуры NMTTDISPINFO позволяет гибко форматировать текст подсказки для TTrackBar в Delphi, что может значительно улучшить пользовательский интерфейс, делая его более интуитивно понятным и информативным.
Как изменять текст подсказки в компоненте TTrackBar в Delphi для отображения значения в процентах.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.