⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmmixblk.pas

📁 一套及时通讯的原码
💻 PAS
📖 第 1 页 / 共 3 页
字号:
{========================================================================}
{=                (c) 1995-98 SwiftSoft Ronald Dittrich                 =}
{========================================================================}
{=                          All Rights Reserved                         =}
{========================================================================}
{=  D 01099 Dresden             = Tel.: +0351-8012255                   =}
{=  Loewenstr.7a                = info@swiftsoft.de                     =}
{========================================================================}
{=  Actual versions on http://www.swiftsoft.de/mmtools.html             =}
{========================================================================}
{=  This code is for reference purposes only and may not be copied or   =}
{=  distributed in any format electronic or otherwise except one copy   =}
{=  for backup purposes.                                                =}
{=                                                                      =}
{=  No Delphi Component Kit or Component individually or in a collection=}
{=  subclassed or otherwise from the code in this unit, or associated   =}
{=  .pas, .dfm, .dcu, .asm or .obj files may be sold or distributed     =}
{=  without express permission from SwiftSoft.                          =}
{=                                                                      =}
{=  For more licence informations please refer to the associated        =}
{=  HelpFile.                                                           =}
{========================================================================}
{=  $Date: 20.01.1998 - 18:00:00 $                                      =}
{========================================================================}
unit MMMixBlk;

{$I COMPILER.INC}

{.$DEFINE _MMDEBUG}

interface

uses
{$IFDEF WIN32}
    Windows,
{$ELSE}
    WinTypes,
    WinProcs,
{$ENDIF}
    Forms,
    Messages,
    Stdctrls,
    ExtCtrls,
    SysUtils,
    Controls,
    Classes,
    Graphics,
    MMObj,
    MMObsrv,
    MMUtils,
    MMScale,
    MMLevel,
    MMSlider,
{$IFDEF BUILD_ACTIVEX}
    AxCtrlsUtil,
{$ENDIF}
    MMMixer,
    MMMixCtl;

const
    MM_SETPARENT = MM_USER + 1;

type
    TMMSetParentAction = (saInsert,saInsNoRole,saRemove,saUpdate);

    TMMSetParent = record
        Msg      : Cardinal;
        Action   : Cardinal;
        Control  : TControl;
        Result   : LongInt;
    end;

type
    TMMBlockSliderStyle  = (ssWin95);
    TMMBlockSliderRole   = (srPan,srLeftVolume,srRightVolume);

    {-- TMMCustomBlockSlider -----------------------------------------------}
    TMMCustomBlockSlider = class(TMMCustomMixerSlider)
    private
        FStyle  : TMMBlockSliderStyle;
        FRole   : TMMBlockSliderRole;
        FIsRole : Boolean;

        procedure SetStyle(Value: TMMBlockSliderStyle);
        procedure SetRole(Value: TMMBlockSliderRole);
    protected
        procedure SetParent(Value: TWinControl); override;
        procedure UpdateStyle; virtual;
{$IFDEF BUILD_ACTIVEX}
        procedure MMParentWindowChanged(var M: TMessage); message MM_PARENTWINDOWCHANGED;
        procedure ChangeDesigning(Value: Boolean); override;
{$ENDIF}
    public
        constructor Create(AOwner: TComponent); override;
    protected
        property Style: TMMBlockSliderStyle read FStyle write SetStyle default ssWin95;
        property Role: TMMBlockSliderRole read FRole write SetRole default srPan;

        property GrooveSize nodefault;
        property ScalePosition nodefault;
        property Logarithmic nodefault;
    end;

    {-- TMMMixerBlockSlider ---------------------------------------------}
    TMMMixerBlockSlider = class(TMMCustomBlockSlider)
    published
        property OnEnter;
        property OnExit;
        property OnKeyDown;
        property OnKeyPress;
        property OnKeyUp;
        property OnChange;
        property OnTrack;
        property OnTrackEnd;
        property OnDrawThumb;
        property OnDrawGroove;

        property Style;
        property Role;

        property Logarithmic;
        property Sensitivity;
        property Enabled;

        property Visible;
        property Color;
        property ParentShowHint;
        property PopupMenu;
        property ShowHint;
        property TabStop;
        property TabOrder;
        property Width;
        property Height;
        property Bevel;
        property Groove;
        property FocusAction;
        property FocusColor;
        property GrooveColor;
        property ThumbColor;
        property DisabledColor;
        property HandCursor;
        property Orientation;
        property GrooveSize;
        property ThumbWidth;
        property ThumbHeight;
        property ThumbStyle;

        property Scale;
        property ScalePosition;
        property ScaleDistance;
        property PicLeft;
        property PicRight;
        property Position;
    end;

    TMMBlockLevelStyle  = (lsWin95);
    TMMBlockLevelRole   = (lrLeftLevel,lrRightLevel);

    {-- TMMCustomBlockLevel ------------------------------------------------}
    TMMCustomBlockLevel = class(TMMCustomLevel)
    private
        FStyle  : TMMBlockLevelStyle;
        FRole   : TMMBlockLevelRole;
        FIsRole : Boolean;

        procedure SetStyle(Value: TMMBlockLevelStyle);
        procedure SetRole(Value: TMMBlockLevelRole);
    protected
        procedure UpdateStyle; virtual;
        procedure SetParent(Value: TWinControl); override;
{$IFDEF BUILD_ACTIVEX}
        procedure MMParentWindowChanged(var M: TMessage); message MM_PARENTWINDOWCHANGED;
        procedure ChangeDesigning(Value: Boolean); override;
{$ENDIF}
    public
        constructor Create(AOwner: TComponent); override;
    protected
        property Style: TMMBlockLevelStyle read FStyle write SetStyle default lsWin95;
        property Role: TMMBlockLevelRole read FRole write SetRole default lrLeftLevel;

        property Color nodefault;
        property SpotWidth nodefault;
        property Bar1Color nodefault;
        property Bar2Color nodefault;
        property Bar3Color nodefault;
        property Inactive1Color nodefault;
        property Inactive2Color nodefault;
        property Inactive3Color nodefault;
        property Point1 nodefault;
        property Point2 nodefault;
        property LogAmp nodefault;
        property NumPeaks nodefault;
    end;

    {-- TMMMixerBlockLevel ----------------------------------------------}
    TMMMixerBlockLevel = class(TMMCustomBlockLevel)
    published
        property OnClick;
        property OnDblClick;
        property OnMouseDown;
        property OnMouseMove;
        property OnMouseUp;
        property OnGainOverflow;
        property OnPcmOverflow;

        property Style;
        property Role;

        property Align;
        property Bevel;
        property ParentShowHint;
        property ParentColor;
        property ShowHint;
        property Visible;
        property Color;
        property Enabled;
        property Kind;
        property Height;
        property Width;
        property SpotSpace;
        property SpotWidth;
        property Bar1Color;
        property Bar2Color;
        property Bar3Color;
        property Inactive1Color;
        property Inactive2Color;
        property Inactive3Color;
        property InactiveDoted;
        property ActiveDoted;
        property Point1;
        property Point2;
        property Direction;
        property BitLength;
        property Channel;
        property Mode;
        property Gain;
        property Samples;
        property Sensitivy;
        property LogAmp;
        property NumPeaks;
        property PeakSpeed;
        property PeakDelay;
        property DecayMode;
        property Decay;
        property Value;
    end;

    {-- TMMCustomBlockCheck ----------------------------------------------}
    TMMCustomBlockCheck = class(TMMCustomMixerCheckBox)
    protected
        procedure SetParent(Value: TWinControl); override;
{$IFDEF BUILD_ACTIVEX}
        procedure MMParentWindowChanged(var M: TMessage); message MM_PARENTWINDOWCHANGED;
        procedure MMDesignModeChanged(var M: TMessage); message MM_DESIGNMODECHANGED;
    public
        constructor Create(AOwner: TComponent); override;
{$ENDIF}
    end;

    {-- TMMMixerBlockCheck -----------------------------------------------}
    TMMMixerBlockCheck = class(TMMCustomBlockCheck)
    published
        property OnDragDrop;
        property OnDragOver;
        property OnEndDrag;
        property OnEnter;
        property OnExit;
        property OnKeyDown;
        property OnKeyPress;
        property OnKeyUp;
        property OnMouseDown;
        property OnMouseMove;
        property OnMouseUp;
        property OnStartDrag;

        property AutoCaption;
        property Short;
        property Enabled;
        property Checked;
        property Caption;
        property Alignment;
        property Color;
        property Ctl3D;
        property DragCursor;
        property DragMode;
        property Font;
        property ParentColor;
        property ParentCtl3D;
        property ParentFont;
        property ParentShowHint;
        property PopupMenu;
        property ShowHint;
        property TabOrder;
        property TabStop;
        property Visible;
    end;

    TMMBlockLabelRole   = (lrLineTitle,lrPanTitle,lrVolumeTitle);

    {-- TMMCustomMixerLabel ----------------------------------------------}
{$IFNDEF BUILD_ACTIVEX}
    TMMCustomBlockLabel = class(TCustomLabel)
{$ELSE}
    TMMCustomBlockLabel = class(TStaticText)
{$ENDIF}
    private
        FRole  : TMMBlockLabelRole;
        FIsRole: Boolean;

        procedure SetRole(Value: TMMBlockLabelRole);
    protected
        procedure SetParent(Value: TWinControl); override;
{$IFDEF BUILD_ACTIVEX}
        procedure MMParentWindowChanged(var M: TMessage); message MM_PARENTWINDOWCHANGED;
        procedure MMDesignModeChanged(var M: TMessage); message MM_DESIGNMODECHANGED;
    public
        constructor Create(AOwner: TComponent); override;
{$ENDIF}
    protected
        property Role: TMMBlockLabelRole read FRole write SetRole default lrLineTitle;
    end;

    {-- TMMMixerBlockLabel ----------------------------------------------}
    TMMMixerBlockLabel = class(TMMCustomBlockLabel)
    published
        property OnClick;
        property OnDblClick;
        property OnDragDrop;
        property OnDragOver;
        property OnEndDrag;
        property OnMouseDown;
        property OnMouseMove;
        property OnMouseUp;
        property OnStartDrag;

        property Role;

        property Align;
        property Alignment;
        property AutoSize;
        property Caption;
        property Color;
        property DragCursor;
        property DragMode;
        property Enabled;
        property FocusControl;
        property Font;
        property ParentColor;
        property ParentFont;
        property ParentShowHint;
        property PopupMenu;
        property ShowAccelChar;
        property ShowHint;
        property Visible;
{$IFNDEF BUILD_ACTIVEX}
        property Transparent;
        property WordWrap;
{$ENDIF}
    end;

    EMMBlockError = class(Exception);
    TMMBlockStyle = (bsWin95);
    TMMMuteKind   = (mkMute,mkSelect);

    {-- TMMCustomMixerBlock ------------------------------------------------}
    TMMCustomMixerBlock = class(TMMCustomPanel)
    private
        FAutoArrange: Boolean;
        FAutoSize   : Boolean;
        FPan        : TMMCustomBlockSlider;
        FMute       : TMMCustomBlockCheck;
        FVolumeLeft : TMMCustomBlockSlider;
        FVolumeRight: TMMCustomBlockSlider;
        FLevelLeft  : TMMCustomBlockLevel;
        FLevelRight : TMMCustomBlockLevel;

        FLineTitle  : TMMCustomBlockLabel;
        FPanTitle   : TMMCustomBlockLabel;
        FVolumeTitle: TMMCustomBlockLabel;

        FPanCtl     : TMMPanControl;
        FVolumeCtl  : TMMVolumeControl;
        FMuteCtl    : TMMMixerControl;
        FConnector  : TMMMixerConnector;
        FPeakCtl    : TMMMixerControl;

        FLine       : TMMAudioLine;
        FObserver   : TMMObserver;

        FMixer      : TMMCustomMixerControl;
        FItem       : TMMItemIndex;
        FMixObserver: TMMObserver;

        FStyle      : TMMBlockStyle;
        FRemoving   : TControl;

        FKDummy     : TMMMuteKind;

        procedure SetLine(Value: TMMAudioLine);
        procedure LineNotify(Sender, Data : TObject);
        procedure SetAutoArrange(Value: Boolean);
        procedure SetAutoSize(Value: Boolean);
        procedure SetStyle(Value: TMMBlockStyle);
        procedure SetMixer(Value: TMMCustomMixerControl);
        procedure MixNotify(Sender, Data: TObject);
        procedure SetItem(Value: TMMItemIndex);
    protected
        procedure UpdateBlock; virtual;
        procedure Notification(AComponent: TComponent; Operation: TOperation); override;
        procedure InsertCtl(C: TComponent); virtual;
        procedure Loaded; override;
        procedure ArrangeControls; virtual;
        procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
        procedure ConnectLine;
        procedure DisconnectLine;
        procedure ConnectControls;
        procedure MMSetParent(var Msg: TMMSetParent); message MM_SETPARENT;
        procedure CollectControls;
{$IFDEF BUILD_ACTIVEX}
        procedure ChangeDesigning(Value: Boolean); override;
{$ENDIF}
    public
        constructor Create(AOwner: TComponent); override;
        destructor  Destroy; override;

        function GetMuteKind: TMMMuteKind;

        property Pan: TMMCustomBlockSlider read FPan;
        property Mute: TMMCustomBlockCheck read FMute;
        property VolumeLeft: TMMCustomBlockSlider read FVolumeLeft;
        property VolumeRight: TMMCustomBlockSlider read FVolumeRight;
        property LevelLeft: TMMCustomBlockLevel read FLevelLeft;
        property LevelRight: TMMCustomBlockLevel read FLevelRight;
        property LineTitle: TMMCustomBlockLabel read FLineTitle;
        property PanTitle: TMMCustomBlockLabel read FPanTitle;
        property VolumeTitle: TMMCustomBlockLabel read FVolumeTitle;
    protected
        property Line: TMMAudioLine read FLine write SetLine;
        property AutoArrange : Boolean read FAutoArrange write SetAutoArrange default True;
        property AutoSize : Boolean read FAutoSize write SetAutoSize default True;
        property Style: TMMBlockStyle read FStyle write SetStyle default bsWin95;
        property Mixer: TMMCustomMixerControl read FMixer write SetMixer;
        property Item: TMMItemIndex read FItem write SetItem default NoItem;
        property MuteKind: TMMMuteKind read GetMuteKind write FKDummy stored False;
    end;

    {-- TMMMixerBlock ------------------------------------------------------}
    TMMMixerBlock = class(TMMCustomMixerBlock)
    published
        property OnClick;
        property OnDblClick;
        property OnDragDrop;
        property OnDragOver;
        property OnEndDrag;
        property OnEnter;
        property OnExit;
        property OnMouseDown;
        property OnMouseMove;
        property OnMouseUp;
        property OnResize;
        {$IFDEF WIN32}
        property OnStartDrag;
        {$ENDIF}

        property Align;
        property Bevel;
        property DragCursor;
        property DragMode;
        property Enabled;
        property Color;
        property Ctl3D;
        property Font;
        property ParentColor;
        property ParentCtl3D;
        property ParentFont;
        property ParentShowHint;
        property PopupMenu;
        property ShowHint;
        property TabOrder;
        property TabStop;
        property Visible;

        property Line;
        property AutoArrange;
        property AutoSize;
        property Style;
        property Mixer;
        property Item;
        property MuteKind;
    end;

implementation

const
    SpkLeftBmp  = 'SPK_LEFT';
    SpkRightBmp = 'SPK_RIGHT';

{$IFDEF DELPHI2}
const

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -