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

📄 teevideoplayer.pas

📁 BCB第三方组件
💻 PAS
📖 第 1 页 / 共 2 页
字号:
     ITimer.Enabled:=True
  else
  if not Playing then
  begin
    Open;
    ICount:=StartFrame;
    IPlaying:=True;
    ITimer.Enabled:=True;
    IEndFrame:=EndFrame;
  end;
end;

procedure TVideoPlayerTool.Stop;
begin
  if Playing then
  begin
    ITimer.Enabled:=False;
    Finish;
    IPlaying:=False;
    IPaused:=False;
  end;
end;

function TVideoPlayerTool.GetDelay: Integer;
begin
  result:=ITimer.Interval;
end;

procedure TVideoPlayerTool.SetDelay(const Value: Integer);
begin
  ITimer.Interval:=Value;
end;

procedure TVideoPlayerTool.SetFilters(const Value: TFilterItems);
begin
  Filters.Assign(Value);
end;

class function TVideoPlayerTool.GetEditorClass: String;
begin
  result:='TVideoPlayerEditor';
end;

procedure TVideoPlayerEditor.BPlayClick(Sender: TObject);
begin
  if BPlay.Tag=1 then
  begin
    Player.Stop;
    Player.OnFrame:=OldOnFrame;
    BPlay.Caption:=TeeMsg_Play;
    BPlay.Tag:=0;
    LFrame.Caption:='';
  end
  else
  begin
    Player.Play;
    SetupPlay;
  end;
end;

procedure TVideoPlayerEditor.SetupPlay;
begin
  OldOnFrame:=Player.OnFrame;
  Player.OnFrame:=PlayerFrame;
  VideoSize:=Player.GetEnd-Player.GetStart;
  BPlay.Caption:=TeeMsg_Stop;
  BPlay.Tag:=1;
end;

procedure TVideoPlayerEditor.PlayerFrame(Sender: TObject);
begin
  if Assigned(OldOnFrame) then
     OldOnFrame(Sender);

  LFrame.Caption:=IntToStr(Player.Position)+' / '+IntToStr(VideoSize);
end;

procedure TVideoPlayerEditor.FormShow(Sender: TObject);

  procedure FindPicture(Display,Index:Integer);
  begin
    CBDisplay.ItemIndex:=Display;
    CBDisplayChange(Self);
    CBItem.ItemIndex:=Index;
  end;

  procedure SearchTool;

    function FindTool(Index:Integer; APicture:TTeePicture):Boolean;
    begin
      CBDisplay.ItemIndex:=Index;
      CBDisplayChange(Self);
      CBItem.ItemIndex:=CBItem.Items.IndexOfObject(APicture);
      result:=Player.Picture=APicture;
    end;

  var t : Integer;
  begin
    with Player.ParentChart do
    for t:=0 to Tools.Count-1 do
        if Tools[t] is TAnnotationTool then
        begin
          if FindTool(0,TAnnotationTool(Tools[t]).Shape.Picture) then
             break;
        end
        else
        if Tools[t] is TChartImageTool then
        begin
          if FindTool(1,TChartImageTool(Tools[t]).Picture) then
             break;
        end;
  end;

  procedure CheckToBack;
  begin
    if Player.ParentChart.BackImage.Inside then
    begin
      RBOther.Checked:=True;
      CBDisplay.ItemIndex:=4;
      CBDisplayChange(Self);
      CBItem.ItemIndex:=0;
    end
    else
       RBBack.Checked:=True;
  end;

begin
  Player:=TVideoPlayerTool(Tag);

  if Assigned(Player) then
  with Player do
  begin
    BPlay.Enabled:=FileName<>'';

    if Playing then
       SetupPlay;

    if Assigned(Picture) then
    begin
      if Picture=ParentChart.BackImage then
         CheckToBack
      else
      begin
        RBOther.Checked:=True;

        with ParentChart as TCustomChart do
        begin
          if Legend.Picture=Picture then
             CBDisplay.ItemIndex:=2
          else
          if Walls.Back.Picture=Picture then
             FindPicture(4,0)
          else
          if Walls.Bottom.Picture=Picture then
             FindPicture(4,1)
          else
          if Walls.Left.Picture=Picture then
             FindPicture(4,2)
          else
          if Walls.Right.Picture=Picture then
             FindPicture(4,3)
          else
          if Picture=Title.Picture then
             FindPicture(3,0)
          else
          if Picture=SubTitle.Picture then
             FindPicture(3,1)
          else
          if Picture=Foot.Picture then
             FindPicture(3,2)
          else
          if Picture=SubFoot.Picture then
             FindPicture(3,3)
          else
             SearchTool;
        end;
      end;
    end
    else
      CheckToBack;

    CBDisplay.Enabled:=RBOther.Checked;

    LFrame.Caption:='';
    CBLoop.Checked:=Loop;
    UDDelay.Position:=Delay;
    EName.Text:=FileName;
  end;
end;

procedure TVideoPlayerEditor.CBLoopClick(Sender: TObject);
begin
  Player.Loop:=CBLoop.Checked;
end;

procedure TVideoPlayerEditor.EDelayChange(Sender: TObject);
begin
  if Showing then
     Player.Delay:=UDDelay.Position;
end;

procedure TVideoPlayerEditor.Button1Click(Sender: TObject);
begin
  ShowFiltersEditor(Self,Player.IBitmap,Player.Filters);
end;

procedure TVideoPlayerEditor.ENameChange(Sender: TObject);
begin
  Player.FileName:=EName.Text;
  BPlay.Enabled:=Player.FileName<>'';
end;

procedure TVideoPlayerEditor.SpeedButton1Click(Sender: TObject);
begin
  OpenDialog1.FileName:=EName.Text;

  if OpenDialog1.Execute then
     EName.Text:=OpenDialog1.FileName;
end;

procedure TVideoPlayerEditor.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Player.OnFrame:=OldOnFrame;
end;

procedure TVideoPlayerEditor.RBOtherClick(Sender: TObject);
begin
  RBBack.Checked:=False;
  CBDisplay.Enabled:=True;
  CBDisplay.ItemIndex:=-1;
  CBItem.Clear;
end;

procedure TVideoPlayerEditor.RBBackClick(Sender: TObject);
begin
  RBOther.Checked:=False;
  CBDisplay.Enabled:=False;
  CBItem.Enabled:=False;
  Player.Picture:=Player.ParentChart.BackImage;
  Player.ParentChart.BackImage.Inside:=False;
end;

procedure TVideoPlayerEditor.CBDisplayChange(Sender: TObject);

  procedure AddTools(AToolClass:TTeeCustomToolClass; Annotation:Boolean);
  var t   : Integer;
      tmp : TTeePicture;
  begin
    with Player.ParentChart.Tools do
    for t:=0 to Count-1 do
        if Items[t] is AToolClass then
        begin
          if Annotation then
             tmp:=(Items[t] as TAnnotationTool).Shape.Picture
          else
             tmp:=(Items[t] as TChartImageTool).Picture;

          CBItem.Items.AddObject(Items[t].Name,tmp);
        end;
  end;

begin
  Player.Picture:=nil;

  CBItem.Enabled:=True;
  CBItem.Clear;

  case CBDisplay.ItemIndex of
    0: AddTools(TAnnotationTool,True);
    1: AddTools(TChartImageTool,False);
    2: begin
         Player.Picture:=(Player.ParentChart as TCustomChart).Legend.Picture;
         CBItem.Enabled:=False;
       end;
    3: with (Player.ParentChart as TCustomChart) do
       begin
         CBItem.Items.AddObject(TeeMsg_Title,Title.Picture);
         CBItem.Items.AddObject(TeeMsg_SubTitle,SubTitle.Picture);
         CBItem.Items.AddObject(TeeMsg_Foot,Foot.Picture);
         CBItem.Items.AddObject(TeeMsg_SubFoot,SubFoot.Picture);
       end;
    4: with (Player.ParentChart as TCustomChart) do
       begin
         CBItem.Items.AddObject('Back',Walls.Back.Picture);
         CBItem.Items.AddObject('Bottom',Walls.Bottom.Picture);
         CBItem.Items.AddObject('Left',Walls.Left.Picture);
         CBItem.Items.AddObject('Right',Walls.Right.Picture);
       end;
  end;
end;

procedure TVideoPlayerEditor.FormDestroy(Sender: TObject);
begin
  if Assigned(Player) then
     Player.OnFrame:=OldOnFrame;
end;

procedure TVideoPlayerEditor.CBItemChange(Sender: TObject);
begin
  Player.Picture:=CBItem.SelectedObject as TTeePicture;
end;

procedure TVideoPlayerTool.SetPicture(const Value: TPicture);
begin
  if FPicture<>Value then
  begin
    if Assigned(FPicture) then
    begin
      FPicture.Assign(nil);
      FPicture.Bitmap.FreeImage;
    end;

    FPicture:=Value;
  end;
end;

initialization
  RegisterTeeTools([TVideoPlayerTool]);
  RegisterClass(TVideoPlayerEditor);
finalization
  UnRegisterTeeTools([TVideoPlayerTool]);
end.

⌨️ 快捷键说明

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