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

Delphi控件源码

开发平台:

Delphi

  1. unit MMDSProps;
  2. {$I COMPILER.INC}
  3. interface
  4. uses
  5.     {$IFDEF DELPHI6}
  6.     DesignIntf,
  7.     DesignEditors,
  8.     {$ELSE}
  9.     DsgnIntf,
  10.     {$ENDIF}
  11.     Windows,
  12.     Controls,
  13.     Classes,
  14.     SysUtils,
  15.     Typinfo,
  16.     MMObj,
  17.     MMWavPrp,
  18.     MMDSEdtr,
  19.     MMDSMix,
  20.     MMDSCptr,
  21.     MMDSCon;
  22. type
  23.   {-- TMMDSEditorEditObjectProperty --------------------------------------------}
  24.   TMMDSEditorEditObjectProperty = class(TComponentProperty)
  25.   private
  26.     FList : TStringList;
  27.     procedure AddToList(const S: string);
  28.   public
  29.     procedure GetValues(Proc: TGetStrProc); override;
  30.   end;
  31.   {-- TMM3DSoundProperty -------------------------------------------------------}
  32.   TMM3DSoundProperty = class(TClassProperty)
  33.   public
  34.     procedure Edit; override;
  35.     function  GetAttributes: TPropertyAttributes; override;
  36.   end;
  37.   {-- TMMDSWaveMixerEditor -----------------------------------------------------}
  38.   TMMDSWaveMixerEditor = class(TComponentEditor)
  39.   public
  40.     function    GetVerbCount: Integer; override;
  41.     function    GetVerb(Index: Integer): string; override;
  42.     procedure   ExecuteVerb(Index: Integer); override;
  43.   end;
  44.   {-- TMMDSMixChannelEditor ----------------------------------------------------}
  45.   TMMDSMixChannelEditor = class(TMMWaveComponentEditor)
  46.   public
  47.     function    GetVerbCount: Integer; override;
  48.     function    GetVerb(Index: Integer): string; override;
  49.     procedure   ExecuteVerb(Index: Integer); override;
  50.   end;
  51.   {-- TMMDSWaveFormatProperty -------------------------------------------------}
  52.   TMMDSWaveFormatProperty = class(TStringProperty)
  53.   public
  54.     procedure Edit; override;
  55.     function  GetAttributes: TPropertyAttributes; override;
  56.   end;
  57.   {-- TMMDSWaveFormatComponentEditor ------------------------------------------}
  58.   TMMDSWaveFormatComponentEditor = class(TComponentEditor)
  59.   public
  60.     procedure ExecuteVerb(Index: Integer); override;
  61.     function  GetVerb(Index: Integer): string; override;
  62.     function  GetVerbCount: Integer; override;
  63.   end;
  64.   {-- TMMDSChannelConnectorEditor -------------------------------------------}
  65.   TMMDSChannelConnectorEditor = class(TComponentProperty)
  66.   protected
  67.     CheckProc: TGetStrProc;
  68.     procedure CheckComponent(const Value: string); virtual;
  69.   public
  70.     procedure GetValues(Proc: TGetStrProc); override;
  71.   end;
  72.   
  73. implementation
  74. {== TMMDSEditorEditObjectProperty ============================================}
  75. procedure   TMMDSEditorEditObjectProperty.AddToList(const S: string);
  76. begin
  77.     FList.Add(S);
  78. end;
  79. {-- TMMDSEditorEditObjectProperty --------------------------------------------}
  80. procedure   TMMDSEditorEditObjectProperty.GetValues(Proc: TGetStrProc);
  81. var
  82.     i: Integer;
  83.     C: TComponent;
  84. begin
  85.     FList := TStringList.Create;
  86.     try
  87.         if (Designer <> nil) then
  88.         begin
  89.            Designer.GetComponentNames(GetTypeData(GetPropType),AddToList);
  90.            for i := 0 to FList.Count - 1 do
  91.            begin
  92.               C := Designer.GetComponent(FList[i]);
  93.               if InheritsFromEx(C, TMMDSMixChannel) or
  94.                  InheritsFromEx(C, TMMDSWaveMixer) then
  95.                  Proc(FList[i]);
  96.            end;
  97.         end;
  98.     finally
  99.         FList.Free;
  100.     end;
  101. end;
  102. {== TMM3DSoundProperty ========================================================}
  103. function TMM3DSoundProperty.GetAttributes: TPropertyAttributes;
  104. begin
  105.    Result := [paSubProperties,paDialog];
  106. end;
  107. {-- TMM3DSoundProperty --------------------------------------------------------}
  108. procedure TMM3DSoundProperty.Edit;
  109. var
  110.    C: TComponent;
  111.    M: Boolean;
  112. begin
  113.    M := False;
  114.    C := (GetComponent(0) as TComponent);
  115.    if InheritsFromEx(C, TMMDSWaveMixer) then
  116.      M := EditMixer(TMMDSWaveMixer(C))
  117.    else if InheritsFromEx(C, TMMDSMixChannel) then
  118.      M := EditChannel(TMMDSMixChannel(C));
  119.    if M and (Designer <> nil) then
  120.         Designer.Modified;
  121. end;
  122. {== TMMDSWaveMixerEditor =====================================================}
  123. function TMMDSWaveMixerEditor.GetVerbCount: Integer;
  124. const
  125.   VerbCount = 1;
  126. begin
  127. {$IFDEF BUILD_ACTIVEX}
  128.   Result := VerbCount
  129. {$ELSE}
  130.   if DSEDIsAvailable then Result := VerbCount else Result := 0;
  131. {$ENDIF}
  132. end;
  133. {-- TMMDSWaveMixerEditor -----------------------------------------------------}
  134. function TMMDSWaveMixerEditor.GetVerb(Index: Integer): string;
  135. begin
  136.     if (Index = 0) and DSEDIsAvailable then
  137.         Result := 'Edit &Scene...';
  138. end;
  139. {-- TMMDSWaveMixerEditor -----------------------------------------------------}
  140. procedure TMMDSWaveMixerEditor.ExecuteVerb(Index: integer);
  141. var
  142.     M: Boolean;
  143. begin
  144.     if (Index = 0) and DSEDIsAvailable then
  145.     begin
  146.         M := False;
  147.         if InheritsFromEx(Component, TMMDSWaveMixer) then
  148.             M := EditMixer(TMMDSWaveMixer(Component))
  149.         else if InheritsFromEx(Component, TMMDSMixChannel) then
  150.             M := EditChannel(TMMDSMixChannel(Component));
  151.         if M and (Designer <> nil) then
  152.             Designer.Modified;
  153.     end
  154.       else MessageBeep(MB_ICONERROR);
  155. end;
  156. {== TMMDSMixChannelEditor ====================================================}
  157. function TMMDSMixChannelEditor.GetVerbCount: Integer;
  158. begin
  159.   Result := inherited GetVerbCount;
  160. {$IFNDEF BUILD_ACTIVEX}
  161.   if DSEDIsAvailable then
  162. {$ENDIF}
  163.     Result := Result + 1;
  164. end;
  165. {-- TMMDSMixChannelEditor ----------------------------------------------------}
  166. function TMMDSMixChannelEditor.GetVerb(Index: Integer): string;
  167. begin
  168. {$IFNDEF BUILD_ACTIVEX}
  169.   if DSEDIsAvailable then
  170. {$ENDIF}
  171.     if Index = 0 then
  172.        Result := 'Edit &Scene...'
  173.     else
  174.        Result := inherited GetVerb(Index-1)
  175. {$IFNDEF BUILD_ACTIVEX}
  176.   else
  177.     Result := inherited GetVerb(Index);
  178. {$ENDIF}
  179. end;
  180. {-- TMMDSMixChannelEditor ----------------------------------------------------}
  181. procedure TMMDSMixChannelEditor.ExecuteVerb(Index: integer);
  182. var
  183.     M: Boolean;
  184. begin
  185.     if DSEDIsAvailable then
  186.     begin
  187.         if Index = 0 then
  188.         begin
  189.            M := False;
  190.            if InheritsFromEx(Component, TMMDSWaveMixer) then
  191.               M := EditMixer(TMMDSWaveMixer(Component))
  192.            else if InheritsFromEx(Component, TMMDSMixChannel) then
  193.               M := EditChannel(TMMDSMixChannel(Component));
  194.            if M and (Designer <> nil) then
  195.               Designer.Modified;
  196.         end
  197.         else
  198.             inherited ExecuteVerb(Index-1);
  199.     end
  200.     else
  201.         inherited ExecuteVerb(Index);
  202. end;
  203. {== TMMDSWaveFormatProperty ===================================================}
  204. function TMMDSWaveFormatProperty.GetAttributes: TPropertyAttributes;
  205. begin
  206.    Result := [paDialog];
  207. end;
  208. {-- TMMDSWaveFormatProperty -----------------------------------------------------}
  209. procedure TMMDSWaveFormatProperty.Edit;
  210. var
  211.    Component: TComponent;
  212. begin
  213.    Component := TComponent(GetComponent(0));
  214.    if (Component <> nil) and (Component is TMMDSCaptureChannel) then
  215.    with (Component as TMMDSCaptureChannel) do
  216.    begin
  217.       if SelectFormat and (Designer <> nil) then Designer.Modified;
  218.    end;
  219. end;
  220. {== TMMDSWaveFormatComponentEditor ============================================}
  221. procedure TMMDSWaveFormatComponentEditor.ExecuteVerb(Index: Integer);
  222. begin
  223.    if (Component <> nil) and (Component is TMMDSCaptureChannel) then
  224.    with (Component as TMMDSCaptureChannel) do
  225.    begin
  226.       if SelectFormat and (Designer <> nil) then Designer.Modified;
  227.    end;
  228. end;
  229. {-- TMMDSWaveFormatComponentEditor --------------------------------------------}
  230. function TMMDSWaveFormatComponentEditor.GetVerb(Index: Integer): string;
  231. begin
  232.    Result := 'Select WaveFormat...';
  233. end;
  234. {-- TMMDSWaveFormatComponentEditor --------------------------------------------}
  235. function TMMDSWaveFormatComponentEditor.GetVerbCount: Integer;
  236. begin
  237.    Result := 1;
  238. end;
  239. {== TMMDSChannelConnectorEditor ===============================================}
  240. procedure TMMDSChannelConnectorEditor.CheckComponent(const Value: string);
  241. var
  242.    Component: TComponent;
  243. begin
  244.    Component := Designer.GetComponent(Value);
  245.    if (Component.Name <> '') and DSChannelConnectCheck(Component,Component) then
  246.        CheckProc(Value);
  247. end;
  248. {-- TMMDSChannelConnectorEditor -----------------------------------------------}
  249. procedure TMMDSChannelConnectorEditor.GetValues(Proc: TGetStrProc);
  250. begin
  251.    CheckProc := Proc;
  252.    inherited GetValues(CheckComponent);
  253. end;
  254. end.