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

📄 basefiltereditor.pas

📁 Delphi数据库系统开发例子
💻 PAS
📖 第 1 页 / 共 4 页
字号:
 (name: 'IEnumGuideDataProperties' ; itf: '{AE44423B-4571-475c-AD2C-F40A771D80EF}'),
 (name: 'IEnumTuneRequests'        ; itf: '{1993299C-CED6-4788-87A3-420067DCE0C7}'),
 (name: 'IGuideData'               ; itf: '{61571138-5B01-43cd-AEAF-60B784A0BF93}'),
 (name: 'IGuideDataLoader'         ; itf: '{4764ff7c-fa95-4525-af4d-d32236db9e38}'),
 (name: 'IVPEConfig' ; itf: '{BC29A660-30E3-11d0-9E69-00C04FD7C15B}'),
 (name: 'IVPE'       ; itf: '{BC29A661-30E3-11d0-9E69-00C04FD7C15B}'),
 (name: 'IDivXFilterInterface' ; itf: '{D132EE97-3E38-4030-8B17-59163B30A1F5}'),

 (name: 'IVMRAspectRatioControl9'     ; itf: '{00d96c29-bbde-4efc-9901-bb5036392146}'),
 (name: 'IVMRDeinterlaceControl9'     ; itf: '{a215fb8d-13c2-4f7f-993c-003d6271a459}'),
 (name: 'IVMRFilterConfig9'           ; itf: '{5a804648-4f66-4867-9c43-4f5c822cf1b8}'),
 (name: 'IVMRImageCompositor9'        ; itf: '{4a5c89eb-df51-4654-ac2a-e48e02bbabf6}'),
 (name: 'IVMRImagePresenter9'         ; itf: '{69188c61-12a3-40f0-8ffc-342e7b433fd7}'),
 (name: 'IVMRImagePresenterConfig9'   ; itf: '{45c15cab-6e22-420a-8043-ae1f0ac02c7d}'),
 (name: 'IVMRMixerBitmap9'            ; itf: '{ced175e5-1935-4820-81bd-ff6ad00c9108}'),
 (name: 'IVMRMixerControl9'           ; itf: '{1a777eaa-47c8-4930-b2c9-8fee1c1b0f3b}'),
 (name: 'IVMRMonitorConfig9'          ; itf: '{46c2e457-8ba0-4eef-b80b-0680f0978749}'),
 (name: 'IVMRSurface9'                ; itf: '{dfc581a1-6e1f-4c3a-8d0a-5e9792ea2afc}'),
 (name: 'IVMRSurfaceAllocator9'       ; itf: '{8d5148ea-3f5d-46cf-9df1-d1b896eedb1f}'),
 (name: 'IVMRSurfaceAllocatorNotify9' ; itf: '{dca3f5df-bb3a-4d03-bd81-84614bfbfa0c}'),
 (name: 'IVMRWindowlessControl9'      ; itf: '{8f537d09-f85e-4414-b23b-502e54c79927}'),
 (name: 'IVMRVideoStreamControl9'     ; itf: '{d0cfe38b-93e7-4772-8957-0400c49a4485}'),

 (name: 'IEnumStreamBufferRecordingAttrib' ; itf: '{C18A9162-1E82-4142-8C73-5690FA62FE33}'),
 (name: 'IStreamBufferConfigure'           ; itf: '{ce14dfae-4098-4af7-bbf7-d6511f835414}'),
 (name: 'IStreamBufferInitialize'          ; itf: '{9ce50f2d-6ba7-40fb-a034-50b1a674ec78}'),
 (name: 'IStreamBufferMediaSeeking'        ; itf: '{f61f5c26-863d-4afa-b0ba-2f81dc978596}'),
 (name: 'IStreamBufferRecComp'             ; itf: '{9E259A9B-8815-42ae-B09F-221970B154FD}'),
 (name: 'IStreamBufferRecordControl'       ; itf: '{ba9b6c99-f3c7-4ff2-92db-cfdd4851bf31}'),
 (name: 'IStreamBufferRecordingAttribute'  ; itf: '{16CA4E03-FE69-4705-BD41-5B7DFC0C95F3}'),
 (name: 'IStreamBufferSink'                ; itf: '{afd1f242-7efd-45ee-ba4e-407a25c9a77a}'),
 (name: 'IStreamBufferSource'              ; itf: '{1c5bd776-6ced-4f44-8164-5eab0e98db12}'),

 // ole
 (name: 'IPersist'              ; itf: '{0000010C-0000-0000-C000-000000000046}'),
 (name: 'IPersistStream'        ; itf: '{00000109-0000-0000-C000-000000000046}'),
 (name: 'IPersistFile'          ; itf: '{0000010B-0000-0000-C000-000000000046}'),
 (name: 'IPersistPropertyBag'   ; itf: '{37D84F60-42CB-11CE-8135-00AA004BB851}'),
 (name: 'IPersistStorage'       ; itf: '{0000010A-0000-0000-C000-000000000046}'),
 (name: 'IMoniker'              ; itf: '{0000000F-0000-0000-C000-000000000046}'),
 (name: 'IStream'               ; itf: '{0000000C-0000-0000-C000-000000000046}'),
 (name: 'IBindCtx'              ; itf: '{0000000E-0000-0000-C000-000000000046}'),
 (name: 'IRunningObjectTable'   ; itf: '{00000010-0000-0000-C000-000000000046}'),
 (name: 'IPropertyBag'          ; itf: '{55272A00-42CB-11CE-8135-00AA004BB851}'),
 (name: 'IPropertyPage'         ; itf: '{B196B28D-BAB4-101A-B69C-00AA00341D07}'),
 (name: 'IPropertyPage2'        ; itf: '{01E44665-24AC-101B-84ED-08002B2EC713}'),
 (name: 'IPropertyStorage'      ; itf: '{00000138-0000-0000-C000-000000000046}'),
 (name: 'IServiceProvider'      ; itf: '{6d5140c1-7436-11ce-8034-00aa006009fa}'),
 (name: 'ISpecifyPropertyPages' ; itf: '{B196B28B-BAB4-101A-B69C-00AA00341D07}'),
 (name: 'IErrorLog'             ; itf: '{3127CA40-446E-11CE-8135-00AA004BB851}'),
 (name: 'IErrorInfo'            ; itf: '{1CF2B120-547D-101B-8E65-08002B2BD119}'),
 (name: 'IStorage'              ; itf: '{0000000B-0000-0000-C000-000000000046}'));


var
  FormBaseFilter: TFormBaseFilter;


implementation
uses Activex, ComObj;

{$R *.dfm}
{$R BaseFilterEditor.res}

  constructor TFormBaseFilter.Create(AOwner: TComponent);
  begin
    inherited Create(AOwner);
    SysDevEnum := TSysDevEnum.Create;
    PinList:= TPinList.Create;
    InPinPic := TBitmap.Create;
    OutPinPic := TBitmap.Create;
    InPinPic.LoadFromResourceName(hinstance, 'INPUT');
    OutPinPic.LoadFromResourceName(hinstance, 'OUTPUT');
    InfoBtn.Glyph.LoadFromResourceName(hinstance, 'INFO');
    Image1.Picture.Bitmap.LoadFromResourceName(hinstance, 'GREEN_MARK');
    Image2.Picture.Bitmap.LoadFromResourceName(hinstance, 'RED_MARK');
    Image3.Picture.Bitmap.LoadFromResourceName(hinstance, 'BLUE_MARK');
    Image4.Picture.Bitmap.LoadFromResourceName(hinstance, 'PURPLE_MARK');
    Image5.Picture.Bitmap.LoadFromResourceName(hinstance, 'BLACK_MARK');
    Image6.Picture.Bitmap.LoadFromResourceName(hinstance, 'INPUT');
    Image7.Picture.Bitmap.LoadFromResourceName(hinstance, 'OUTPUT');
  end;

  destructor  TFormBaseFilter.Destroy;
  begin
    SysDevEnum.Free;
    PinList.Free;
    InPinPic.Free;
    OutPinPic.Free;
    inherited destroy;
  end;

procedure TFormBaseFilter.FormShow(Sender: TObject);
var
  i, j: integer;
  a, b : integer;
  AMoniker, MyMoniker: IMoniker;
  PropBag: IPropertyBag;
  AVariant: OleVariant;
  CLSID: TGUID;
  Found: boolean;
  NodeItem : pNodeItem;
  TmpItem : TTreeNode;
begin
  PageControl1.ActivePageIndex := 0;
  RefreshTree;
  Found := False;
  j := 0;
  MyMoniker := Filter.BaseFilter.Moniker;
  if MyMoniker = nil then exit;
  MyMoniker.BindToStorage(nil,nil,IPropertyBag, PropBag);
  if PropBag.Read('CLSID',AVariant,nil) = S_OK then
       CLSID := StringToGUID(AVariant)
  else CLSID := GUID_NULL;
  for i := 0 to SysDevEnum.CountCategories - 1 do
  begin
    SysDevEnum.SelectIndexCategory(i);
    if SysDevEnum.CountFilters > 0 then
      for j := 0 to SysDevEnum.CountFilters - 1 do
      begin
        if IsEqualGUID(CLSID, SysDevEnum.Filters[j].CLSID) then
          begin
            AMoniker := SysDevEnum.GetMoniker(j);
            Found := AMoniker.IsEqual(MyMoniker) = S_OK;
            AMoniker := nil;
          end;
        if Found then Break;
      end;
    Filters.SetFocus;
    if Found then
    begin
      for a := 0 to Filters.Items.Count -1 do
      begin
        NodeItem := pNodeItem(Filters.Items[a].Data);
        if (Filters.Items[a].Level = 0) and (NodeItem^.Index = I) then
        begin
          TmpItem := Filters.Items[a];
          for b := 0 to TmpItem.Count -1 do
          begin
            NodeItem := pNodeItem(TmpItem.Item[b].data);
            If NodeItem^.Index = J then
            begin
              Filters.Selected := TmpItem.Item[b];
              Filterschange(Self, TmpItem.Item[b]);
            end;
          end;
        end;
      end;
      break;
    end;
  end;
  PropBag := nil;
  MyMoniker := nil;
end;

procedure TFormBaseFilter.GetFilterInfo;
var
  i: integer;
  unk: IUnknown;
  PinInfo: TPinInfo;
  BaseF: IBaseFilter;
begin
  BaseF := nil;
  try
    if Filter.BaseFilter.CreateFilter <> nil then
    begin
      for i := 0 to length(DSItfs)-1 do
      begin
        unk := nil;
        if Succeeded(IFilter(Filter).QueryInterface(DSItfs[i].itf, unk)) then
          Interfaces.Items.Add(DSItfs[i].name);
      end;

      if Succeeded(Filter.QueryInterface(IBaseFilter, BaseF)) then
      begin
        PinList.Assign(BaseF);
        if PinList.Count > 0 then
          for i := 0 to PinList.Count - 1 do
          begin
            PinInfo := PinList.PinInfo[i];
            case PinInfo.dir of
              PINDIR_INPUT  : Pins.Items.AddObject(format('%s',[PinInfo.achName]), InPinPic);
              PINDIR_OUTPUT : Pins.Items.AddObject(format('%s',[PinInfo.achName]), OutPinPic);
            end;
            PinInfo.pFilter := nil;
          end;
      End;
    end;
  finally
    unk := nil;
    BaseF := nil;
  end
end;

procedure TFormBaseFilter.RefreshTree;
var
  i, j : Integer;
  TmpNode : TTreeNode;
  NodeItem : pNodeItem;
  MonikerStr : PWideChar;
  Tmp : WideString;
begin
  Filters.Items.BeginUpdate;
  Filters.Items.Clear;
  for i := 0 to SysDevEnum.CountCategories - 1 do
  begin
    New(NodeItem);
    NodeItem^.Index := i;
    TmpNode := Filters.Items.AddChildObject(nil, SysDevEnum.Categories[i].FriendlyName, NodeItem);
    SysDevEnum.SelectIndexCategory(i);
    if SysDevEnum.CountFilters > 0 then
      for j := 0 to SysDevEnum.CountFilters - 1 do
      begin
        SysDevEnum.GetMoniker(j).GetDisplayName(nil, nil, MonikerStr);
        New(NodeItem);
        NodeItem^.Index := j;
        NodeItem^.Color := FilterColors[0];
        Tmp := MonikerStr;
        Tmp := Copy(Tmp, Pos(':', Tmp)+1, 255);
        Tmp := uppercase(Copy(Tmp, 1, pos(':', Tmp) -1));
        If Tmp = 'PNP' then NodeItem^.Color := FilterColors[1];
        If Tmp = 'CM' then NodeItem^.Color := FilterColors[2];
        If Tmp = 'KS' then NodeItem^.Color := FilterColors[3];
        If Tmp = 'DMO' then NodeItem^.Color := FilterColors[4];
        Filters.Items.AddChildObject(TmpNode, SysDevEnum.Filters[j].FriendlyName, NodeItem);
      end;
  end;
  {$IFDEF VER130}
  Filters.AlphaSort;
  {$ELSE}
  Filters.AlphaSort(True);
  {$ENDIF}
  Filters.Items.EndUpdate;
end;

procedure TFormBaseFilter.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  PinList.Clear;
  FilterGraph.ClearGraph;
  FilterGraph.Active := false;
end;

⌨️ 快捷键说明

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