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

📄 _16_multiplexedinputs_masters.pas

📁 TVideoGrabber 7.5 TVideoGrabber 7.5 TVideoGrabber 7.5
💻 PAS
字号:
unit _16_MultiplexedInputs_Masters;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ComCtrls, ExtCtrls, VidGrab;

type
  TfrmMaster = class(TForm)
    Label1: TLabel;
    cboVideoDevices: TComboBox;
    btnStartMaster: TButton;
    btnStopMaster: TButton;
    btnNoPreview: TButton;
    VideoGrabberMaster: TVideoGrabber;
    mmoLog: TMemo;
    Label2: TLabel;
    cboVideoSize: TComboBox;
    cboVideoInput: TComboBox;
    Label3: TLabel;
    Label4: TLabel;
    cboAnalogVideoStandard: TComboBox;
    chkMultiplexedInputEmulation: TCheckBox;
    procedure btnStartMasterClick(Sender: TObject);
    procedure btnStopMasterClick(Sender: TObject);
    procedure cboVideoDevicesChange(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btnNoPreviewClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure VideoGrabberMasterLog(Sender: TObject; LogType: TLogType;
      Severity, InfoMsg: String);
    procedure VideoGrabberMasterVideoDeviceSelected(Sender: TObject);
    procedure cboVideoSizeChange(Sender: TObject);
    procedure cboVideoInputChange(Sender: TObject);
    procedure cboAnalogVideoStandardChange(Sender: TObject);
    procedure chkMultiplexedInputEmulationClick(Sender: TObject);
  private
  public
  end;

var
  frmMaster: TfrmMaster;

implementation

{$R *.DFM}

uses MultiplexedInputs_Slaves;

const
   FormSpacings = 5;

procedure AssignListToComboBox (ComboBox: TComboBox; List: String; Index: integer);
begin
   ComboBox.Text := '';
   ComboBox.Items.Text := List;
   if ComboBox.Items.Count > 0 then begin
      ComboBox.ItemIndex := Index;
   end;
end;

procedure CreateSlaveForm (IdInput: LongInt; var SlaveForm: TFrmSlave; FormTop, FormLeft: LongInt);
begin
   Application.CreateForm (TFrmSlave, SlaveForm);
   SlaveForm.Caption := 'Input ' + IntToStr (IdInput);
   SlaveForm.Top := FormTop;
   SlaveForm.Left := FormLeft;
   SlaveForm.VideoGrabberSlave.MultiplexedRole := mr_MultiplexedSlave;
   SlaveForm.Show;
end;

procedure TfrmMaster.FormCreate(Sender: TObject);
begin
   AssignListToComboBox (cboVideoDevices, VideoDevices, VideoGrabberMaster.VideoDevice);
   chkMultiplexedInputEmulation.Checked := VideoGrabberMaster.MultiplexedInputEmulation;
end;

procedure TfrmMaster.VideoGrabberMasterVideoDeviceSelected(
  Sender: TObject);
begin
   AssignListToComboBox (cboVideoSize, VideoGrabberMaster.VideoSizes, VideoGrabberMaster.VideoSize);
   AssignListToComboBox (cboVideoInput, VideoGrabberMaster.VideoInputs, VideoGrabberMaster.VideoInput);
   AssignListToComboBox (cboAnalogVideoStandard, VideoGrabberMaster.AnalogVideoStandards, VideoGrabberMaster.AnalogVideoStandard);
end;

procedure TfrmMaster.cboVideoSizeChange(Sender: TObject);
begin
   VideoGrabberMaster.VideoSize := cboVideoSize.ItemIndex;
end;

procedure TfrmMaster.cboVideoInputChange(Sender: TObject);
begin
   VideoGrabberMaster.VideoInput := cboVideoInput.ItemIndex;
end;

procedure TfrmMaster.cboAnalogVideoStandardChange(Sender: TObject);
begin
   VideoGrabberMaster.AnalogVideoStandard := cboAnalogVideoStandard.ItemIndex;
end;

const
   MINSLAVE = 0;
   MAXSLAVE = 15;

var
   FrmSlave: array[MINSLAVE..MAXSLAVE] of TFrmSlave;

procedure TfrmMaster.FormShow(Sender: TObject);
var
   i: LongInt;
   xPos, yPos: LongInt;
   FormCount: LongInt;
begin
   FormCount := 0;
   Left := 10;
   Top := 10;
   Application.ProcessMessages;
   xPos := frmMaster.Left;
   yPos := frmMaster.Top + frmMaster.Height + FormSpacings;
   for i := MINSLAVE to MAXSLAVE do begin
      if not assigned (FrmSlave[i]) then begin
         CreateSlaveForm (i, FrmSlave[i], yPos, xPos);
      end;
      inc (FormCount);
      if FormCount < 4 then begin
         xPos := xPos + FrmSlave[0].Width + FormSpacings;
      end
      else begin
         FormCount := 0;
         xPos := frmMaster.Left;
         yPos := yPos + FrmSlave[0].Height + FormSpacings;
      end;
   end;

   for i := MINSLAVE to MAXSLAVE do begin
      VideoGrabberMaster.AssociateMultiplexedSlave (i, FrmSlave[i].VideoGrabberSlave.UniqueId);
   end;
end;

procedure TfrmMaster.cboVideoDevicesChange(Sender: TObject);
begin
   VideoGrabberMaster.VideoDevice := cboVideoDevices.ItemIndex;
end;

procedure TfrmMaster.btnStartMasterClick(Sender: TObject);
begin
   VideoGrabberMaster.StartPreview;
end;

procedure TfrmMaster.btnStopMasterClick(Sender: TObject);
begin
   VideoGrabberMaster.StopPreview;
end;

procedure TfrmMaster.btnNoPreviewClick(Sender: TObject);
begin
   VideoGrabberMaster.VideoRenderer := vr_None;
   VideoGrabberMaster.Visible := False;
end;

procedure TfrmMaster.VideoGrabberMasterLog(Sender: TObject;
  LogType: TLogType; Severity, InfoMsg: String);
begin
   mmoLog.Lines.Add ('[' + Severity + '] ' + InfoMsg);
end;

procedure TfrmMaster.chkMultiplexedInputEmulationClick(Sender: TObject);
begin
   VideoGrabberMaster.MultiplexedInputEmulation := chkMultiplexedInputEmulation.Checked;
end;

end.

⌨️ 快捷键说明

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