uwavvolume.pas
上传用户:hbszzs
上传日期:2008-08-20
资源大小:628k
文件大小:2k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. unit uwavvolume;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  5.   ToolWin, ComCtrls, MMSystem, VrControls, VrJoypad, VrLcd,
  6.   VrHyperLink, VrBlotter, VrSlider, VrLevelBar, VrTrackBar;
  7. type
  8.   TForm1 = class(TForm)
  9.     VrBlotter1: TVrBlotter;
  10.     VrJoypad1: TVrJoypad;
  11.     VrNum1: TVrNum;
  12.     VrTrackBar1: TVrTrackBar;
  13.     VrLevelBar1: TVrLevelBar;
  14.     procedure FormCreate(Sender: TObject);
  15.     procedure FormDestroy(Sender: TObject);
  16.     procedure FormShow(Sender: TObject);
  17.     procedure VrShadowButton1Click(Sender: TObject);
  18.     procedure VrSlider1Change(Sender: TObject);
  19.   private
  20.     PrevPos: dWord;
  21.     pCurrentVolumeLevel: PDWord;
  22.     CurrentVolumeLevel: DWord;
  23.     VolumeControlHandle: hWnd;
  24.     function GetTrackBarPos: Integer;
  25.   public
  26.     { Public declarations }
  27.   end;
  28. var
  29.   Form1: TForm1;
  30. implementation
  31. {$R *.DFM}
  32. procedure TForm1.FormCreate(Sender: TObject);
  33. begin
  34.   New(pCurrentVolumeLevel);
  35. end;
  36. procedure TForm1.FormDestroy(Sender: TObject);
  37. begin
  38.   Dispose(pCurrentVolumeLevel);
  39. end;
  40. function TForm1.GetTrackBarPos: integer;
  41. begin
  42.   Result := 65535 div VrTrackBar1.MaxValue;
  43. end;
  44. procedure TForm1.FormShow(Sender: TObject);
  45. begin
  46.   VolumeControlHandle := FindWindow('Volume Control', nil);
  47.   WaveOutGetVolume(VolumeControlHandle, pCurrentVolumeLevel);
  48.   CurrentVolumeLevel := pCurrentVolumeLevel^;
  49.   VrTrackBar1.Position := LoWord(CurrentVolumeLevel) div GetTrackBarPos;
  50. end;
  51. procedure TForm1.VrShadowButton1Click(Sender: TObject);
  52. begin
  53.   Application.Terminate;
  54. end;
  55. procedure TForm1.VrSlider1Change(Sender: TObject);
  56. begin
  57.   CurrentVolumeLevel := VrTrackBar1.Position * GetTrackBarPos shl 16;
  58.   CurrentVolumeLevel := CurrentVolumeLevel + dword(VrTrackBar1.Position * GetTrackBarPos);
  59.   if WaveOutSetVolume(VolumeControlHandle, CurrentVolumeLevel) <> 0 then
  60.     raise Exception.Create('Cannot adjust Volume.');
  61.   VrNum1.Value := VrTrackBar1.Position;
  62.   VrLevelBar1.Position := VrTrackBar1.Position;
  63.   if CurrentVolumeLevel <> PrevPos then
  64.   begin
  65.     if CurrentVolumeLevel > PrevPos then
  66.       VrJoyPad1.Directions := [jdUp]
  67.     else VrJoyPad1.Directions := [jdDown];
  68.     PrevPos := CurrentVolumeLevel;
  69.   end;
  70. end;
  71. end.