BaseFilterEditor.pas 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962
  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’s 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.