MMProps.pas
上传用户:hylc_2004
上传日期:2014-01-23
资源大小:46800k
文件大小:8k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. {========================================================================}
  2. {=                (c) 1995-98 SwiftSoft Ronald Dittrich                 =}
  3. {========================================================================}
  4. {=                          All Rights Reserved                         =}
  5. {========================================================================}
  6. {=  D 01099 Dresden             = Tel.: +0351-8012255                   =}
  7. {=  Loewenstr.7a                = info@swiftsoft.de                     =}
  8. {========================================================================}
  9. {=  Actual versions on http://www.swiftsoft.de/mmtools.html             =}
  10. {========================================================================}
  11. {=  This code is for reference purposes only and may not be copied or   =}
  12. {=  distributed in any format electronic or otherwise except one copy   =}
  13. {=  for backup purposes.                                                =}
  14. {=                                                                      =}
  15. {=  No Delphi Component Kit or Component individually or in a collection=}
  16. {=  subclassed or otherwise from the code in this unit, or associated   =}
  17. {=  .pas, .dfm, .dcu, .asm or .obj files may be sold or distributed     =}
  18. {=  without express permission from SwiftSoft.                          =}
  19. {=                                                                      =}
  20. {=  For more licence informations please refer to the associated        =}
  21. {=  HelpFile.                                                           =}
  22. {========================================================================}
  23. {=  $Date: 20.01.1998 - 18:00:00 $                                      =}
  24. {========================================================================}
  25. unit MMProps;
  26. {$I COMPILER.INC}
  27. interface
  28. uses
  29. {$IFDEF WIN32}
  30.     Windows,
  31. {$ELSE}
  32.     WinTypes,
  33.     WinProcs,
  34. {$ENDIF}
  35.     SysUtils,
  36.     Messages,
  37.     Classes,
  38.     Controls,
  39.     Forms,
  40.     MMObj,
  41.     MMUtils,
  42.     MMSystem;
  43. type
  44.    EMMPropertiesError = class(Exception);
  45.    EMMJoystickError = class(Exception);
  46.    {-- TMMPropertiesDialog ----------------------------------------------}
  47.    TMMPropertiesDialog = class(TMMNonVisualComponent)
  48.    protected
  49.      function ParentHnd: THandle;
  50.    public
  51.      function Execute: Boolean; virtual; abstract;
  52.    end;
  53.    
  54.    TMMPropertySheets = (psAll,psAudio,psVideo,psMidi,psCDAudio);
  55.    {-- TMMProperties ----------------------------------------------------}
  56.    TMMProperties = class(TMMPropertiesDialog)
  57.    private
  58.      FSheets: TMMPropertySheets;
  59.      FTitle : String;
  60.    public
  61.      constructor Create(AOwner: TComponent); override;
  62.      function Execute: Boolean; override;
  63.    published
  64.      property Sheets: TMMPropertySheets read FSheets write FSheets default psAudio;
  65.      property Title: String read FTitle write FTitle;
  66.    end;
  67.    {-- TMMJoystickProperties --------------------------------------------}
  68.    TMMJoystickProperties = class(TMMPropertiesDialog)
  69.    public
  70.      function Execute: Boolean; override;
  71.    end;
  72. implementation
  73. {-- TMMPropertiesDialog ----------------------------------------------}
  74. function TMMPropertiesDialog.ParentHnd: THandle;
  75. begin
  76.   {$IFDEF BUILD_ACTIVEX}
  77.   ParentHnd := Handle;
  78.   {$ELSE}
  79.   if Assigned(Owner) and (Owner is TWinControl) then
  80.     ParentHnd := TWinControl(Owner).Handle
  81.   else
  82.     ParentHnd := 0;
  83.   {$ENDIF}
  84. end;
  85. type
  86.   TCplApplet              = function(Wnd, Msg: Integer; P1, P2: Longint): Integer; stdcall;
  87.   TShowMMCPLPropertySheet = procedure(Wnd: Integer; Page, PageText, WinText: PChar); stdcall;
  88.   TCPINFO = record
  89.     idIcon,
  90.     idName,
  91.     idInfo,
  92.     lData  : Integer;
  93.   end;
  94.   TNewCpInfo = record
  95.     dwSize        : Longint;
  96.     dwFlags       : Longint;
  97.     dwHelpContext : Longint;
  98.     lData         : Longint;
  99.     hIcon         : HIcon;
  100.     szName        : array[0..31] of Char;
  101.     szInfo        : array[0..63] of Char;
  102.     szHelpFile    : array[0..127] of Char;
  103.   end;
  104. const
  105.      CPL_INIT        = 1;
  106.      CPL_GETCOUNT    = 2;
  107.      CPL_INQUIRE     = 3;
  108.      CPL_SELECT      = 4;
  109.      CPL_DBLCLK      = 5;
  110.      CPL_STOP        = 6;
  111.      CPL_EXIT        = 7;
  112.      CPL_NEWINQUIRE  = 8;
  113. {== TMMProperties ======================================================}
  114. constructor TMMProperties.Create(AOwner: TComponent);
  115. begin
  116.    inherited Create(AOwner);
  117.    FSheets := psAudio;
  118.    FTitle := LoadResStr(IDS_AUDIOPROPERTIES);
  119.    ErrorCode := ComponentRegistered(InitCode, Self, ClassName);
  120.    if (ErrorCode <> 0) then RegisterFailed(InitCode, Self , ClassName);
  121. end;
  122. {-- TMMPropertys -------------------------------------------------------}
  123. function TMMProperties.Execute: Boolean;
  124. const
  125.   Tabs: array[TMMPropertySheets] of PChar = ('','Audio','Video','Midi','CDAudio');
  126.   Names: array[TMMPropertySheets] of PChar = ('','Audio','Video','Midi','Audio-CD');
  127. var
  128.   CplApplet              : TCplApplet;
  129.   ShowMMCPLPropertySheet : TShowMMCPLPropertySheet;
  130.   Lib                    : THandle;
  131.   Info                   : TNewCpInfo;
  132.   ErrorMode              : Cardinal;
  133. begin
  134.   Result := False;
  135.   if not NewStyleControls then
  136.      raise EMMPropertiesError.Create(LoadResStr(IDS_NOTSUPPORTED));
  137.   @CPLApplet := nil;
  138.   ErrorMode := SetErrorMode(SEM_NoOpenFileErrorBox);
  139.   try
  140.      Lib := LoadLibrary('MMSYS.CPL');
  141.      if (Lib >= HINSTANCE_ERROR) then
  142.      begin
  143.         if (FSheets = psAll) then
  144.         begin
  145.            @CplApplet:= GetProcAddress(Lib, 'CPlApplet');
  146.            if assigned(CplApplet) then
  147.            begin
  148.               if CPLApplet(ParentHnd, CPL_INIT, 0, 0) <> 0 then
  149.               begin
  150.                  Info.dwSize:= SizeOf(Info);
  151.                  CPLApplet(ParentHnd, CPL_INQUIRE, 0, Longint(@Info));
  152.                  CPLApplet(ParentHnd, CPL_DBLCLK, 0, Info.lData);
  153.                  CPLApplet(ParentHnd, CPL_EXIT, 0, 0);
  154.                  Result := True;
  155.               end;
  156.            end
  157.         end
  158.         else
  159.         begin
  160.            @ShowMMCPLPropertySheet := GetProcAddress(Lib, 'ShowMMCPLPropertySheet');
  161.            if Assigned(ShowMMCPLPropertySheet) then
  162.            begin
  163.               ShowMMCPLPropertySheet(ParentHnd, Tabs[FSheets], Names[FSheets],PChar(FTitle));
  164.               Result := True;
  165.            end;
  166.         end;
  167.      end;
  168.   finally
  169.      FreeLibrary(Lib);
  170.      SetErrorMode(ErrorMode);
  171.   end;
  172. end;
  173. {== TMMJoystickPropertys ================================================}
  174. function TMMJoystickProperties.Execute: Boolean;
  175. var
  176.   CplApplet              : TCplApplet;
  177.   Lib                    : THandle;
  178.   Info                   : TNewCpInfo;
  179.   ErrorMode              : Cardinal;
  180. begin
  181.   Result := False;
  182.   if (joyGetNumDevs = 0) then
  183.      raise EMMJoystickError.Create(LoadResStr(IDS_NOJOYSTICK));
  184.   if not NewStyleControls then
  185.      raise EMMJoystickError.Create(LoadResStr(IDS_NOTSUPPORTED));
  186.   ErrorMode := SetErrorMode(SEM_NoOpenFileErrorBox);
  187.   try
  188.      Lib := LoadLibrary('JOY.CPL');
  189.      if (Lib >= HINSTANCE_ERROR) then
  190.      begin
  191.         @CplApplet:= GetProcAddress(Lib, 'CPlApplet');
  192.         if assigned(CplApplet) then
  193.         begin
  194.            if CPLApplet(ParentHnd, CPL_INIT, 0, 0) <> 0 then
  195.            begin
  196.               Info.dwSize:= SizeOf(Info);
  197.               CPLApplet(ParentHnd, CPL_INQUIRE, 0, Longint(@Info));
  198.               CPLApplet(ParentHnd, CPL_DBLCLK, 0, Info.lData);
  199.               CPLApplet(ParentHnd, CPL_EXIT, 0, 0);
  200.               Result := True;
  201.            end;
  202.         end;
  203.      end;
  204.   finally
  205.      FreeLibrary(Lib);
  206.      SetErrorMode(ErrorMode);
  207.   end;
  208.   ErrorCode := ComponentRegistered(InitCode, Self, ClassName);
  209.   if (ErrorCode <> 0) then RegisterFailed(InitCode, Self , ClassName);
  210. end;
  211. end.