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

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 MMMixReg;
  26. {$I COMPILER.INC}
  27. Interface
  28. procedure Register;
  29. Implementation
  30. {$IFDEF WIN32}
  31. {$R MMMIXER.D32}
  32. {$ELSE}
  33. {$R MMMIXER.D16}
  34. {$ENDIF}
  35. uses
  36.     {$IFDEF DELPHI6}
  37.     DesignIntf,
  38.     DesignEditors,
  39.     {$ELSE}
  40.     DsgnIntf,
  41.     {$ENDIF}
  42.     Classes,
  43.     Controls,
  44.     TypInfo,
  45.     SysUtils,
  46.     MMPropEd,
  47.     MMObj,
  48.     MMDevice,
  49.     MMMixer,
  50.     MMMixCtl,
  51.     MMMixBlk,
  52.     MMLevel,
  53.     MMMeter,
  54.     MMDesign,
  55.     MMIDE,
  56.     MMCmpMan;
  57. type
  58.     {-- TMMMixerComponentProperty ---------------------------------------}
  59.     TMMMixerComponentProperty = class(TComponentProperty)
  60.     private
  61.         FList : TStringList;
  62.         procedure AddToList(const S: string);
  63.     protected
  64.         function ValidComponent(C: TComponent): Boolean; virtual; abstract;
  65.     public
  66.         procedure GetValues(Proc: TGetStrProc); override;
  67.     end;
  68.     {-- TMMMixerDeviceDeviceProperty ------------------------------------}
  69.     TMMMixerDeviceDeviceProperty = class(TMMMixerComponentProperty)
  70.     protected
  71.       function ValidComponent(C: TComponent): Boolean; override;
  72.     end;
  73.     {-- TMMMixerLabelConnectorDestProperty ------------------------------}
  74.     TMMMixerLabelConnectorDestProperty = class(TMMMixerComponentProperty)
  75.     protected
  76.       function  ValidComponent(C: TComponent): Boolean; override;
  77.     end;
  78.     {-- TMMAudioLineDestLineProperty ------------------------------------}
  79.     TMMAudioLineDestLineProperty    = class(TMMMixerComponentProperty)
  80.     protected
  81.         function ValidComponent(C: TComponent): Boolean; override;
  82.     end;
  83.     {-- TMMControlIdProperty --------------------------------------------}
  84.     TMMControlIdProperty    = class(TMMIntegerProperty)
  85.     protected
  86.         procedure   GetConverters(var IntToIdent: TIntToIdent; var IdentToInt: TIdentToInt); override ;
  87.         procedure   GetConsts(List: TList); override ;
  88.     end;
  89.     {-- TMMLineIdProperty -----------------------------------------------}
  90.     TMMLineIdProperty       = class(TMMIntegerProperty)
  91.     protected
  92.         procedure   GetConverters(var IntToIdent: TIntToIdent; var IdentToInt: TIdentToInt); override ;
  93.         procedure   GetConsts(List: TList); override ;
  94.     end;
  95.     {-- TMMItemIndexProperty --------------------------------------------}
  96.     TMMItemIndexProperty    = class(TMMIntegerProperty)
  97.     protected
  98.         procedure   GetConverters(var IntToIdent: TIntToIdent; var IdentToInt: TIdentToInt); override ;
  99.         procedure   GetConsts(List: TList); override ;
  100.     end;
  101. {== TMMMixerComponentEditor =============================================}
  102. procedure TMMMixerComponentProperty.AddToList(const S: string);
  103. begin
  104.    FList.Add(S);
  105. end;
  106. {-- TMMMixerComponentEditor ---------------------------------------------}
  107. procedure TMMMixerComponentProperty.GetValues(Proc: TGetStrProc);
  108. var
  109.    i: Integer;
  110. begin
  111.    FList := TStringList.Create;
  112.    try
  113.       Designer.GetComponentNames(GetTypeData(GetPropType),AddToList);
  114.       for i := 0 to FList.Count - 1 do
  115.           if ValidComponent(Designer.GetComponent(FList[i])) then
  116.              Proc(FList[i]);
  117.    finally
  118.       FList.Free;
  119.    end;
  120. end;
  121. {== TMMMixerDeviceDeviceProperty ========================================}
  122. function TMMMixerDeviceDeviceProperty.ValidComponent(C: TComponent): Boolean;
  123. begin
  124.    Result := (C is TMMCustomAudioDevice) and
  125.              ((C as TMMCustomAudioDevice).GetDeviceType <> dtMixer);
  126. end;
  127. {== TMMMixerLabelConnectorDestProperty ==================================}
  128. function TMMMixerLabelConnectorDestProperty.ValidComponent(C: TComponent): Boolean;
  129. begin
  130.    Result := TypInfo.GetPropInfo(C.ClassInfo,'Caption') <> nil;
  131. end;
  132. {== TMMAudioLineDestLineProperty ========================================}
  133. function    TMMAudioLineDestLineProperty.ValidComponent(C: TComponent): Boolean;
  134. begin
  135.     Result := (C is TMMAudioLine) and (C <> GetComponent(0)) ;
  136. end;
  137. {== TMMControlIdProperty ================================================}
  138. procedure   TMMControlIdProperty.GetConverters(var IntToIdent: TIntToIdent; var IdentToInt: TIdentToInt);
  139. begin
  140.     IntToIdent := ControlIdToIdent;
  141.     IdentToInt := IdentToControlId;
  142. end;
  143. {-- TMMControlIdProperty ------------------------------------------------}
  144. procedure TMMControlIdProperty.GetConsts(List: TList);
  145. begin
  146.     List.Add(Pointer(badControlId));
  147. end;
  148. {== TMMLineIdProperty ===================================================}
  149. procedure   TMMLineIdProperty.GetConverters(var IntToIdent: TIntToIdent; var IdentToInt: TIdentToInt);
  150. begin
  151.     IntToIdent := LineIdToIdent ;
  152.     IdentToInt := IdentToLineId ;
  153. end;
  154. {-- TMMLineIdProperty ---------------------------------------------------}
  155. procedure   TMMLineIdProperty.GetConsts(List: TList);
  156. begin
  157.     List.Add(Pointer(badLineId));
  158. end;
  159. {== TMMItemIndexProperty ================================================}
  160. procedure   TMMItemIndexProperty.GetConverters(var IntToIdent: TIntToIdent; var IdentToInt: TIdentToInt);
  161. begin
  162.     IntToIdent := ItemIndexToIdent ;
  163.     IdentToInt := IdentToItemIndex ;
  164. end;
  165. {-- TMMItemIndexProperty ------------------------------------------------}
  166. procedure   TMMItemIndexProperty.GetConsts(List: TList);
  167. begin
  168.     List.Add(Pointer(NoItem));
  169. end;
  170. {========================================================================}
  171. function CheckMixDevice(C1, C2: TComponent): Boolean;
  172. begin
  173.    if (C1 is TMMCustomAudioDevice) then
  174.        Result := (C1 as TMMCustomAudioDevice).GetDeviceType <> dtMixer
  175.    else
  176.        Result := False;
  177. end;
  178. {------------------------------------------------------------------------}
  179. function CheckSliderControl(C1, C2: TComponent): Boolean;
  180. begin
  181.    if (C1 is TMMCustomMixerControl) then
  182.        Result := (C1 as TMMCustomMixerControl).ControlClass in MixerSliderControlClasses
  183.    else
  184.        Result := False;
  185. end;
  186. {------------------------------------------------------------------------}
  187. function CheckWheelControl(C1, C2: TComponent): Boolean;
  188. begin
  189.    if (C1 is TMMCustomMixerControl) then
  190.        Result := (C1 as TMMCustomMixerControl).ControlClass in MixerWheelControlClasses
  191.    else
  192.        Result := False;
  193. end;
  194. {------------------------------------------------------------------------}
  195. function CheckSwitchControl(C1, C2: TComponent): Boolean;
  196. begin
  197.    if (C1 is TMMCustomMixerControl) then
  198.        Result := (C1 as TMMCustomMixerControl).ControlClass in SwitchControlClasses
  199.    else
  200.        Result := False;
  201. end;
  202. {------------------------------------------------------------------------}
  203. function CheckConnectorControl(C1, C2: TComponent): Boolean;
  204. begin
  205.    if (C1 is TMMCustomMixerControl) then
  206.        Result := (C1 as TMMCustomMixerControl).ControlClass in ConnectorControlClasses
  207.    else
  208.        Result := False;
  209. end;
  210. {------------------------------------------------------------------------}
  211. function CheckMixControl(C1, C2: TComponent): Boolean;
  212. begin
  213.    if (C1 is TMMCustomMixerControl) then
  214.        Result := (C1 as TMMCustomMixerControl).ControlClass = ccList
  215.    else
  216.        Result := False;
  217. end;
  218. {------------------------------------------------------------------------}
  219. function CheckLabelDest(C1, C2: TComponent): Boolean;
  220. begin
  221.    Result := GetPropInfo(C2.ClassInfo,'Caption') <> nil;
  222. end;
  223. {------------------------------------------------------------------------}
  224. function CheckItemLine(C1, C2: TComponent): Boolean;
  225. begin
  226.     if C1 is TMMAudioLine then
  227.         Result := cfSource in (C1 as TMMAudioLine).LineInfo.Flags
  228.     else
  229.         Result := False;
  230. end;
  231. {------------------------------------------------------------------------}
  232. procedure Register;
  233. begin
  234. //   RegisterComponents('MMMixer',[TMMAudioDevice]);
  235.    RegisterComponents('MMMixer',[TMMCompManager,
  236.                                  TMMMixerDevice,
  237.                                  TMMAudioLine,
  238.                                  TMMMixerControl,
  239.                                  TMMVolumeControl,
  240.                                  TMMPanControl,
  241.                                  TMMMixerSlider,
  242.                                  TMMMixerWheel,
  243.                                  TMMMixerCheckBox,
  244.                                  TMMMixerConnector,
  245.                                  TMMMixerLabelConnector,
  246.                                  TMMDeviceSpin,
  247.                                  TMMDeviceComboBox,
  248.                                  TMMMixerBlock,
  249.                                  TMMMixerBlockSlider,
  250.                                  TMMMixerBlockCheck,
  251.                                  TMMMixerBlockLevel,
  252.                                  TMMMixerBlockLabel
  253.                                  ]);
  254.    RegisterPropertyEditor(TypeInfo(TMMCustomAudioDevice),TMMMixerDevice,'Device',TMMMixerDeviceDeviceProperty);
  255.    RegisterPropertyEditor(TypeInfo(TMMCustomAudioDevice),TMMAudioLine,'Target',TMMMixerDeviceDeviceProperty);
  256.    RegisterPropertyEditor(TypeInfo(TControl),TMMMixerLabelConnector,'Destination',TMMMixerLabelConnectorDestProperty);
  257.    RegisterPropertyEditor(TypeInfo(TMMComponent),TMMAudioLine,'DestLine',TMMAudioLineDestLineProperty);
  258.    RegisterPropertyEditor(TypeInfo(TMMControlId),nil,'',TMMControlIdProperty);
  259.    RegisterPropertyEditor(TypeInfo(TMMLineId),nil,'',TMMLineIdProperty);
  260.    RegisterPropertyEditor(TypeInfo(TMMItemIndex),nil,'',TMMItemIndexProperty);
  261.    { Register the properties for TMMDesigner }
  262.    RegisterProperty(ptInput, 'Mixer', TMMCustomAudioDevice, 'Device', TMMMixerDevice, CheckMixDevice);
  263.    RegisterPropertyException(ptInput, 'Mixer', TMMMixerDevice, 'Device', TMMMixerDevice, nil);
  264.    RegisterProperty(ptInput, 'Mixer', TMMMixerDevice, 'Mixer', TMMAudioLine, nil);
  265.    RegisterProperty(ptInput, 'Mixer', TMMCustomAudioDevice, 'Target', TMMAudioLine, CheckMixDevice);
  266.    RegisterPropertyException(ptInput, 'Mixer', TMMMixerDevice, 'Target', TMMAudioLine, nil);
  267.    RegisterProperty(ptInput, 'Mixer', TMMAudioLine, 'DestLine', TMMAudioLine, nil);
  268.    RegisterProperty(ptInput, 'Mixer', TMMAudioLine, 'AudioLine', TMMCustomMixerControl, nil);
  269.    RegisterProperty(ptOutput, 'Mixer', TMMPanControl, 'VolumeControl', TMMVolumeControl, nil);
  270.    RegisterProperty(ptInput, 'Mixer', TMMCustomMixerControl, 'Control', TMMCustomMixerSlider, CheckSliderControl);
  271.    RegisterProperty(ptInput, 'Mixer', TMMCustomMixerControl, 'Control', TMMCustomMixerWheel, CheckWheelControl);
  272.    RegisterProperty(ptInput, 'Mixer', TMMCustomMixerControl, 'Control', TMMCustomMixerCheckBox, CheckSwitchControl);
  273.    RegisterProperty(ptInput, 'Mixer', TMMAudioLine, 'ItemLine', TMMCustomMixerCheckBox, CheckItemLine);
  274.    RegisterProperty(ptInput, 'Mixer', TMMCustomMixerControl, 'Control', TMMCustomMixerConnector, CheckConnectorControl);
  275.    RegisterProperty(ptOutput, 'Mixer', TMMMixerConnector, 'Level1', TMMCustomLevel, nil);
  276.    RegisterProperty(ptOutput, 'Mixer', TMMMixerConnector, 'Level2', TMMCustomLevel, nil);
  277.    RegisterProperty(ptOutput, 'Mixer', TMMMixerConnector, 'Meter1', TMMCustomMeter, nil);
  278.    RegisterProperty(ptOutput, 'Mixer', TMMMixerConnector, 'Meter2', TMMCustomMeter, nil);
  279.    RegisterProperty(ptInput, 'Mixer', TMMCustomAudioDevice, 'Source', TMMMixerLabelConnector, nil);
  280.    RegisterProperty(ptInput, 'Mixer', TMMAudioLine, 'Source', TMMMixerLabelConnector, nil);
  281.    RegisterProperty(ptInput, 'Mixer', TMMCustomMixerControl, 'Source', TMMMixerLabelConnector, nil);
  282.    RegisterProperty(ptOutput, 'Mixer', TMMMixerLabelConnector, 'Destination', TControl, CheckLabelDest);
  283.    RegisterProperty(ptInput, 'Mixer', TMMCustomAudioDevice, 'Device', TMMDeviceSpin, nil);
  284.    RegisterProperty(ptInput, 'Mixer', TMMCustomAudioDevice, 'Device', TMMDeviceComboBox, nil);
  285.    RegisterProperty(ptInput, 'Mixer', TMMAudioLine, 'Line', TMMMixerBlock, nil);
  286.    RegisterProperty(ptInput, 'Mixer', TMMCustomMixerControl, 'Mixer', TMMMixerBlock, CheckMixControl);
  287. end;
  288. end.