首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Inno Setup中使用trackbar控制系统音量

在Inno Setup中使用trackbar控制系统音量
EN

Stack Overflow用户
提问于 2017-03-29 23:01:01
回答 1查看 194关注 0票数 1

如何在Inno设置中使用trackbar控制系统音量?

使用bass.dll或mediaplayer.dll播放音乐,但如何使用跟踪条控制系统音量来管理音量?

这些库可以使用前进和倒退选项吗?

EN

回答 1

Stack Overflow用户

发布于 2017-03-30 01:30:22

在Inno设置中没有跟踪条控件。

但是您可以使用TBitmapImage绘制您自己的交互式音量栏

代码语言:javascript
复制
function GetCursorPos(var lpPoint: TPoint): BOOL;
  external 'GetCursorPos@user32.dll stdcall';
function ScreenToClient(hWnd: HWND; var lpPoint: TPoint): BOOL;
  external 'ScreenToClient@user32.dll stdcall';

procedure DrawVolume(Image: TBitmapImage; Volume: Integer);
var
  Canvas: TCanvas;
  Width: Integer;
begin
  Canvas := Image.Bitmap.Canvas;

  Canvas.Pen.Style := psClear;

  Width := Image.Bitmap.Width * Volume / 100

  Canvas.Brush.Color := clHighlight;
  Canvas.Rectangle(1, 1, Width, Image.Bitmap.Height);

  Canvas.Brush.Color := clBtnFace;
  Canvas.Rectangle(Width - 1, 1, Image.Bitmap.Width, Image.Bitmap.Height);

  Canvas.Pen.Style := psSolid;
  Canvas.Pen.Mode := pmCopy;
  Canvas.Pen.Color := clBlack;
  Canvas.Brush.Style := bsClear;
  Canvas.Rectangle(1, 1, Image.Bitmap.Width, Image.Bitmap.Height);
end;

procedure VolumeBarImageClick(Sender: TObject);
var
  P: TPoint;
  Image: TBitmapImage;
  Volume: Integer;
begin
  { Calculate where in the bar did user click to }
  GetCursorPos(P);
  Image := TBitmapImage(Sender);
  ScreenToClient(Image.Parent.Handle, P);
  Volume := ((P.X - Image.Left) * 100 / Image.Width) + 1;

  { Update volume bar }
  DrawVolume(Image, Volume);

  { Replace this with your code that sets the volume }
  MsgBox(Format('Setting volume to %d%%', [Volume]), mbInformation, MB_OK);
end;  

procedure InitializeWizard();
var
  VolumeBarImage: TBitmapImage;
begin
  VolumeBarImage := TBitmapImage.Create(WizardForm);
  VolumeBarImage.Parent := WizardForm;
  VolumeBarImage.Left := ScaleX(10);
  VolumeBarImage.Top := WizardForm.ClientHeight - ScaleY(34);
  VolumeBarImage.Width := ScaleX(200);
  VolumeBarImage.Height := ScaleY(20);
  VolumeBarImage.BackColor := clWhite;
  VolumeBarImage.Bitmap.Width := VolumeBarImage.Width;
  VolumeBarImage.Bitmap.Height := VolumeBarImage.Height;
  VolumeBarImage.OnClick := @VolumeBarImageClick;

  { Replace with setting to actual initial volume }
  DrawVolume(VolumeBarImage, 100);
end;

代码主要来自:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43097249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档