Код, предоставленный ниже, написан на Delphi и демонстрирует создание контрола TProgressBar, который behaves как марquee-contrол, часто встречающийся в приложениях Windows XP стиля.
Расшифровка кода:
Первая часть кода определяет используемые единицы и интерфейсы программы.
Класс TForm1 определен, который содержит компоненты формы (Button1, ProgressBar1 и Button2).
Процедура Button1Click вызывается при клике кнопки Button1. Она устанавливает стиль ProgressBar в PBS_ MARQUEE, что позволяет активировать поведение марquee.
Функция SendMessage используется для установки свойств марquee. В этом случае она устанавливает скорость марquee в FSpeed (который равен 100 в этом примере).
Процедура Button2Click вызывается при клике кнопки Button2. Она отправляет сообщение ProgressBar, чтобы отключить поведение марquee.
Вот улучшенная версия кода с комментариями и предложениями альтернативных решений:
unitUnit1;interfaceusesWindows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,XPMan,ComCtrls,StdCtrls;typeTForm1=class(TForm)Button1:TButton;ProgressBar1:TProgressBar;Button2:TButton;procedureButton1Click(Sender:TObject);procedureButton2Click(Sender:TObject);private{ Private declarations }public{ Public declarations }end;varForm1:TForm1;constPBS_MARQUEE=$08;PBM_SETMARQUEE=WM_USER+10;implementation{$R *.dfm}procedureTForm1.Button1Click(Sender:TObject);varFSpeed:Integer;begin// Enable marquee behavior with a speed of 100SetWindowLong(ProgressBar1.Handle,GWL_STYLE,GetWindowLong(ProgressBar1.Handle,GWL_STYLE)OrPBS_MARQUEE);SendMessage(ProgressBar1.Handle,PBM_SETMARQUEE,1,FSpeed);end;procedureTForm1.Button2Click(Sender:TObject);begin// Disable marquee behaviorSendMessage(ProgressBar1.Handle,PBM_SETMARQUEE,0,0);end;end.
Альтернативное решение:
Вместо использования функции SetWindowLong для изменения стиля ProgressBar, вы можете использовать свойство ProgressBar1.Style. Это более дельфийский способ установки стиля и является проще для чтения и поддержки.
procedureTForm1.Button1Click(Sender:TObject);begin// Enable marquee behavior with a speed of 100ProgressBar1.Style:=psMarquee;ProgressBar1.Position:=0;ProgressBar1.Max:=100;end;procedureTForm1.Button2Click(Sender:TObject);begin// Disable marquee behaviorProgressBar1.Style:=psNormal;end;
В этом альтернативном решении мы устанавливаем свойство Style в psMarquee, чтобы активировать поведение марquee. Мы также устанавливаем свойства Position и Max, чтобы начать марquee с начала и установить его максимальное значение в 100. Для отключения поведения марquee мы просто устанавливаем свойство Style обратно в psNormal.
В статье описано как изменить внешний вид TProgressBar в стиле XP, используя функцию SetWindowLong и SendMessage для включения или выключения эффекта маришоу.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.