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

Delphi控件源码

开发平台:

Delphi

  1.     (*********************************************************************
  2.      *  DSPack 2.3.3                                                     *
  3.      *                                                                   *
  4.      *  home page : http://www.progdigy.com                              *
  5.      *  email     : hgourvest@progdigy.com                               *
  6.      *   Thanks to Michael Andersen. (DSVideoWindowEx)                   *
  7.      *                                                                   *
  8.      *  date      : 21-02-2003                                           *
  9.      *                                                                   *
  10.      *  The contents of this file are used with permission, subject to   *
  11.      *  the Mozilla Public License Version 1.1 (the "License"); you may  *
  12.      *  not use this file except in compliance with the License. You may *
  13.      *  obtain a copy of the License at                                  *
  14.      *  http://www.mozilla.org/MPL/MPL-1.1.html                          *
  15.      *                                                                   *
  16.      *  Software distributed under the License is distributed on an      *
  17.      *  "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or   *
  18.      *  implied. See the License for the specific language governing     *
  19.      *  rights and limitations under the License.                        *
  20.      *                                                                   *
  21.      *********************************************************************)
  22. {$IFDEF VER140} {$WARN SYMBOL_DEPRECATED OFF} {$ENDIF}
  23. {$IFDEF VER150}
  24.   {$WARN SYMBOL_DEPRECATED OFF}
  25.   {$WARN UNSAFE_CODE OFF}
  26.   {$WARN UNSAFE_TYPE OFF}
  27.   {$WARN UNSAFE_CAST OFF}
  28. {$ENDIF}
  29. unit BaseFilterEditor;
  30. interface
  31. uses
  32.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  33.   Dialogs, StdCtrls, DSUTIL, DirectShow9, ComCtrls, DSPack, Menus, ExtCtrls,
  34.   Buttons;
  35. type
  36.   TFormBaseFilter = class(TForm)
  37.     btOK: TButton;
  38.     btCancel: TButton;
  39.     FilterGraph: TFilterGraph;
  40.     Filter: TFilter;
  41.     PopupMenu: TPopupMenu;
  42.     PropertyPage: TMenuItem;
  43.     VFWDisplay: TMenuItem;
  44.     VFWFormat: TMenuItem;
  45.     VFWSource: TMenuItem;
  46.     VFWConfig: TMenuItem;
  47.     VFWCapture: TMenuItem;
  48.     Config1: TMenuItem;
  49.     VFWAbout: TMenuItem;
  50.     PinMenu: TPopupMenu;
  51.     PinProperty: TMenuItem;
  52.     PageControl1: TPageControl;
  53.     SelectorSheet: TTabSheet;
  54.     Label1: TLabel;
  55.     Label2: TLabel;
  56.     Label6: TLabel;
  57.     Filters: TTreeView;
  58.     Interfaces: TListBox;
  59.     Pins: TListBox;
  60.     PinsSheet: TTabSheet;
  61.     Label3: TLabel;
  62.     Label4: TLabel;
  63.     Label5: TLabel;
  64.     Pins1: TListBox;
  65.     PinInterfaces: TListBox;
  66.     MediaTypes: TListBox;
  67.     MonikerTag: TMemo;
  68.     InfoBtn: TSpeedButton;
  69.     InfoSheet: TTabSheet;
  70.     Panel1: TPanel;
  71.     Panel2: TPanel;
  72.     Label7: TLabel;
  73.     Label8: TLabel;
  74.     Label9: TLabel;
  75.     Label10: TLabel;
  76.     Label11: TLabel;
  77.     Label12: TLabel;
  78.     Label13: TLabel;
  79.     Label14: TLabel;
  80.     Label15: TLabel;
  81.     Image1: TImage;
  82.     Image2: TImage;
  83.     Image3: TImage;
  84.     Image4: TImage;
  85.     Image5: TImage;
  86.     Image6: TImage;
  87.     Image7: TImage;
  88.     Label16: TLabel;
  89.     Label17: TLabel;
  90.     procedure FormShow(Sender: TObject);
  91.     procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  92.     procedure PopupMenuPopup(Sender: TObject);
  93.     procedure PropertyPageClick(Sender: TObject);
  94.     procedure VFWDisplayClick(Sender: TObject);
  95.     procedure VFWFormatClick(Sender: TObject);
  96.     procedure VFWSourceClick(Sender: TObject);
  97.     procedure Config1Click(Sender: TObject);
  98.     procedure VFWAboutClick(Sender: TObject);
  99.     procedure PinMenuPopup(Sender: TObject);
  100.     procedure PinPropertyClick(Sender: TObject);
  101.     procedure PinsSheetShow(Sender: TObject);
  102.     procedure Pins1Click(Sender: TObject);
  103.     procedure InterfacesDblClick(Sender: TObject);
  104.     procedure PinInterfacesDblClick(Sender: TObject);
  105.     procedure PinsDrawItem(Control: TWinControl; Index: Integer;
  106.       Rect: TRect; State: TOwnerDrawState);
  107.     procedure FiltersChange(Sender: TObject; Node: TTreeNode);
  108.     procedure PinsMeasureItem(Control: TWinControl; Index: Integer;
  109.       var Height: Integer);
  110.     procedure FiltersDblClick(Sender: TObject);
  111.     procedure FiltersCustomDrawItem(Sender: TCustomTreeView;
  112.       Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
  113.     procedure InfoBtnClick(Sender: TObject);
  114.   public
  115.     SysDevEnum: TSysDevEnum;
  116.     PinList: TPinList;
  117.     InPinPic,
  118.     OutPinPic : TBitmap;
  119.     constructor Create(AOwner: TComponent); override;
  120.     destructor  Destroy; override;
  121.     procedure RefreshTree;
  122. //    procedure FiltersClick(Sender: TObject);
  123.     procedure GetFilterInfo;
  124.   end;
  125.   TDSitf = record
  126.     name : string;
  127.     itf  : TGUID;
  128.   end;
  129.   pNodeItem = ^TNodeItem;
  130.   TNodeItem = Record
  131.     Index      : integer;
  132.     Color      : TColor;
  133.     MonikerStr : WideString;
  134.   End;
  135. const
  136.   FilterColors : array[0..4] of TColor = (clBlack, clPurple, clBlue, clRed, clGreen);
  137.   DSItfs : array[0..382] of TDSitf =
  138. ((name: 'IPin'; itf: '{56A86891-0AD4-11CE-B03A-0020AF0BA770}'),
  139.  (name: 'IEnumPins'; itf: '{56A86892-0AD4-11CE-B03A-0020AF0BA770}'),
  140.  (name: 'IEnumMediaTypes'; itf: '{89C31040-846B-11CE-97D3-00AA0055595A}'),
  141.  (name: 'IFilterGraph'; itf: '{56A8689F-0AD4-11CE-B03A-0020AF0BA770}'),
  142.  (name: 'IEnumFilters'; itf: '{56A86893-0AD4-11CE-B03A-0020AF0BA770}'),
  143.  (name: 'IMediaFilter'; itf: '{56A86899-0AD4-11CE-B03A-0020AF0BA770}'),
  144.  (name: 'IBaseFilter'; itf: '{56A86895-0AD4-11CE-B03A-0020AF0BA770}'),
  145.  (name: 'IReferenceClock'; itf: '{56A86897-0AD4-11CE-B03A-0020AF0BA770}'),
  146.  (name: 'IReferenceClock2'; itf: '{36B73885-C2C8-11CF-8B46-00805F6CEF60}'),
  147.  (name: 'IMediaSample'; itf: '{56A8689A-0AD4-11CE-B03A-0020AF0BA770}'),
  148.  (name: 'IMediaSample2'; itf: '{36B73884-C2C8-11CF-8B46-00805F6CEF60}'),
  149.  (name: 'IMemAllocator'; itf: '{56A8689C-0AD4-11CE-B03A-0020AF0BA770}'),
  150.  (name: 'IMemInputPin'; itf: '{56A8689D-0AD4-11CE-B03A-0020AF0BA770}'),
  151.  (name: 'IAMovieSetup'; itf: '{A3D8CEC0-7E5A-11CF-BBC5-00805F6CEF20}'),
  152.  (name: 'IMediaSeeking'; itf: '{36B73880-C2C8-11CF-8B46-00805F6CEF60}'),
  153.  (name: 'IEnumRegFilters'; itf: '{56A868A4-0AD4-11CE-B03A-0020AF0BA770}'),
  154.  (name: 'IFilterMapper'; itf: '{56A868A3-0AD4-11CE-B03A-0020AF0BA770}'),
  155.  (name: 'IFilterMapper2'; itf: '{B79BB0B0-33C1-11D1-ABE1-00A0C905F375}'),
  156.  (name: 'IQualityControl'; itf: '{56A868A5-0AD4-11CE-B03A-0020AF0BA770}'),
  157.  (name: 'IOverlayNotify'; itf: '{56A868A0-0AD4-11CE-B03A-0020AF0BA770}'),
  158.  (name: 'IOverlay'; itf: '{56A868A1-0AD4-11CE-B03A-0020AF0BA770}'),
  159.  (name: 'IMediaEventSink'; itf: '{56A868A2-0AD4-11CE-B03A-0020AF0BA770}'),
  160.  (name: 'IFileSourceFilter'; itf: '{56A868A6-0AD4-11CE-B03A-0020AF0BA770}'),
  161.  (name: 'IFileSinkFilter'; itf: '{A2104830-7C70-11CF-8BCE-00AA00A3F1A6}'),
  162.  (name: 'IFileSinkFilter2'; itf: '{00855B90-CE1B-11D0-BD4F-00A0C911CE86}'),
  163.  (name: 'IFileAsyncIO'; itf: '{56A868A7-0AD4-11CE-B03A-0020AF0BA770}'),
  164.  (name: 'IGraphBuilder'; itf: '{56A868A9-0AD4-11CE-B03A-0020AF0BA770}'),
  165.  (name: 'ICaptureGraphBuilder'; itf: '{BF87B6E0-8C27-11D0-B3F0-00AA003761C5}'),
  166.  (name: 'IAMCopyCaptureFileProgress'; itf: '{670D1D20-A068-11D0-B3F0-00AA003761C5}'),
  167.  (name: 'IFilterGraph2'; itf: '{36B73882-C2C8-11CF-8B46-00805F6CEF60}'),
  168.  (name: 'IStreamBuilder'; itf: '{56A868BF-0AD4-11CE-B03A-0020AF0BA770}'),
  169.  (name: 'IAsyncReader'; itf: '{56A868AA-0AD4-11CE-B03A-0020AF0BA770}'),
  170.  (name: 'IGraphVersion'; itf: '{56A868AB-0AD4-11CE-B03A-0020AF0BA770}'),
  171.  (name: 'IResourceConsumer'; itf: '{56A868AD-0AD4-11CE-B03A-0020AF0BA770}'),
  172.  (name: 'IResourceManager'; itf: '{56A868AC-0AD4-11CE-B03A-0020AF0BA770}'),
  173.  (name: 'IDistributorNotify'; itf: '{56A868AF-0AD4-11CE-B03A-0020AF0BA770}'),
  174.  (name: 'IAMStreamControl'; itf: '{36B73881-C2C8-11CF-8B46-00805F6CEF60}'),
  175.  (name: 'ISeekingPassThru'; itf: '{36B73883-C2C8-11CF-8B46-00805F6CEF60}'),
  176.  (name: 'IAMStreamConfig'; itf: '{C6E13340-30AC-11D0-A18C-00A0C9118956}'),
  177.  (name: 'IConfigInterleaving'; itf: '{BEE3D220-157B-11D0-BD23-00A0C911CE86}'),
  178.  (name: 'IConfigAviMux'; itf: '{5ACD6AA0-F482-11CE-8B67-00AA00A3F1A6}'),
  179.  (name: 'IAMVideoCompression'; itf: '{C6E13343-30AC-11D0-A18C-00A0C9118956}'),
  180.  (name: 'IAMVfwCaptureDialogs'; itf: '{D8D715A0-6E5E-11D0-B3F0-00AA003761C5}'),
  181.  (name: 'IAMVfwCompressDialogs'; itf: '{D8D715A3-6E5E-11D0-B3F0-00AA003761C5}'),
  182.  (name: 'IAMDroppedFrames'; itf: '{C6E13344-30AC-11D0-A18C-00A0C9118956}'),
  183.  (name: 'IAMAudioInputMixer'; itf: '{54C39221-8380-11D0-B3F0-00AA003761C5}'),
  184.  (name: 'IAMAnalogVideoDecoder'; itf: '{C6E13350-30AC-11D0-A18C-00A0C9118956}'),
  185.  (name: 'IAMVideoProcAmp'; itf: '{C6E13360-30AC-11D0-A18C-00A0C9118956}'),
  186.  (name: 'IAMCameraControl'; itf: '{C6E13370-30AC-11D0-A18C-00A0C9118956}'),
  187.  (name: 'IAMCrossbar'; itf: '{C6E13380-30AC-11D0-A18C-00A0C9118956}'),
  188.  (name: 'IAMTuner'; itf: '{211A8761-03AC-11D1-8D13-00AA00BD8339}'),
  189.  (name: 'IAMTunerNotification'; itf: '{211A8760-03AC-11D1-8D13-00AA00BD8339}'),
  190.  (name: 'IAMTVTuner'; itf: '{211A8766-03AC-11D1-8D13-00AA00BD8339}'),
  191.  (name: 'IBPCSatelliteTuner'; itf: '{211A8765-03AC-11D1-8D13-00AA00BD8339}'),
  192.  (name: 'IAMTVAudio'; itf: '{83EC1C30-23D1-11D1-99E6-00A0C9560266}'),
  193.  (name: 'IAMTVAudioNotification'; itf: '{83EC1C33-23D1-11D1-99E6-00A0C9560266}'),
  194.  (name: 'IAMAnalogVideoEncoder'; itf: '{C6E133B0-30AC-11D0-A18C-00A0C9118956}'),
  195.  (name: 'IMediaPropertyBag'; itf: '{6025A880-C0D5-11D0-BD4E-00A0C911CE86}'),
  196.  (name: 'IPersistMediaPropertyBag'; itf: '{5738E040-B67F-11D0-BD4D-00A0C911CE86}'),
  197.  (name: 'IAMPhysicalPinInfo'; itf: '{F938C991-3029-11CF-8C44-00AA006B6814}'),
  198.  (name: 'IAMExtDevice'; itf: '{B5730A90-1A2C-11CF-8C23-00AA006B6814}'),
  199.  (name: 'IAMExtTransport'; itf: '{A03CD5F0-3045-11CF-8C44-00AA006B6814}'),
  200.  (name: 'IAMTimecodeReader'; itf: '{9B496CE1-811B-11CF-8C77-00AA006B6814}'),
  201.  (name: 'IAMTimecodeGenerator'; itf: '{9B496CE0-811B-11CF-8C77-00AA006B6814}'),
  202.  (name: 'IAMTimecodeDisplay'; itf: '{9B496CE2-811B-11CF-8C77-00AA006B6814}'),
  203.  (name: 'IAMDevMemoryAllocator'; itf: '{C6545BF0-E76B-11D0-BD52-00A0C911CE86}'),
  204.  (name: 'IAMDevMemoryControl'; itf: '{C6545BF1-E76B-11D0-BD52-00A0C911CE86}'),
  205.  (name: 'IAMStreamSelect'; itf: '{C1960960-17F5-11D1-ABE1-00A0C905F375}'),
  206.  (name: 'IAMovie'; itf: '{359ACE10-7688-11CF-8B23-00805F6CEF60}'),
  207.  (name: 'ICreateDevEnum'; itf: '{29840822-5B84-11D0-BD3B-00A0C911CE86}'),
  208.  (name: 'IDvdControl'; itf: '{A70EFE61-E2A3-11D0-A9BE-00AA0061BE93}'),
  209.  (name: 'IDvdControl2'; itf: '{33BC7430-EEC0-11D2-8201-00A0C9D74842}'),
  210.  (name: 'IDvdInfo'; itf: '{A70EFE60-E2A3-11D0-A9BE-00AA0061BE93}'),
  211.  (name: 'IDvdInfo2'; itf: '{34151510-EEC0-11D2-8201-00A0C9D74842}'),
  212.  (name: 'IDvdGraphBuilder'; itf: '{FCC152B6-F372-11D0-8E00-00C04FD7C08B}'),
  213.  (name: 'IDvdState'; itf: '{86303D6D-1C4A-4087-AB42-F711167048EF}'),
  214.  (name: 'IDvdCmd'; itf: '{5A4A97E4-94EE-4A55-9751-74B5643AA27D}'),
  215.  (name: 'IVideoFrameStep'; itf: '{E46A9787-2B71-444D-A4B5-1FAB7B708D6A}'),
  216.  (name: 'IFilterMapper3'; itf: '{B79BB0B1-33C1-11D1-ABE1-00A0C905F375}'),
  217.  (name: 'IOverlayNotify2'; itf: '{680EFA10-D535-11D1-87C8-00A0C9223196}'),
  218.  (name: 'ICaptureGraphBuilder2'; itf: '{93E5A4E0-2D50-11D2-ABFA-00A0C9C6E38D}'),
  219.  (name: 'IMemAllocatorCallbackTemp'; itf: '{379A0CF0-C1DE-11D2-ABF5-00A0C905F375}'),
  220.  (name: 'IMemAllocatorNotifyCallbackTemp'; itf: '{92980B30-C1DE-11D2-ABF5-00A0C905F375}'),
  221.  (name: 'IAMVideoControl'; itf: '{6A2E0670-28E4-11D0-A18C-00A0C9118956}'),
  222.  (name: 'IKsPropertySet'; itf: '{31EFAC30-515C-11D0-A9AA-00AA0061BE93}'),
  223.  (name: 'IAMResourceControl'; itf: '{8389D2D0-77D7-11D1-ABE6-00A0C905F375}'),
  224.  (name: 'IAMClockAdjust'; itf: '{4D5466B0-A49C-11D1-ABE8-00A0C905F375}'),
  225.  (name: 'IAMFilterMiscFlags'; itf: '{2DD74950-A890-11D1-ABE8-00A0C905F375}'),
  226.  (name: 'IDrawVideoImage'; itf: '{48EFB120-AB49-11D2-AED2-00A0C995E8D5}'),
  227.  (name: 'IDecimateVideoImage'; itf: '{2E5EA3E0-E924-11D2-B6DA-00A0C995E8DF}'),
  228.  (name: 'IAMVideoDecimationProperties'; itf: '{60D32930-13DA-11D3-9EC6-C4FCAEF5C7BE}'),
  229.  (name: 'IAMLatency'; itf: '{62EA93BA-EC62-11D2-B770-00C04FB6BD3D}'),
  230.  (name: 'IAMPushSource'; itf: '{F185FE76-E64E-11D2-B76E-00C04FB6BD3D}'),
  231.  (name: 'IAMDeviceRemoval'; itf: '{F90A6130-B658-11D2-AE49-0000F8754B99}'),
  232.  (name: 'IDVEnc'; itf: '{D18E17A0-AACB-11D0-AFB0-00AA00B67A42}'),
  233.  (name: 'IIPDVDec'; itf: '{B8E8BD60-0BFE-11D0-AF91-00AA00B67A42}'),
  234.  (name: 'IDVRGB219'; itf: '{58473A19-2BC8-4663-8012-25F81BABDDD1}'),
  235.  (name: 'IDVSplitter'; itf: '{92A3A302-DA7C-4A1F-BA7E-1802BB5D2D02}'),
  236.  (name: 'IAMAudioRendererStats'; itf: '{22320CB2-D41A-11D2-BF7C-D7CB9DF0BF93}'),
  237.  (name: 'IAMGraphStreams'; itf: '{632105FA-072E-11D3-8AF9-00C04FB6BD3D}'),
  238.  (name: 'IAMOverlayFX'; itf: '{62FAE250-7E65-4460-BFC9-6398B322073C}'),
  239.  (name: 'IAMOpenProgress'; itf: '{8E1C39A1-DE53-11CF-AA63-0080C744528D}'),
  240.  (name: 'IMpeg2Demultiplexer'; itf: '{436EEE9C-264F-4242-90E1-4E330C107512}'),
  241.  (name: 'IEnumStreamIdMap'; itf: '{945C1566-6202-46FC-96C7-D87F289C6534}'),
  242.  (name: 'IMPEG2StreamIdMap'; itf: '{D0E04C47-25B8-4369-925A-362A01D95444}'),
  243.  (name: 'IRegisterServiceProvider'; itf: '{7B3A2F01-0751-48DD-B556-004785171C54}'),
  244.  (name: 'IAMDecoderCaps'; itf: '{C0DFF467-D499-4986-972B-E1D9090FA941}'),
  245.  (name: 'IAMClockSlave'; itf: '{9FD52741-176D-4B36-8F51-CA8F933223BE}'),
  246.  (name: 'IDDrawExclModeVideo'; itf: '{153ACC21-D83B-11D1-82BF-00A0C9696C8F}'),
  247.  (name: 'IDDrawExclModeVideoCallback'; itf: '{913C24A0-20AB-11D2-9038-00A0C9697298}'),
  248.  (name: 'IPinConnection'; itf: '{4A9A62D3-27D4-403D-91E9-89F540E55534}'),
  249.  (name: 'IPinFlowControl'; itf: '{C56E9858-DBF3-4F6B-8119-384AF2060DEB}'),
  250.  (name: 'IGraphConfig'; itf: '{03A1EB8E-32BF-4245-8502-114D08A9CB88}'),
  251.  (name: 'IGraphConfigCallback'; itf: '{ADE0FD60-D19D-11D2-ABF6-00A0C905F375}'),
  252.  (name: 'IFilterChain'; itf: '{DCFBDCF6-0DC2-45F5-9AB2-7C330EA09C29}'),
  253.  (name: 'IVMRImagePresenter'; itf: '{CE704FE7-E71E-41FB-BAA2-C4403E1182F5}'),
  254.  (name: 'IVMRSurfaceAllocator'; itf: '{31CE832E-4484-458B-8CCA-F4D7E3DB0B52}'),
  255.  (name: 'IVMRSurfaceAllocatorNotify'; itf: '{AADA05A8-5A4E-4729-AF0B-CEA27AED51E2}'),
  256.  (name: 'IVMRWindowlessControl'; itf: '{0EB1088C-4DCD-46F0-878F-39DAE86A51B7}'),
  257.  (name: 'IVMRMixerControl'; itf: '{1C1A17B0-BED0-415D-974B-DC6696131599}'),
  258.  (name: 'IVMRMonitorConfig'; itf: '{9CF0B1B6-FBAA-4B7F-88CF-CF1F130A0DCE}'),
  259.  (name: 'IVMRFilterConfig'; itf: '{9E5530C5-7034-48B4-BB46-0B8A6EFC8E36}'),
  260.  (name: 'IVMRMixerBitmap'; itf: '{1E673275-0257-40AA-AF20-7C608D4A0428}'),
  261.  (name: 'IVMRImageCompositor'; itf: '{7A4FB5AF-479F-4074-BB40-CE6722E43C82}'),
  262.  (name: 'IVMRVideoStreamControl'; itf: '{058D1F11-2A54-4BEF-BD54-DF706626B727}'),
  263.  (name: 'IVMRSurface'; itf: '{A9849BBE-9EC8-4263-B764-62730F0D15D0}'),
  264.  (name: 'IVPManager'; itf: '{AAC18C18-E186-46D2-825D-A1F8DC8E395A}'),
  265.  (name: 'IVMRImagePresenterConfig'; itf: '{9F3A1C85-8555-49BA-935F-BE5B5B29D178}'),
  266.  (name: 'IVMRImagePresenterExclModeConfig'; itf: '{E6F7CE40-4673-44F1-8F77-5499D68CB4EA}'),
  267.  (name: 'IAMBufferNegotiation'; itf: '{56ED71A0-AF5F-11D0-B3F0-00AA003761C5}'),
  268.  (name: 'IMultiMediaStream'; itf: '{B502D1BC-9A57-11D0-8FDE-00C04FD9189D}'),
  269.  (name: 'IMediaStream'; itf: '{B502D1BD-9A57-11D0-8FDE-00C04FD9189D}'),
  270.  (name: 'IStreamSample'; itf: '{B502D1BE-9A57-11D0-8FDE-00C04FD9189D}'),
  271.  (name: 'IDirectShowStream'; itf: '{7DB01C96-C0C3-11D0-8FF1-00C04FD9189D}'),
  272.  (name: 'IAMMultiMediaStream'; itf: '{BEBE595C-9A6F-11D0-8FDE-00C04FD9189D}'),
  273.  (name: 'IAMMediaStream'; itf: '{BEBE595D-9A6F-11D0-8FDE-00C04FD9189D}'),
  274.  (name: 'IMediaStreamFilter'; itf: '{BEBE595E-9A6F-11D0-8FDE-00C04FD9189D}'),
  275.  (name: 'IDirectDrawMediaSampleAllocator'; itf: '{AB6B4AFC-F6E4-11D0-900D-00C04FD9189D}'),
  276.  (name: 'IDirectDrawMediaSample'; itf: '{AB6B4AFE-F6E4-11D0-900D-00C04FD9189D}'),
  277.  (name: 'IAMMediaTypeStream'; itf: '{AB6B4AFA-F6E4-11D0-900D-00C04FD9189D}'),
  278.  (name: 'IAMMediaTypeSample'; itf: '{AB6B4AFB-F6E4-11D0-900D-00C04FD9189D}'),
  279.  (name: 'IDirectDrawMediaStream'; itf: '{F4104FCE-9A70-11D0-8FDE-00C04FD9189D}'),
  280.  (name: 'IDirectDrawStreamSample'; itf: '{F4104FCF-9A70-11D0-8FDE-00C04FD9189D}'),
  281.  (name: 'IAudioMediaStream'; itf: '{F7537560-A3BE-11D0-8212-00C04FC32C45}'),
  282.  (name: 'IAudioStreamSample'; itf: '{345FEE00-ABA5-11D0-8212-00C04FC32C45}'),
  283.  (name: 'IMemoryData'; itf: '{327FC560-AF60-11D0-8212-00C04FC32C45}'),
  284.  (name: 'IAudioData'; itf: '{54C719C0-AF60-11D0-8212-00C04FC32C45}'),
  285.  (name: 'IMixerPinConfig'; itf: '{593CDDE1-0759-11D1-9E69-00C04FD7C15B}'),
  286.  (name: 'IMixerPinConfig2'; itf: '{EBF47182-8764-11D1-9E69-00C04FD7C15B}'),
  287.  (name: 'IAMCollection'; itf: '{56A868B9-0AD4-11CE-B03A-0020AF0BA770}'),
  288.  (name: 'IMediaControl'; itf: '{56A868B1-0AD4-11CE-B03A-0020AF0BA770}'),
  289.  (name: 'IMediaEvent'; itf: '{56A868B6-0AD4-11CE-B03A-0020AF0BA770}'),
  290.  (name: 'IMediaEventEx'; itf: '{56A868C0-0AD4-11CE-B03A-0020AF0BA770}'),
  291.  (name: 'IMediaPosition'; itf: '{56A868B2-0AD4-11CE-B03A-0020AF0BA770}'),
  292.  (name: 'IBasicAudio'; itf: '{56A868B3-0AD4-11CE-B03A-0020AF0BA770}'),
  293.  (name: 'IVideoWindow'; itf: '{56A868B4-0AD4-11CE-B03A-0020AF0BA770}'),
  294.  (name: 'IBasicVideo'; itf: '{56A868B5-0AD4-11CE-B03A-0020AF0BA770}'),
  295.  (name: 'IBasicVideo2'; itf: '{329BB360-F6EA-11D1-9038-00A0C9697298}'),
  296.  (name: 'IDeferredCommand'; itf: '{56A868B8-0AD4-11CE-B03A-0020AF0BA770}'),
  297.  (name: 'IQueueCommand'; itf: '{56A868B7-0AD4-11CE-B03A-0020AF0BA770}'),
  298.  (name: 'IFilterInfo'; itf: '{56A868BA-0AD4-11CE-B03A-0020AF0BA770}'),
  299.  (name: 'IRegFilterInfo'; itf: '{56A868BB-0AD4-11CE-B03A-0020AF0BA770}'),
  300.  (name: 'IMediaTypeInfo'; itf: '{56A868BC-0AD4-11CE-B03A-0020AF0BA770}'),
  301.  (name: 'IPinInfo'; itf: '{56A868BD-0AD4-11CE-B03A-0020AF0BA770}'),
  302.  (name: 'IAMStats'; itf: '{BC9BCF80-DCD2-11D2-ABF6-00A0C905F375}'),
  303.  (name: 'IAMNetShowConfig'; itf: '{FA2AA8F1-8B62-11D0-A520-000000000000}'),
  304.  (name: 'IAMChannelInfo'; itf: '{FA2AA8F2-8B62-11D0-A520-000000000000}'),
  305.  (name: 'IAMNetworkStatus'; itf: '{FA2AA8F3-8B62-11D0-A520-000000000000}'),
  306.  (name: 'IAMExtendedSeeking'; itf: '{FA2AA8F9-8B62-11D0-A520-000000000000}'),
  307.  (name: 'IAMNetShowExProps'; itf: '{FA2AA8F5-8B62-11D0-A520-000000000000}'),
  308.  (name: 'IAMExtendedErrorInfo'; itf: '{FA2AA8F6-8B62-11D0-A520-000000000000}'),
  309.  (name: 'IAMMediaContent'; itf: '{FA2AA8F4-8B62-11D0-A520-000000000000}'),
  310.  (name: 'IAMMediaContent2'; itf: '{CE8F78C1-74D9-11D2-B09D-00A0C9A81117}'),
  311.  (name: 'IAMNetShowPreroll'; itf: '{AAE7E4E2-6388-11D1-8D93-006097C9A2B2}'),
  312.  (name: 'IDShowPlugin'; itf: '{4746B7C8-700E-11D1-BECC-00C04FB6E937}'),
  313.  (name: 'IAMPlayListItem'; itf: '{56A868FF-0AD4-11CE-B0A3-0020AF0BA770}'),
  314.  (name: 'IAMPlayList'; itf: '{56A868FE-0AD4-11CE-B0A3-0020AF0BA770}'),
  315.  (name: 'ISpecifyParticularPages'; itf: '{4C437B91-6E9E-11D1-A704-006097C4E476}'),
  316.  (name: 'IAMRebuild'; itf: '{02EF04DD-7580-11D1-BECE-00C04FB6E937}'),
  317.  (name: 'IDirectDrawVideo'; itf: '{36D39EB0-DD75-11CE-BF0E-00AA0055595A}'),
  318.  (name: 'IQualProp'; itf: '{1BD0ECB0-F8E2-11CE-AAC6-0020AF0B99A3}'),
  319.  (name: 'IFullScreenVideo'; itf: '{DD1D7110-7836-11CF-BF47-00AA0055595A}'),
  320.  (name: 'IFullScreenVideoEx'; itf: '{53479470-F1DD-11CF-BC42-00AA00AC74F6}'),
  321.  (name: 'IBaseVideoMixer'; itf: '{61DED640-E912-11CE-A099-00AA00479A58}'),
  322.  (name: 'IAMDirectSound'; itf: '{546F4260-D53E-11CF-B3F0-00AA003761C5}'),
  323.  (name: 'IVPConfig'; itf: '{BC29A660-30E3-11D0-9E69-00C04FD7C15B}'),
  324.  (name: 'IVPVBIConfig'; itf: '{EC529B00-1A1F-11D1-BAD9-00609744111A}'),
  325.  (name: 'IVPNotify'; itf: '{C76794A1-D6C5-11D0-9E69-00C04FD7C15B}'),
  326.  (name: 'IVPVBINotify'; itf: '{EC529B01-1A1F-11D1-BAD9-00609744111A}'),
  327.  (name: 'IVPNotify2'; itf: '{EBF47183-8764-11D1-9E69-00C04FD7C15B}'),
  328.  (name: 'IMpegAudioDecoder'; itf: '{B45DD570-3C77-11D1-ABE1-00A0C905F375}'),
  329.  (name: 'IAMLine21Decoder'; itf: '{6E8D4A21-310C-11D0-B79A-00AA003767A7}'),
  330.  (name: 'IVPObject'; itf: '{CE292862-FC88-11D0-9E69-00C04FD7C15B}'),
  331.  (name: 'IVPControl'; itf: '{25DF12C1-3DE0-11D1-9E69-00C04FD7C15B}'),
  332.  (name: 'IVPVBIObject'; itf: '{814B9802-1C88-11D1-BAD9-00609744111A}'),
  333.  (name: 'IAMWstDecoder'; itf: '{C056DE21-75C2-11D3-A184-00105AEF9F33}'),
  334.  (name: 'IKsInterfaceHandler'; itf: '{D3ABC7E0-9A61-11D0-A40D-00A0C9223196}'),
  335.  (name: 'IKsDataTypeHandler'; itf: '{5FFBAA02-49A3-11D0-9F36-00AA00A216A1}'),
  336.  (name: 'IKsPin'; itf: '{B61178D1-A2D9-11CF-9E53-00AA00A216A1}'),
  337.  (name: 'IKsControl'; itf: '{28F54685-06FD-11D2-B27A-00A0C9223196}'),
  338.  (name: 'IKsPinFactory'; itf: '{CD5EBE6B-8B6E-11D1-8AE0-00A0C9223196}'),
  339.  (name: 'IAMVideoAcceleratorNotify'; itf: '{256A6A21-FBAD-11D1-82BF-00A0C9696C8F}'),
  340.  (name: 'IAMVideoAccelerator'; itf: '{256A6A22-FBAD-11D1-82BF-00A0C9696C8F}'),
  341.  (name: 'ICreatePropBagOnRegKey'; itf: '{8A674B48-1F63-11D3-B64C-00C04F79498E}'),
  342.  (name: 'ITuningSpaces'            ; itf: '{901284E4-33FE-4b69-8D63-634A596F3756}'),
  343.  (name: 'ITuningSpaceContainer'    ; itf: '{5B692E84-E2F1-11d2-9493-00C04F72D980}'),
  344.  (name: 'ITuningSpace'             ; itf: '{061C6E30-E622-11d2-9493-00C04F72D980}'),
  345.  (name: 'IEnumTuningSpaces'        ; itf: '{8B8EB248-FC2B-11d2-9D8C-00C04F72D980}'),
  346.  (name: 'IDVBTuningSpace'          ; itf: '{ADA0B268-3B19-4e5b-ACC4-49F852BE13BA}'),
  347.  (name: 'IAnalogTVTuningSpace'     ; itf: '{2A6E293C-2595-11d3-B64C-00C04F79498E}'),
  348.  (name: 'IATSCTuningSpace'         ; itf: '{0369B4E2-45B6-11d3-B650-00C04F79498E}'),
  349.  (name: 'IAnalogRadioTuningSpace'  ; itf: '{2A6E293B-2595-11d3-B64C-00C04F79498E}'),
  350.  (name: 'ITuneRequest'             ; itf: '{07DDC146-FC3D-11d2-9D8C-00C04F72D980}'),
  351.  (name: 'IChannelTuneRequest'      ; itf: '{0369B4E0-45B6-11d3-B650-00C04F79498E}'),
  352.  (name: 'IATSCChannelTuneRequest'  ; itf: '{0369B4E1-45B6-11d3-B650-00C04F79498E}'),
  353.  (name: 'IDVBTuneRequest'          ; itf: '{0D6F567E-A636-42bb-83BA-CE4C1704AFA2}'),
  354.  (name: 'ITuner'                   ; itf: '{28C52640-018A-11d3-9D8E-00C04F72D980}'),
  355.  (name: 'IScanningTuner'           ; itf: '{1DFD0A5C-0284-11d3-9D8E-00C04F72D980}'),
  356.  (name: 'ITunerEvents'             ; itf: '{68481420-0280-11d3-9D8E-00C04F72D980}'),
  357.  (name: 'ISignalEvents'            ; itf: '{85E2439E-0E23-11d3-9D8E-00C04F72D980}'),
  358.  (name: 'IComponentType'           ; itf: '{6A340DC0-0311-11d3-9D8E-00C04F72D980}'),
  359.  (name: 'ILanguageComponentType'   ; itf: '{B874C8BA-0FA2-11d3-9D8E-00C04F72D980}'),
  360.  (name: 'IMPEG2ComponentType'      ; itf: '{2C073D84-B51C-48c9-AA9F-68971E1F6E38}'),
  361.  (name: 'IATSCComponentType'       ; itf: '{FC189E4D-7BD4-4125-B3B3-3A76A332CC96}'),
  362.  (name: 'IEnumComponentTypes'      ; itf: '{8A674B4A-1F63-11d3-B64C-00C04F79498E}'),
  363.  (name: 'IComponentTypes'          ; itf: '{0DC13D4A-0313-11d3-9D8E-00C04F72D980}'),
  364.  (name: 'IComponent'               ; itf: '{1A5576FC-0E19-11d3-9D8E-00C04F72D980}'),
  365.  (name: 'IMPEG2Component'          ; itf: '{1493E353-1EB6-473c-802D-8E6B8EC9D2A9}'),
  366.  (name: 'IEnumComponents'          ; itf: '{2A6E2939-2595-11d3-B64C-00C04F79498E}'),
  367.  (name: 'IComponents'              ; itf: '{FCD01846-0E19-11d3-9D8E-00C04F72D980}'),
  368.  (name: 'ILocator'                 ; itf: '{286D7F89-760C-4F89-80C4-66841D2507AA}'),
  369.  (name: 'IATSCLocator'             ; itf: '{BF8D986F-8C2B-4131-94D7-4D3D9FCC21EF}'),
  370.  (name: 'IDVBTLocator'             ; itf: '{8664DA16-DDA2-42ac-926A-C18F9127C302}'),
  371.  (name: 'IDVBSLocator'             ; itf: '{3D7C353C-0D04-45f1-A742-F97CC1188DC8}'),
  372.  (name: 'IDVBCLocator'             ; itf: '{6E42F36E-1DD2-43c4-9F78-69D25AE39034}'),
  373.  (name: 'IDVBTuningSpace2'         ; itf: '{843188B4-CE62-43db-966B-8145A094E040}'),
  374.  (name: 'IDVBSTuningSpace'         ; itf: '{CDF7BE60-D954-42fd-A972-78971958E470}'),
  375.  (name: 'IMPEG2TuneRequest'        ; itf: '{EB7D987F-8A01-42AD-B8AE-574DEEE44D1A}'),
  376.  (name: 'IMPEG2TuneRequestFactory' ; itf: '{14E11ABD-EE37-4893-9EA1-6964DE933E39}'),
  377.  (name: 'IMPEG2TuneRequestSupport' ; itf: '{1B9D5FC3-5BBC-4b6c-BB18-B9D10E3EEEBF}'),
  378.  (name: 'IBroadcastEvent'          ; itf: '{3B21263F-26E8-489d-AAC4-924F7EFD9511}'),
  379.  (name: 'IDXBaseObject'        ; itf: '{17B59B2B-9CC8-11D1-9053-00C04FD9189D}'),
  380.  (name: 'IDXTransformFactory'  ; itf: '{6A950B2B-A971-11D1-81C8-0000F87557DB}'),
  381.  (name: 'IDXTransform'         ; itf: '{30A5FB78-E11F-11D1-9064-00C04FD9189D}'),
  382.  (name: 'IDXSurfacePick'       ; itf: '{30A5FB79-E11F-11d1-9064-00C04FD9189D}'),
  383.  (name: 'IDXTBindHost'         ; itf: '{D26BCE55-E9DC-11d1-9066-00C04FD9189D}'),
  384.  (name: 'IDXTaskManager'       ; itf: '{254DBBC1-F922-11D0-883A-3C8B00C10000}'),
  385.  (name: 'IDXSurfaceFactory'    ; itf: '{144946F5-C4D4-11D1-81D1-0000F87557DB}'),
  386.  (name: 'IDXSurfaceModifier'   ; itf: '{9EA3B637-C37D-11D1-905E-00C04FD9189D}'),
  387.  (name: 'IDXSurface'           ; itf: '{B39FD73F-E139-11D1-9065-00C04FD9189D}'),
  388.  (name: 'IDXSurfaceInit'       ; itf: '{9EA3B639-C37D-11d1-905E-00C04FD9189D}'),
  389.  (name: 'IDXARGBSurfaceInit'   ; itf: '{9EA3B63A-C37D-11d1-905E-00C04FD9189D}'),
  390.  (name: 'IDXARGBReadPtr'       ; itf: '{EAAAC2D6-C290-11d1-905D-00C04FD9189D}'),
  391.  (name: 'IDXARGBReadWritePtr'  ; itf: '{EAAAC2D7-C290-11d1-905D-00C04FD9189D}'),
  392.  (name: 'IDXDCLock'            ; itf: '{0F619456-CF39-11D1-905E-00C04FD9189D}'),
  393.  (name: 'IDXTScaleOutput'      ; itf: '{B2024B50-EE77-11D1-9066-00C04FD9189D}'),
  394.  (name: 'IDXGradient'          ; itf: '{B2024B51-EE77-11D1-9066-00C04FD9189D}'),
  395.  (name: 'IDXTScale'            ; itf: '{B39FD742-E139-11D1-9065-00C04FD9189D}'),
  396.  (name: 'IDXEffect'            ; itf: '{E31FB81B-1335-11d1-8189-0000F87557DB}'),
  397.  (name: 'IDXLookupTable'       ; itf: '{01BAFC7F-9E63-11D1-9053-00C04FD9189D}'),
  398.  (name: 'IDXRawSurface'        ; itf: '{09756C8A-D96A-11d1-9062-00C04FD9189D}'),
  399.  (name: 'IHTMLDXTransform'     ; itf: '{30E2AB7D-4FDD-4159-B7EA-DC722BF4ADE5}'),
  400.  (name: 'IMpegVideoDecoder'    ; itf: '{EB1BB270-F71F-11CE-8E85-02608C9BABA2}'),
  401.  (name: 'IConfigAsfWriter'     ; itf: '{45086030-F7E4-486A-B504-826BB5792A3B}'),
  402.  (name: 'IAMParse'             ; itf: '{C47A3420-005C-11D2-9038-00A0C9697298}'),
  403.  (name: 'IMediaParamInfo'      ; itf: '{6D6CBB60-A223-44AA-842F-A2F06750BE6D}'),
  404.  (name: 'IMediaParams'         ; itf: '{6D6CBB61-A223-44AA-842F-A2F06750BE6E}'),
  405.  (name: 'IMediaBuffer'         ; itf: '{59EFF8B9-938C-4A26-82F2-95CB84CDC837}'),
  406.  (name: 'IMediaObject'         ; itf: '{D8AD0F58-5494-4102-97C5-EC798E59BCF4}'),
  407.  (name: 'IEnumDMO'             ; itf: '{2C3CD98A-2BFA-4A53-9C27-5249BA64BA0F}'),
  408.  (name: 'IMediaObjectInPlace'  ; itf: '{651B9AD0-0FC7-4AA9-9538-D89931010741}'),
  409.  (name: 'IDMOQualityControl'   ; itf: '{65ABEA96-CF36-453F-AF8A-705E98F16260}'),
  410.  (name: 'IDMOVideoOutputOptimizations'; itf: '{BE8F4F4E-5B16-4D29-B350-7F6B5D9298AC}'),
  411.  (name: 'IDMOWrapperFilter'       ; itf: '{52D6F586-9F0F-4824-8FC8-E32CA04930C2}'),
  412.  (name: 'IKsObject'               ; itf: '{423C13A2-2070-11D0-9EF7-00AA00A216A1}'),
  413.  (name: 'IKsPinEx'                ; itf: '{7BB38260-D19C-11D2-B38A-00A0C95EC22E}'),
  414.  (name: 'IKsPinPipe'              ; itf: '{E539CD90-A8B4-11D1-8189-00A0C9062802}'),
  415.  (name: 'IKsDataTypeCompletion'   ; itf: '{827D1A0E-0F73-11D2-B27A-00A0C9223196}'),
  416.  (name: 'IKsClockPropertySet'     ; itf: '{5C5CBD84-E755-11D0-AC18-00A0C9223196}'),
  417.  (name: 'IKsAllocator'            ; itf: '{8DA64899-C0D9-11D0-8413-0000F822FE8A}'),
  418.  (name: 'IKsAllocatorEx'          ; itf: '{091BB63A-603F-11D1-B067-00A0C9062802}'),
  419.  (name: 'IKsTopology'             ; itf: '{28F54683-06FD-11D2-B27A-00A0C9223196}'),
  420.  (name: 'IKsAggregateControl'     ; itf: '{7F40EAC0-3947-11D2-874E-00A0C9223196}'),
  421.  (name: 'IKsQualityForwarder'     ; itf: '{97EBAACB-95BD-11D0-A3EA-00A0C9223196}'),
  422.  (name: 'IPropertySetter'         ; itf: '{AE9472BD-B0C3-11D2-8D24-00A0C9441E20}'),
  423.  (name: 'IDxtCompositor'          ; itf: '{BB44391E-6ABD-422F-9E2E-385C9DFF51FC}'),
  424.  (name: 'IDxtAlphaSetter'         ; itf: '{4EE9EAD9-DA4D-43D0-9383-06B90C08B12B}'),
  425.  (name: 'IDxtJpeg'                ; itf: '{DE75D011-7A65-11D2-8CEA-00A0C9441E20}'),
  426.  (name: 'IDxtKey'                 ; itf: '{3255DE56-38FB-4901-B980-94B438010D7B}'),
  427.  (name: 'IMediaLocator'           ; itf: '{288581E0-66CE-11D2-918F-00C0DF10D434}'),
  428.  (name: 'IMediaDet'               ; itf: '{65BD0710-24D2-4FF7-9324-ED2E5D3ABAFA}'),
  429.  (name: 'IGrfCache'               ; itf: '{AE9472BE-B0C3-11D2-8D24-00A0C9441E20}'),
  430.  (name: 'IRenderEngine'           ; itf: '{6BEE3A81-66C9-11D2-918F-00C0DF10D434}'),
  431.  (name: 'IFindCompressorCB'       ; itf: '{F03FA8DE-879A-4D59-9B2C-26BB1CF83461}'),
  432.  (name: 'ISmartRenderEngine'      ; itf: '{F03FA8CE-879A-4D59-9B2C-26BB1CF83461}'),
  433.  (name: 'IAMTimelineObj'          ; itf: '{78530B77-61F9-11D2-8CAD-00A024580902}'),
  434.  (name: 'IAMTimelineEffectable'   ; itf: '{EAE58537-622E-11D2-8CAD-00A024580902}'),
  435.  (name: 'IAMTimelineEffect'       ; itf: '{BCE0C264-622D-11D2-8CAD-00A024580902}'),
  436.  (name: 'IAMTimelineTransable'    ; itf: '{378FA386-622E-11D2-8CAD-00A024580902}'),
  437.  (name: 'IAMTimelineSplittable'   ; itf: '{A0F840A0-D590-11D2-8D55-00A0C9441E20}'),
  438.  (name: 'IAMTimelineTrans'        ; itf: '{BCE0C265-622D-11D2-8CAD-00A024580902}'),
  439.  (name: 'IAMTimelineSrc'          ; itf: '{78530B79-61F9-11D2-8CAD-00A024580902}'),
  440.  (name: 'IAMTimelineTrack'        ; itf: '{EAE58538-622E-11D2-8CAD-00A024580902}'),
  441.  (name: 'IAMTimelineVirtualTrack' ; itf: '{A8ED5F80-C2C7-11D2-8D39-00A0C9441E20}'),
  442.  (name: 'IAMTimelineComp'         ; itf: '{EAE58536-622E-11D2-8CAD-00A024580902}'),
  443.  (name: 'IAMTimelineGroup'        ; itf: '{9EED4F00-B8A6-11D2-8023-00C0DF10D434}'),
  444.  (name: 'IAMTimeline'             ; itf: '{78530B74-61F9-11D2-8CAD-00A024580902}'),
  445.  (name: 'IXml2Dex'                ; itf: '{18C628ED-962A-11D2-8D08-00A0C9441E20}'),
  446.  (name: 'IAMErrorLog'             ; itf: '{E43E73A2-0EFA-11D3-9601-00A0C9441E20}'),
  447.  (name: 'IAMSetErrorLog'          ; itf: '{963566DA-BE21-4EAF-88E9-35704F8F52A1}'),
  448.  (name: 'ISampleGrabberCB'        ; itf: '{0579154A-2B53-4994-B0D0-E773148EFF85}'),
  449.  (name: 'ISampleGrabber'          ; itf: '{6B652FFF-11FE-4FCE-92AD-0266B5D7C78F}'),
  450.  (name: 'IBDA_NetworkProvider'    ; itf: '{fd501041-8ebe-11ce-8183-00aa00577da2}'),
  451.  (name: 'IBDA_EthernetFilter'     ; itf: '{71985F43-1CA1-11d3-9CC8-00C04F7971E0}'),
  452.  (name: 'IBDA_IPV4Filter'         ; itf: '{71985F44-1CA1-11d3-9CC8-00C04F7971E0}'),
  453.  (name: 'IBDA_IPV6Filter'         ; itf: '{E1785A74-2A23-4fb3-9245-A8F88017EF33}'),
  454.  (name: 'IBDA_DeviceControl'      ; itf: '{FD0A5AF3-B41D-11d2-9C95-00C04F7971E0}'),
  455.  (name: 'IBDA_PinControl'         ; itf: '{0DED49D5-A8B7-4d5d-97A1-12B0C195874D}'),
  456.  (name: 'IBDA_SignalProperties'   ; itf: '{D2F1644B-B409-11d2-BC69-00A0C9EE9E16}'),
  457.  (name: 'IBDA_SignalStatistics'   ; itf: '{1347D106-CF3A-428a-A5CB-AC0D9A2A4338}'),
  458.  (name: 'IBDA_Topology'           ; itf: '{79B56888-7FEA-4690-B45D-38FD3C7849BE}'),
  459.  (name: 'IBDA_VoidTransform'      ; itf: '{71985F46-1CA1-11d3-9CC8-00C04F7971E0}'),
  460.  (name: 'IBDA_NullTransform'      ; itf: '{DDF15B0D-BD25-11d2-9CA0-00C04F7971E0}'),
  461.  (name: 'IBDA_FrequencyFilter'    ; itf: '{71985F47-1CA1-11d3-9CC8-00C04F7971E0}'),
  462.  (name: 'IBDA_LNBInfo'            ; itf: '{992CF102-49F9-4719-A664-C4F23E2408F4}'),
  463.  (name: 'IBDA_AutoDemodulate'     ; itf: '{DDF15B12-BD25-11d2-9CA0-00C04F7971E0}'),
  464.  (name: 'IBDA_DigitalDemodulator' ; itf: '{EF30F379-985B-4d10-B640-A79D5E04E1E0}'),
  465.  (name: 'IBDA_IPSinkControl'      ; itf: '{3F4DC8E2-4050-11d3-8F4B-00C04F7971E2}'),
  466.  (name: 'IBDA_IPSinkInfo'         ; itf: '{A750108F-492E-4d51-95F7-649B23FF7AD7}'),
  467.  (name: 'IEnumPIDMap'             ; itf: '{afb6c2a2-2c41-11d3-8a60-0000f81e0e4a}'),
  468.  (name: 'IMPEG2PIDMap'            ; itf: '{afb6c2a1-2c41-11d3-8a60-0000f81e0e4a}'),
  469.  (name: 'IMPEG2_TIF_CONTROL'       ; itf: '{F9BAC2F9-4149-4916-B2EF-FAA202326862}'),
  470.  (name: 'ITuneRequestInfo'         ; itf: '{A3B152DF-7A90-4218-AC54-9830BEE8C0B6}'),
  471.  (name: 'IGuideDataEvent'          ; itf: '{EFDA0C80-F395-42c3-9B3C-56B37DEC7BB7}'),
  472.  (name: 'IGuideDataProperty'       ; itf: '{88EC5E58-BB73-41d6-99CE-66C524B8B591}'),
  473.  (name: 'IEnumGuideDataProperties' ; itf: '{AE44423B-4571-475c-AD2C-F40A771D80EF}'),
  474.  (name: 'IEnumTuneRequests'        ; itf: '{1993299C-CED6-4788-87A3-420067DCE0C7}'),
  475.  (name: 'IGuideData'               ; itf: '{61571138-5B01-43cd-AEAF-60B784A0BF93}'),
  476.  (name: 'IGuideDataLoader'         ; itf: '{4764ff7c-fa95-4525-af4d-d32236db9e38}'),
  477.  (name: 'IVPEConfig' ; itf: '{BC29A660-30E3-11d0-9E69-00C04FD7C15B}'),
  478.  (name: 'IVPE'       ; itf: '{BC29A661-30E3-11d0-9E69-00C04FD7C15B}'),
  479.  (name: 'IDivXFilterInterface' ; itf: '{D132EE97-3E38-4030-8B17-59163B30A1F5}'),
  480.  (name: 'IVMRAspectRatioControl9'     ; itf: '{00d96c29-bbde-4efc-9901-bb5036392146}'),
  481.  (name: 'IVMRDeinterlaceControl9'     ; itf: '{a215fb8d-13c2-4f7f-993c-003d6271a459}'),
  482.  (name: 'IVMRFilterConfig9'           ; itf: '{5a804648-4f66-4867-9c43-4f5c822cf1b8}'),
  483.  (name: 'IVMRImageCompositor9'        ; itf: '{4a5c89eb-df51-4654-ac2a-e48e02bbabf6}'),
  484.  (name: 'IVMRImagePresenter9'         ; itf: '{69188c61-12a3-40f0-8ffc-342e7b433fd7}'),
  485.  (name: 'IVMRImagePresenterConfig9'   ; itf: '{45c15cab-6e22-420a-8043-ae1f0ac02c7d}'),
  486.  (name: 'IVMRMixerBitmap9'            ; itf: '{ced175e5-1935-4820-81bd-ff6ad00c9108}'),
  487.  (name: 'IVMRMixerControl9'           ; itf: '{1a777eaa-47c8-4930-b2c9-8fee1c1b0f3b}'),
  488.  (name: 'IVMRMonitorConfig9'          ; itf: '{46c2e457-8ba0-4eef-b80b-0680f0978749}'),
  489.  (name: 'IVMRSurface9'                ; itf: '{dfc581a1-6e1f-4c3a-8d0a-5e9792ea2afc}'),
  490.  (name: 'IVMRSurfaceAllocator9'       ; itf: '{8d5148ea-3f5d-46cf-9df1-d1b896eedb1f}'),
  491.  (name: 'IVMRSurfaceAllocatorNotify9' ; itf: '{dca3f5df-bb3a-4d03-bd81-84614bfbfa0c}'),
  492.  (name: 'IVMRWindowlessControl9'      ; itf: '{8f537d09-f85e-4414-b23b-502e54c79927}'),
  493.  (name: 'IVMRVideoStreamControl9'     ; itf: '{d0cfe38b-93e7-4772-8957-0400c49a4485}'),
  494.  (name: 'IEnumStreamBufferRecordingAttrib' ; itf: '{C18A9162-1E82-4142-8C73-5690FA62FE33}'),
  495.  (name: 'IStreamBufferConfigure'           ; itf: '{ce14dfae-4098-4af7-bbf7-d6511f835414}'),
  496.  (name: 'IStreamBufferInitialize'          ; itf: '{9ce50f2d-6ba7-40fb-a034-50b1a674ec78}'),
  497.  (name: 'IStreamBufferMediaSeeking'        ; itf: '{f61f5c26-863d-4afa-b0ba-2f81dc978596}'),
  498.  (name: 'IStreamBufferRecComp'             ; itf: '{9E259A9B-8815-42ae-B09F-221970B154FD}'),
  499.  (name: 'IStreamBufferRecordControl'       ; itf: '{ba9b6c99-f3c7-4ff2-92db-cfdd4851bf31}'),
  500.  (name: 'IStreamBufferRecordingAttribute'  ; itf: '{16CA4E03-FE69-4705-BD41-5B7DFC0C95F3}'),
  501.  (name: 'IStreamBufferSink'                ; itf: '{afd1f242-7efd-45ee-ba4e-407a25c9a77a}'),
  502.  (name: 'IStreamBufferSource'              ; itf: '{1c5bd776-6ced-4f44-8164-5eab0e98db12}'),
  503.  // ole
  504.  (name: 'IPersist'              ; itf: '{0000010C-0000-0000-C000-000000000046}'),
  505.  (name: 'IPersistStream'        ; itf: '{00000109-0000-0000-C000-000000000046}'),
  506.  (name: 'IPersistFile'          ; itf: '{0000010B-0000-0000-C000-000000000046}'),
  507.  (name: 'IPersistPropertyBag'   ; itf: '{37D84F60-42CB-11CE-8135-00AA004BB851}'),
  508.  (name: 'IPersistStorage'       ; itf: '{0000010A-0000-0000-C000-000000000046}'),
  509.  (name: 'IMoniker'              ; itf: '{0000000F-0000-0000-C000-000000000046}'),
  510.  (name: 'IStream'               ; itf: '{0000000C-0000-0000-C000-000000000046}'),
  511.  (name: 'IBindCtx'              ; itf: '{0000000E-0000-0000-C000-000000000046}'),
  512.  (name: 'IRunningObjectTable'   ; itf: '{00000010-0000-0000-C000-000000000046}'),
  513.  (name: 'IPropertyBag'          ; itf: '{55272A00-42CB-11CE-8135-00AA004BB851}'),
  514.  (name: 'IPropertyPage'         ; itf: '{B196B28D-BAB4-101A-B69C-00AA00341D07}'),
  515.  (name: 'IPropertyPage2'        ; itf: '{01E44665-24AC-101B-84ED-08002B2EC713}'),
  516.  (name: 'IPropertyStorage'      ; itf: '{00000138-0000-0000-C000-000000000046}'),
  517.  (name: 'IServiceProvider'      ; itf: '{6d5140c1-7436-11ce-8034-00aa006009fa}'),
  518.  (name: 'ISpecifyPropertyPages' ; itf: '{B196B28B-BAB4-101A-B69C-00AA00341D07}'),
  519.  (name: 'IErrorLog'             ; itf: '{3127CA40-446E-11CE-8135-00AA004BB851}'),
  520.  (name: 'IErrorInfo'            ; itf: '{1CF2B120-547D-101B-8E65-08002B2BD119}'),
  521.  (name: 'IStorage'              ; itf: '{0000000B-0000-0000-C000-000000000046}'));
  522. var
  523.   FormBaseFilter: TFormBaseFilter;
  524. implementation
  525. uses Activex, ComObj;
  526. {$R *.dfm}
  527. {$R BaseFilterEditor.res}
  528.   constructor TFormBaseFilter.Create(AOwner: TComponent);
  529.   begin
  530.     inherited Create(AOwner);
  531.     SysDevEnum := TSysDevEnum.Create;
  532.     PinList:= TPinList.Create;
  533.     InPinPic := TBitmap.Create;
  534.     OutPinPic := TBitmap.Create;
  535.     InPinPic.LoadFromResourceName(hinstance, 'INPUT');
  536.     OutPinPic.LoadFromResourceName(hinstance, 'OUTPUT');
  537.     InfoBtn.Glyph.LoadFromResourceName(hinstance, 'INFO');
  538.     Image1.Picture.Bitmap.LoadFromResourceName(hinstance, 'GREEN_MARK');
  539.     Image2.Picture.Bitmap.LoadFromResourceName(hinstance, 'RED_MARK');
  540.     Image3.Picture.Bitmap.LoadFromResourceName(hinstance, 'BLUE_MARK');
  541.     Image4.Picture.Bitmap.LoadFromResourceName(hinstance, 'PURPLE_MARK');
  542.     Image5.Picture.Bitmap.LoadFromResourceName(hinstance, 'BLACK_MARK');
  543.     Image6.Picture.Bitmap.LoadFromResourceName(hinstance, 'INPUT');
  544.     Image7.Picture.Bitmap.LoadFromResourceName(hinstance, 'OUTPUT');
  545.   end;
  546.   destructor  TFormBaseFilter.Destroy;
  547.   begin
  548.     SysDevEnum.Free;
  549.     PinList.Free;
  550.     InPinPic.Free;
  551.     OutPinPic.Free;
  552.     inherited destroy;
  553.   end;
  554. procedure TFormBaseFilter.FormShow(Sender: TObject);
  555. var
  556.   i, j: integer;
  557.   a, b : integer;
  558.   AMoniker, MyMoniker: IMoniker;
  559.   PropBag: IPropertyBag;
  560.   AVariant: OleVariant;
  561.   CLSID: TGUID;
  562.   Found: boolean;
  563.   NodeItem : pNodeItem;
  564.   TmpItem : TTreeNode;
  565. begin
  566.   PageControl1.ActivePageIndex := 0;
  567.   RefreshTree;
  568.   Found := False;
  569.   j := 0;
  570.   MyMoniker := Filter.BaseFilter.Moniker;
  571.   if MyMoniker = nil then exit;
  572.   MyMoniker.BindToStorage(nil,nil,IPropertyBag, PropBag);
  573.   if PropBag.Read('CLSID',AVariant,nil) = S_OK then
  574.        CLSID := StringToGUID(AVariant)
  575.   else CLSID := GUID_NULL;
  576.   for i := 0 to SysDevEnum.CountCategories - 1 do
  577.   begin
  578.     SysDevEnum.SelectIndexCategory(i);
  579.     if SysDevEnum.CountFilters > 0 then
  580.       for j := 0 to SysDevEnum.CountFilters - 1 do
  581.       begin
  582.         if IsEqualGUID(CLSID, SysDevEnum.Filters[j].CLSID) then
  583.           begin
  584.             AMoniker := SysDevEnum.GetMoniker(j);
  585.             Found := AMoniker.IsEqual(MyMoniker) = S_OK;
  586.             AMoniker := nil;
  587.           end;
  588.         if Found then Break;
  589.       end;
  590.     Filters.SetFocus;
  591.     if Found then
  592.     begin
  593.       for a := 0 to Filters.Items.Count -1 do
  594.       begin
  595.         NodeItem := pNodeItem(Filters.Items[a].Data);
  596.         if (Filters.Items[a].Level = 0) and (NodeItem^.Index = I) then
  597.         begin
  598.           TmpItem := Filters.Items[a];
  599.           for b := 0 to TmpItem.Count -1 do
  600.           begin
  601.             NodeItem := pNodeItem(TmpItem.Item[b].data);
  602.             If NodeItem^.Index = J then
  603.             begin
  604.               Filters.Selected := TmpItem.Item[b];
  605.               Filterschange(Self, TmpItem.Item[b]);
  606.             end;
  607.           end;
  608.         end;
  609.       end;
  610.       break;
  611.     end;
  612.   end;
  613.   PropBag := nil;
  614.   MyMoniker := nil;
  615. end;
  616. procedure TFormBaseFilter.GetFilterInfo;
  617. var
  618.   i: integer;
  619.   unk: IUnknown;
  620.   PinInfo: TPinInfo;
  621.   BaseF: IBaseFilter;
  622. begin
  623.   BaseF := nil;
  624.   try
  625.     if Filter.BaseFilter.CreateFilter <> nil then
  626.     begin
  627.       for i := 0 to length(DSItfs)-1 do
  628.       begin
  629.         unk := nil;
  630.         if Succeeded(IFilter(Filter).QueryInterface(DSItfs[i].itf, unk)) then
  631.           Interfaces.Items.Add(DSItfs[i].name);
  632.       end;
  633.       if Succeeded(Filter.QueryInterface(IBaseFilter, BaseF)) then
  634.       begin
  635.         PinList.Assign(BaseF);
  636.         if PinList.Count > 0 then
  637.           for i := 0 to PinList.Count - 1 do
  638.           begin
  639.             PinInfo := PinList.PinInfo[i];
  640.             case PinInfo.dir of
  641.               PINDIR_INPUT  : Pins.Items.AddObject(format('%s',[PinInfo.achName]), InPinPic);
  642.               PINDIR_OUTPUT : Pins.Items.AddObject(format('%s',[PinInfo.achName]), OutPinPic);
  643.             end;
  644.             PinInfo.pFilter := nil;
  645.           end;
  646.       End;
  647.     end;
  648.   finally
  649.     unk := nil;
  650.     BaseF := nil;
  651.   end
  652. end;
  653. procedure TFormBaseFilter.RefreshTree;
  654. var
  655.   i, j : Integer;
  656.   TmpNode : TTreeNode;
  657.   NodeItem : pNodeItem;
  658.   MonikerStr : PWideChar;
  659.   Tmp : WideString;
  660. begin
  661.   Filters.Items.BeginUpdate;
  662.   Filters.Items.Clear;
  663.   for i := 0 to SysDevEnum.CountCategories - 1 do
  664.   begin
  665.     New(NodeItem);
  666.     NodeItem^.Index := i;
  667.     TmpNode := Filters.Items.AddChildObject(nil, SysDevEnum.Categories[i].FriendlyName, NodeItem);
  668.     SysDevEnum.SelectIndexCategory(i);
  669.     if SysDevEnum.CountFilters > 0 then
  670.       for j := 0 to SysDevEnum.CountFilters - 1 do
  671.       begin
  672.         SysDevEnum.GetMoniker(j).GetDisplayName(nil, nil, MonikerStr);
  673.         New(NodeItem);
  674.         NodeItem^.Index := j;
  675.         NodeItem^.Color := FilterColors[0];
  676.         Tmp := MonikerStr;
  677.         Tmp := Copy(Tmp, Pos(':', Tmp)+1, 255);
  678.         Tmp := uppercase(Copy(Tmp, 1, pos(':', Tmp) -1));
  679.         If Tmp = 'PNP' then NodeItem^.Color := FilterColors[1];
  680.         If Tmp = 'CM' then NodeItem^.Color := FilterColors[2];
  681.         If Tmp = 'KS' then NodeItem^.Color := FilterColors[3];
  682.         If Tmp = 'DMO' then NodeItem^.Color := FilterColors[4];
  683.         Filters.Items.AddChildObject(TmpNode, SysDevEnum.Filters[j].FriendlyName, NodeItem);
  684.       end;
  685.   end;
  686.   {$IFDEF VER130}
  687.   Filters.AlphaSort;
  688.   {$ELSE}
  689.   Filters.AlphaSort(True);
  690.   {$ENDIF}
  691.   Filters.Items.EndUpdate;
  692. end;
  693. procedure TFormBaseFilter.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  694. begin
  695.   PinList.Clear;
  696.   FilterGraph.ClearGraph;
  697.   FilterGraph.Active := false;
  698. end;
  699. procedure TFormBaseFilter.PopupMenuPopup(Sender: TObject);
  700. var
  701.   AFilter: IBaseFilter;
  702. begin
  703.   PopupMenu.Items.Items[0].Enabled := false;
  704.   PopupMenu.Items.Items[1].Items[0].Enabled := false;
  705.   PopupMenu.Items.Items[1].Items[1].Enabled := false;
  706.   PopupMenu.Items.Items[1].Items[2].Enabled := false;
  707.   PopupMenu.Items.Items[2].Items[0].Enabled := false;
  708.   PopupMenu.Items.Items[2].Items[1].Enabled := false;
  709.   If (Filters.Selected = Nil) or (Filters.Selected.Level = 0) then Abort;
  710.   Filter.QueryInterface(IBaseFilter, AFilter);
  711.   if HaveFilterPropertyPage(AFilter, ppDefault)       then PopupMenu.Items.Items[0].Enabled := true;
  712.   if HaveFilterPropertyPage(AFilter, ppVFWCapFormat)  then PopupMenu.Items.Items[1].Items[0].Enabled := true;
  713.   if HaveFilterPropertyPage(AFilter, ppVFWCapSource)  then PopupMenu.Items.Items[1].Items[1].Enabled := true;
  714.   if HaveFilterPropertyPage(AFilter, ppVFWCapDisplay) then PopupMenu.Items.Items[1].Items[2].Enabled := true;
  715.   if HaveFilterPropertyPage(AFilter, ppVFWCompConfig) then PopupMenu.Items.Items[2].Items[0].Enabled := true;
  716.   if HaveFilterPropertyPage(AFilter, ppVFWCompAbout)  then PopupMenu.Items.Items[2].Items[1].Enabled := true;
  717.   AFilter := nil;
  718. end;
  719. procedure TFormBaseFilter.PropertyPageClick(Sender: TObject);
  720. var AFilter: IBaseFilter;
  721. begin
  722.   Filter.QueryInterface(IBaseFilter, AFilter);
  723.   ShowFilterPropertyPage(Self.Handle, AFilter, ppDefault);
  724.   AFilter := nil;
  725. end;
  726. procedure TFormBaseFilter.PinMenuPopup(Sender: TObject);
  727. begin
  728.   If PageControl1.ActivePageIndex = 0 then
  729.   Begin
  730.     if Pins.ItemIndex = -1 then abort;
  731.   End
  732.   else
  733.     if Pins1.ItemIndex = -1 then abort;
  734. end;
  735. procedure TFormBaseFilter.PinPropertyClick(Sender: TObject);
  736. begin
  737.   If PageControl1.ActivePageIndex = 0 then
  738.     ShowPinPropertyPage(Self.Handle, PinList.Items[Pins.ItemIndex])
  739.   else
  740.     ShowPinPropertyPage(Self.Handle, PinList.Items[Pins1.ItemIndex]);
  741. end;
  742. procedure TFormBaseFilter.PinsSheetShow(Sender: TObject);
  743. begin
  744.   Pins1.Items := Pins.Items;
  745. end;
  746. procedure TFormBaseFilter.Pins1Click(Sender: TObject);
  747. var
  748.   i: integer;
  749.   unk: IUnknown;
  750.   EnumMT : TEnumMediaType;
  751. begin
  752.   PinInterfaces.Clear;
  753.   if Pins1.ItemIndex <> -1 then
  754.   try
  755.     with PinList.Items[Pins1.ItemIndex] do
  756.       for i := 0 to length(DSItfs)-1 do
  757.         if Succeeded(QueryInterface(DSItfs[i].itf, unk)) then
  758.           PinInterfaces.Items.Add(DSItfs[i].name);
  759.   finally
  760.     unk := nil;
  761.   end;
  762.   MediaTypes.Clear;
  763.   if Pins1.ItemIndex <> -1 then
  764.   begin
  765.     EnumMT:= TEnumMediaType.Create(PinList.Items[Pins1.ItemIndex]);
  766.     try
  767.       if EnumMT.Count > 0 then
  768.         for i := 0 to EnumMT.Count - 1 do
  769.           MediaTypes.Items.Add(EnumMt.MediaDescription[i]);
  770.     finally
  771.       EnumMT.Free;
  772.     end;
  773.   end;
  774. end;
  775. procedure TFormBaseFilter.VFWFormatClick(Sender: TObject);
  776. var AFilter: IBaseFilter;
  777. begin
  778.   Filter.QueryInterface(IBaseFilter, AFilter);
  779.   ShowFilterPropertyPage(Self.Handle, AFilter, ppVFWCapFormat);
  780.   AFilter := nil;
  781. end;
  782. procedure TFormBaseFilter.VFWSourceClick(Sender: TObject);
  783. var AFilter: IBaseFilter;
  784. begin
  785.   Filter.QueryInterface(IBaseFilter, AFilter);
  786.   ShowFilterPropertyPage(Self.Handle, AFilter , ppVFWCapSource);
  787.   AFilter := nil;
  788. end;
  789. procedure TFormBaseFilter.VFWDisplayClick(Sender: TObject);
  790. var AFilter: IBaseFilter;
  791. begin
  792.   Filter.QueryInterface(IBaseFilter, AFilter);
  793.   ShowFilterPropertyPage(Self.Handle, AFilter, ppVFWCapDisplay);
  794.   AFilter := nil;
  795. end;
  796. procedure TFormBaseFilter.Config1Click(Sender: TObject);
  797. var AFilter: IBaseFilter;
  798. begin
  799.   Filter.QueryInterface(IBaseFilter, AFilter);
  800.   ShowFilterPropertyPage(Self.Handle, AFilter, ppVFWCompConfig);
  801.   AFilter := nil;
  802. end;
  803. procedure TFormBaseFilter.VFWAboutClick(Sender: TObject);
  804. var AFilter: IBaseFilter;
  805. begin
  806.   Filter.QueryInterface(IBaseFilter, AFilter);
  807.   ShowFilterPropertyPage(Self.Handle, AFilter, ppVFWCompAbout);
  808.   AFilter := nil;
  809. end;
  810. procedure TFormBaseFilter.InterfacesDblClick(Sender: TObject);
  811. var
  812.   AFilter: IBaseFilter;
  813. begin
  814.   Filter.QueryInterface(IBaseFilter, AFilter);
  815.   if Interfaces.ItemIndex <> -1 then
  816.   if Interfaces.Items.Strings[Interfaces.ItemIndex] = 'ISpecifyPropertyPages' then
  817.     ShowFilterPropertyPage(Self.Handle, AFilter);
  818.   AFilter := nil;
  819. end;
  820. procedure TFormBaseFilter.PinInterfacesDblClick(Sender: TObject);
  821. begin
  822.   if PinInterfaces.ItemIndex <> -1 then
  823.   if PinInterfaces.Items.Strings[PinInterfaces.ItemIndex] = 'ISpecifyPropertyPages' then
  824.     ShowPinPropertyPage(Self.Handle, PinList.Items[Pins1.ItemIndex]);
  825. end;
  826. procedure TFormBaseFilter.PinsDrawItem(Control: TWinControl;
  827.   Index: Integer; Rect: TRect; State: TOwnerDrawState);
  828. var
  829. Bitmap: TBitmap;      { temporary variable for the item抯 bitmap }
  830. Offset: Integer;      { text offset width }
  831. begin
  832.   with (Control as TListBox).Canvas do  { draw on control canvas, not on the form }
  833.   begin
  834.     Brush.Color := (Control as TListBox).Color;
  835.     Brush.Style := bsSolid;
  836.     FillRect(Rect);       { clear the rectangle }
  837.     Offset := 2;          { provide default offset }
  838.     Bitmap := TBitmap((Control as TListBox).Items.Objects[Index]);  { get the bitmap }
  839.     if Bitmap <> nil then
  840.     begin
  841.       BrushCopy(Bounds(Rect.Left + Offset, Rect.Top, Bitmap.Width, Bitmap.Height),
  842.                 Bitmap, Bounds(0, 0, Bitmap.Width, Bitmap.Height), clOlive);  {render bitmap}
  843.       Offset := Bitmap.width + 6;    { add four pixels between bitmap and text}
  844.     end;
  845.     If odSelected in State then
  846.       Brush.Color := clHighLight;
  847.     TextOut(Rect.Left + Offset, Rect.Top, (Control as TListBox).Items[Index]);  { display the text }
  848.     If odFocused in state then
  849.     Begin
  850.       Drawfocusrect(Rect);
  851.       Drawfocusrect(Bounds(Rect.Left + Offset, Rect.Top, TextWidth((Control as TListBox).Items[Index])+1, Rect.Bottom - Rect.Top));
  852.     End;
  853.   end;
  854. end;
  855. procedure TFormBaseFilter.FiltersChange(Sender: TObject;
  856.   Node: TTreeNode);
  857. var
  858.   NodeItem : pNodeItem;
  859.   Tmp : pWidechar;
  860. begin
  861.   if Node = nil then Exit;
  862.   Interfaces.Items.BeginUpdate;
  863.   Interfaces.Items.Clear;
  864.   Pins.Items.BeginUpdate;
  865.   Pins.Items.Clear;
  866.   MonikerTag.Clear;
  867.   Try
  868.     if Node.Level = 1 then
  869.     begin
  870.       NodeItem := pNodeItem(Node.Parent.Data);
  871.       If NodeItem = nil then exit;
  872.       SysDevEnum.SelectIndexCategory(NodeItem^.Index);
  873.       NodeItem := pNodeItem(Node.Data);
  874.       SysDevEnum.GetMoniker(NodeItem^.Index).GetDisplayName(nil, nil, Tmp);
  875.       MonikerTag.Text := Tmp;
  876.       Filter.BaseFilter.Moniker := SysDevEnum.GetMoniker(NodeItem^.Index);
  877.       IFilter(Filter).NotifyFilter(foRefresh);
  878.       GetFilterInfo;
  879.     end;
  880.   finally
  881.     Interfaces.Items.EndUpdate;
  882.     Pins.Items.EndUpdate;
  883.   end;
  884. end;
  885. procedure TFormBaseFilter.PinsMeasureItem(Control: TWinControl;
  886.   Index: Integer; var Height: Integer);
  887. begin
  888.   (Control as TListBox).Canvas.Font := (Control as TListBox).Font;
  889.   If Height < (Control as TListBox).Canvas.TextHeight((Control as TListBox).Items[Index]) then
  890.     Height := (Control as TListBox).Canvas.TextHeight((Control as TListBox).Items[Index]);
  891. end;
  892. procedure TFormBaseFilter.FiltersDblClick(Sender: TObject);
  893. begin
  894.   If Filters.Selected = nil then Exit;
  895.   If Filters.Selected.Level = 1 then btok.Click;
  896. end;
  897. procedure TFormBaseFilter.FiltersCustomDrawItem(Sender: TCustomTreeView;
  898.   Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
  899. var
  900.   NodeItem : pNodeItem;
  901. begin
  902.   Filters.Canvas.Font.Color := FilterColors[0];
  903.   if Node = nil then Exit;
  904.   if Node.Level < 1 then exit;
  905.   NodeItem := pNodeItem(Node.Data);
  906.   Filters.Canvas.Font.Color := NodeItem^.Color;
  907. end;
  908. procedure TFormBaseFilter.InfoBtnClick(Sender: TObject);
  909. begin
  910.   PageControl1.ActivePageIndex := 2;
  911. end;
  912. end.