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

Delphi控件源码

开发平台:

Delphi

  1. {========================================================================}
  2. {=                (c) 1995-98 SwiftSoft Ronald Dittrich                 =}
  3. {========================================================================}
  4. {=                          All Rights Reserved                         =}
  5. {========================================================================}
  6. {=  D 01099 Dresden             = Fax.: +49 (0)351-8037944              =}
  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: 06.09.98 - 14:25:28 $                                        =}
  24. {========================================================================}
  25. unit MMEQDlg;
  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.     Consts,
  38.     Classes,
  39.     Dialogs,
  40.     StdCtrls,
  41.     Controls,
  42.     ExtCtrls,
  43.     Forms,
  44.     Mask,
  45.     ComCtrls,
  46.     MMObj,
  47.     MMUtils,
  48.     MMSpin,
  49.     MMEQ,
  50.     MMDIBCv,
  51.     MMSpectr,
  52.     MMDSPObj,
  53.     MMEdit;
  54. type
  55.   {-- TMMEQDlg ----------------------------------------------------------------}
  56.   TMMEQDlgForm = class(TForm)
  57.     OpenDialog: TOpenDialog;
  58.     SaveDialog: TSaveDialog;
  59.     btnSave: TButton;
  60.     btnLoad: TButton;
  61.     btnReset: TButton;
  62.     btnCancel: TButton;
  63.     btnOK: TButton;
  64.     btnClear: TButton;
  65.     FilterComboBox: TComboBox;
  66.     spinf1: TMMSpinButton;
  67.     spinf2: TMMSpinButton;
  68.     spinGain: TMMSpinButton;
  69.     Label1: TLabel;
  70.     Label2: TLabel;
  71.     Label3: TLabel;
  72.     Bevel1: TBevel;
  73.     Label4: TLabel;
  74.     btnAdd: TButton;
  75.     Spectrum: TMMSpectrum;
  76.     TmpEQ: TMMEqualizer;
  77.     mef1: TMMFloatNumberEdit;
  78.     mef2: TMMFloatNumberEdit;
  79.     meGain: TMMFloatNumberEdit;
  80.     procedure btnResetClick(Sender: TObject);
  81.     procedure btnLoadClick(Sender: TObject);
  82.     procedure btnSaveClick(Sender: TObject);
  83.     procedure FormCreate(Sender: TObject);
  84.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  85.     procedure btnClearClick(Sender: TObject);
  86.     procedure FilterComboBoxChange(Sender: TObject);
  87.     procedure spinChange(Sender: TObject);
  88.     procedure btnAddClick(Sender: TObject);
  89.     procedure maskKeyPress(Sender: TObject; var Key: Char);
  90.     procedure maskExit(Sender: TObject);
  91.     procedure FormShow(Sender: TObject);
  92.   private
  93.     FTitle: String;
  94.     FEQ: TMMEqualizer;
  95.     FBandChange: Boolean;
  96.     procedure SetTitle(aValue: String);
  97.     procedure SetEQ(aValue: TMMEqualizer);
  98.     procedure SetBandChange(aValue: Boolean);
  99.     procedure UpdateControls;
  100.     procedure FillComboBox;
  101.   public
  102.     property BandChange: Boolean read FBandChange write SetBandChange;
  103.     property Title: String read FTitle write SetTitle;
  104.     property Equalizer: TMMEqualizer read FEQ write SetEQ;
  105.   end;
  106.   {-- TMMEqualizerDialog ------------------------------------------------------}
  107.   TMMEqualizerDialog = class(TMMNonVisualComponent)
  108.   private
  109.     FSource    : TMMEqualizer;
  110.     FTitle     : string;
  111.     FBandChange: Boolean;
  112.     procedure SetSource(aSource: TMMEqualizer);
  113.   protected
  114.     procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  115.   public
  116.     constructor Create(AOwner: TComponent); override;
  117.     function Execute: Boolean;
  118.   published
  119.     property AllowBandChange: Boolean read FBandChange write FBandChange;
  120.     property Source: TMMEqualizer read FSource write SetSource;
  121.     property Title: string read FTitle write FTitle;
  122.   end;
  123. var
  124.   MMEQDlgForm: TMMEQDlgForm;
  125. implementation
  126. {$R *.DFM}
  127. {== TMMEQDlgForm ==============================================================}
  128. procedure TMMEQDlgForm.FormCreate(Sender: TObject);
  129. begin
  130.    FTitle      := Caption;
  131.    FEQ         := nil;
  132.    FBandChange := True;
  133.    FilterComboBox.ItemIndex := -1;
  134. end;
  135. {-- TMMEQDlgForm --------------------------------------------------------------}
  136. procedure TMMEQDlgForm.FormShow(Sender: TObject);
  137. begin
  138.    {$IFDEF BUILD_ACTIVEX}
  139.    TmpEQ.Left := -50;
  140.    {$ENDIF}
  141. end;
  142. {-- TMMEQDlgForm --------------------------------------------------------------}
  143. procedure TMMEQDlgForm.FormClose(Sender: TObject; var Action: TCloseAction);
  144. begin
  145.    if (ModalResult = mrOK) then
  146.    begin
  147.       if (FEQ <> nil) then FEQ.Assign(TmpEQ);
  148.    end;
  149. end;
  150. {-- TMMEQDlgForm --------------------------------------------------------------}
  151. procedure TMMEQDlgForm.SetTitle(aValue: String);
  152. begin
  153.    if (aValue <> FTitle) then
  154.    begin
  155.       FTitle := aValue;
  156.       Caption := FTitle + ' -  ' + TmpEQ.Description;
  157.    end;
  158. end;
  159. {-- TMMEQDlgForm --------------------------------------------------------------}
  160. procedure TMMEQDlgForm.SetBandChange(aValue: Boolean);
  161. begin
  162.    if (aValue <> FBandChange) then
  163.    begin
  164.       FBandChange := aValue;
  165.       btnAdd.Enabled   := FBandChange;
  166.       btnClear.Enabled := FBandChange;
  167.    end;
  168. end;
  169. {-- TMMEQDlgForm --------------------------------------------------------------}
  170. procedure TMMEQDlgForm.FillComboBox;
  171. var
  172.    i,old: integer;
  173. begin
  174.    with FilterComboBox,TmpEQ do
  175.    begin
  176.       old := Max(ItemIndex,0);
  177.       Items.Clear;
  178.       for i := 0 to Filters.Count-1 do
  179.       with Filters[i] do
  180.       begin
  181.          Items.Add(IntToStr(i+1));
  182.       end;
  183.       if (old >= 0) and (old < Items.Count) then ItemIndex := old;
  184.       FilterComboBoxChange(FilterComboBox);
  185.    end;
  186. end;
  187. {-- TMMEQDlgForm --------------------------------------------------------------}
  188. procedure TMMEQDlgForm.FilterComboBoxChange(Sender: TObject);
  189. begin
  190.    with FilterComboBox,TmpEQ do
  191.    begin
  192.       if (ItemIndex >= 0) then
  193.       with TmpEQ.Filters[ItemIndex] do
  194.       begin
  195.          mef1.Value      := f1;
  196.          mef2.Value      := f2;
  197.          meGain.Value    := Gain;
  198.          spinf1.Value    := Trunc(f1*100);
  199.          spinf2.Value    := Trunc(f2*100);
  200.          spinGain.Value  := Trunc(Gain*100);
  201.          mef1.Enabled    := True;
  202.          mef2.Enabled    := True;
  203.          meGain.Enabled  := True;
  204.          spinf1.Enabled  := True;
  205.          spinf2.Enabled  := True;
  206.          spinGain.Enabled:= True;
  207.       end
  208.       else
  209.       begin
  210.          mef1.Value      := 0;
  211.          mef2.Value      := 0;
  212.          meGain.Value    := 0;
  213.          spinf1.Value    := 0;
  214.          spinf2.Value    := 0;
  215.          spinGain.Value  := 0;
  216.          mef1.Enabled    := False;
  217.          mef2.Enabled    := False;
  218.          meGain.Enabled  := False;
  219.          spinf1.Enabled  := False;
  220.          spinf2.Enabled  := False;
  221.          spinGain.Enabled:= False;
  222.       end;
  223.    end;
  224. end;
  225. {-- TMMEQDlgForm --------------------------------------------------------------}
  226. procedure TMMEQDlgForm.spinChange(Sender: TObject);
  227. begin
  228.    if FilterComboBox.ItemIndex >= 0 then
  229.    with TmpEQ.Filters[FilterComboBox.ItemIndex] do
  230.    begin
  231.       if Sender = spinf1 then
  232.       begin
  233.          f1 := spinf1.Value/100;
  234.          mef1.Value := f1;
  235.       end
  236.       else if Sender = spinf2 then
  237.       begin
  238.          f2 := spinf2.Value/100;
  239.          mef2.Value := f2;
  240.       end
  241.       else
  242.       begin
  243.          Gain := spinGain.Value/100;
  244.          meGain.Value := Gain;
  245.       end;
  246.    end;
  247. end;
  248. {-- TMMEQDlgForm --------------------------------------------------------------}
  249. procedure TMMEQDlgForm.maskKeyPress(Sender: TObject; var Key: Char);
  250. begin
  251.    if (Key = #13) then TMaskEdit(Sender).OnExit(Sender);
  252. end;
  253. {-- TMMEQDlgForm --------------------------------------------------------------}
  254. procedure TMMEQDlgForm.maskExit(Sender: TObject);
  255. begin
  256.    spinf1.Value   := Trunc(mef1.Value*100);
  257.    spinf2.Value   := Trunc(mef2.Value*100);
  258.    spinGain.Value := Trunc(meGain.Value*100);
  259. end;
  260. {-- TMMEQDlgForm --------------------------------------------------------------}
  261. procedure TMMEQDlgForm.UpdateControls;
  262. begin
  263.    with TmpEQ do
  264.    begin
  265.       Caption := Title + ' -  '+ Description;
  266.       FillComboBox;
  267.    end;
  268. end;
  269. {-- TMMEQDlgForm --------------------------------------------------------------}
  270. procedure TMMEQDlgForm.SetEQ(aValue: TMMEqualizer);
  271. begin
  272.    if (aValue <> Nil) then
  273.    begin
  274.       FEQ := aValue;
  275.       TmpEQ.assign(aValue);
  276.       if (TmpEQ.FFTLength > 512) then
  277.           Spectrum.FFTLength := 512
  278.       else
  279.           Spectrum.FFTLength := 256;
  280.       UpdateControls;
  281.    end;
  282. end;
  283. {-- TMMEQDlgForm --------------------------------------------------------------}
  284. procedure TMMEQDlgForm.btnAddClick(Sender: TObject);
  285. var
  286.    idx: integer;
  287. begin
  288.    if not FBandChange then exit;
  289.    idx := TmpEQ.Filters.AddObject(TMMEQFilter.Create);
  290.    FillComboBox;
  291.    FilterComboBox.ItemIndex := idx;
  292.    UpdateControls;
  293. end;
  294. {-- TMMEQDlgForm --------------------------------------------------------------}
  295. procedure TMMEQDlgForm.btnResetClick(Sender: TObject);
  296. begin
  297.    TmpEQ.assign(FEQ);
  298.    UpdateControls;
  299. end;
  300. {-- TMMEQDlgForm --------------------------------------------------------------}
  301. procedure TMMEQDlgForm.btnClearClick(Sender: TObject);
  302. begin
  303.    if not FBandChange then exit;
  304.    TmpEQ.Filters.FreeAll;
  305.    UpdateControls;
  306. end;
  307. {-- TMMEQDlgForm --------------------------------------------------------------}
  308. procedure TMMEQDlgForm.btnLoadClick(Sender: TObject);
  309. begin
  310.    if OpenDialog.Execute then
  311.    begin
  312.       TmpEQ.Filters.LoadFromFile(OpenDialog.FileName);
  313.       FilterComboBox.ItemIndex := -1;
  314.       UpdateControls;
  315.    end;
  316. end;
  317. {-- TMMEQDlgForm --------------------------------------------------------------}
  318. procedure TMMEQDlgForm.btnSaveClick(Sender: TObject);
  319. begin
  320.    if SaveDialog.Execute then
  321.    begin
  322.       TmpEQ.Filters.SaveToFile(SaveDialog.FileName);
  323.    end;
  324. end;
  325. {== TMMEqualizerDialog ========================================================}
  326. constructor TMMEqualizerDialog.Create(AOwner: TComponent);
  327. begin
  328.    inherited Create(AOwner);
  329.    FTitle      := 'Equalizer Editor';
  330.    FSource     := nil;
  331.    FBandChange := True;
  332.    ErrorCode := ComponentRegistered(InitCode, Self, ClassName);
  333.    if (ErrorCode <> 0) then RegisterFailed(InitCode, Self , ClassName);
  334. end;
  335. {-- TMMEqualizerDialog --------------------------------------------------------}
  336. procedure TMMEqualizerDialog.SetSource(aSource: TMMEqualizer);
  337. begin
  338.    if Longint(aSource) = Longint(Self) then exit;
  339.    if (aSource is TMMEqualizer) or (aSource = Nil) then
  340.    begin
  341.       if (FSource <> aSource) then
  342.       begin
  343.          FSource := aSource;
  344.       end;
  345.    end;
  346. end;
  347. {-- TMMEqualizerDialog --------------------------------------------------------}
  348. procedure TMMEqualizerDialog.Notification(AComponent: TComponent; Operation: TOperation);
  349. begin
  350.    inherited Notification(AComponent, Operation);
  351.    if (Operation = opRemove) and (AComponent = FSource) then
  352.       FSource := Nil;
  353. end;
  354. {-- TMMEqualizerDialog --------------------------------------------------------}
  355. function TMMEqualizerDialog.Execute: Boolean;
  356. begin
  357.    Result := False;
  358.    if assigned(FSource) then
  359.    begin
  360.       with TMMEQDlgForm.Create(Application) do
  361.       try
  362.          Equalizer  := (Self.FSource as TMMEqualizer);
  363.          Title      := Self.FTitle;
  364.          BandChange := Self.FBandChange;
  365.          Result     := (ShowModal = mrOK);
  366.       finally
  367.          Free;
  368.       end;
  369.    end;
  370. end;
  371. end.