[Delphi] Video starten

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von N30N, 3. September 2007 .

Schlagworte:
  1. 3. September 2007
    Video starten

    Also mein erstes Problem hab ich ja schon gelöst. Jetzt müsste ich nur noch über einen Dialog ein Video auswählen und dieses dann per Knopfdruck starten.

    Wie stell ich das an?

    Wäre cool wenn mir einer sagen kann wie ich das anstelle! Danke!

    //Edit:

    Okay, also das mit dem auswählen per Opendialog hab ich hinbekommen. Nun muss ich nur noch das Video starten und schliessen. Wie mach ich das?




    Ursprünglicher Thread:

    Also ich habe hier eine USB Experiment Karte. Diese hat 5 Schalter, welche jeweils ein Signal an den Computer senden. Problem ist folgendes: Ich will beim drücken des Schalters ein Programm ausführen.

    Auf der CD war eine Beschreibung und ein Beispielcode mit dabei.

    XUP - Anleitung
    XUP - Delphi Projekt

    Hier ist der Code:

    Code:
    unit K8055;
    
    interface
    
    uses
     Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
     StdCtrls, ExtCtrls, ComCtrls, Math, Buttons;
    
    type
     TForm1 = class(TForm)
     GroupBox1: TGroupBox;
     SK6: TCheckBox;
     SK5: TCheckBox;
     Timer1: TTimer;
     Button3: TButton;
     Label12: TLabel;
     GroupBox2: TGroupBox;
     CheckBox1: TCheckBox;
     CheckBox2: TCheckBox;
     CheckBox3: TCheckBox;
     GroupBox3: TGroupBox;
     CheckBox4: TCheckBox;
     CheckBox5: TCheckBox;
     CheckBox6: TCheckBox;
     CheckBox7: TCheckBox;
     CheckBox8: TCheckBox;
     CheckBox9: TCheckBox;
     CheckBox10: TCheckBox;
     CheckBox11: TCheckBox;
     CheckBox12: TCheckBox;
     CheckBox13: TCheckBox;
     GroupBox4: TGroupBox;
     Edit1: TEdit;
     Button2: TButton;
     GroupBox5: TGroupBox;
     Edit2: TEdit;
     Button1: TButton;
     RadioGroup1: TRadioGroup;
     RadioGroup2: TRadioGroup;
     Button4: TButton;
     Button5: TButton;
     Button6: TButton;
     Button7: TButton;
     Timer2: TTimer;
     SpeedButton1: TSpeedButton;
     GroupBox6: TGroupBox;
     TrackBar1: TTrackBar;
     Label10: TLabel;
     GroupBox7: TGroupBox;
     TrackBar2: TTrackBar;
     Label7: TLabel;
     GroupBox8: TGroupBox;
     ProgressBar1: TProgressBar;
     Label14: TLabel;
     GroupBox9: TGroupBox;
     ProgressBar2: TProgressBar;
     Label16: TLabel;
     procedure Button3Click(Sender: TObject);
     procedure Timer1Timer(Sender: TObject);
     procedure Button2Click(Sender: TObject);
     procedure TrackBar1Change(Sender: TObject);
     procedure TrackBar2Change(Sender: TObject);
     procedure Button1Click(Sender: TObject);
     procedure RadioGroup1Click(Sender: TObject);
     procedure RadioGroup2Click(Sender: TObject);
     procedure Button4Click(Sender: TObject);
     procedure Button5Click(Sender: TObject);
     procedure Button6Click(Sender: TObject);
     procedure Button7Click(Sender: TObject);
     procedure DigitalOut(Sender: TObject);
     procedure Timer2Timer(Sender: TObject);
     procedure FormCreate(Sender: TObject);
     procedure SpeedButton1Click(Sender: TObject);
     procedure FormClose(Sender: TObject; var Action: TCloseAction);
     
     private
     { Private declarations }
     public
     { Public declarations }
     end;
    
    var
     Form1: TForm1; 
     timed:boolean;
     n:longint;
     DisableOtherFunctionCall,xxx:boolean;
    
    implementation
    
    {$R *.DFM}
    function OpenDevice(CardAddress: Longint): Longint; stdcall; external 'K8055d.dll';
    procedure CloseDevice; stdcall; external 'K8055d.dll';
    function ReadAnalogChannel(Channel: Longint):Longint; stdcall; external 'K8055d.dll';
    procedure ReadAllAnalog(var Data1, Data2: Longint); stdcall; external 'K8055d.dll';
    procedure OutputAnalogChannel(Channel: Longint; Data: Longint); stdcall; external 'K8055d.dll';
    procedure OutputAllAnalog(Data1: Longint; Data2: Longint); stdcall; external 'K8055d.dll';
    procedure ClearAnalogChannel(Channel: Longint); stdcall; external 'K8055d.dll';
    procedure ClearAllAnalog; stdcall; external 'K8055d.dll';
    procedure SetAnalogChannel(Channel: Longint); stdcall; external 'K8055d.dll';
    procedure SetAllAnalog; stdcall; external 'K8055d.dll';
    procedure WriteAllDigital(Data: Longint);stdcall; external 'K8055d.dll';
    procedure ClearDigitalChannel(Channel: Longint); stdcall; external 'K8055d.dll';
    procedure ClearAllDigital; stdcall; external 'K8055d.dll';
    procedure SetDigitalChannel(Channel: Longint); stdcall; external 'K8055d.dll';
    procedure SetAllDigital; stdcall; external 'K8055d.dll';
    function ReadDigitalChannel(Channel: Longint): Boolean; stdcall; external 'K8055d.dll';
    function ReadAllDigital: Longint; stdcall; external 'K8055d.dll';
    function ReadCounter(CounterNr: Longint): Longint; stdcall; external 'K8055d.dll';
    procedure ResetCounter(CounterNr: Longint); stdcall; external 'K8055d.dll';
    procedure SetCounterDebounceTime(CounterNr, DebounceTime:Longint); stdcall; external 'K8055d.dll';
    
    procedure TForm1.Button3Click(Sender: TObject);
    var h,CardAddr:longint;
    begin
     CardAddr:= 3-(integer(sk5.Checked) + integer(sk6.Checked) * 2);
     h:= OpenDevice(CardAddr);
     case h of
     0..3: label12.caption:='Card '+ inttostr(h)+' connected';
     -1: label12.caption:='Card '+ inttostr(CardAddr)+' not found';
     end;
    end;
    
    procedure TForm1.Timer1Timer(Sender: TObject);
    var i, Data1, Data2: longint;
    begin
     timer1.enabled:=false;
     Edit1.text:=inttostr(ReadCounter(1));
     Edit2.text:=inttostr(ReadCounter(2));
     ReadAllAnalog(Data1,Data2);
     ProgressBar1.Position:=Data1;
     ProgressBar2.Position:=Data2;
     Label14.caption:=inttostr(Data1);
     Label16.caption:=inttostr(Data2);
     i:=ReadAllDigital;
     CheckBox1checked:=(i and 1)>0;
     CheckBox2.checked:=(i and 2)>0;
     CheckBox3.checked:=(i and 4)>0;
     CheckBox4.checked:=(i and 8)>0;
     CheckBox5.checked:=(i and 16)>0;
     timer1.enabled:=true;
    end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    begin
     ResetCounter(1);
    end;
    
    procedure TForm1.TrackBar1Change(Sender: TObject);
    begin
     if not DisableOtherFunctionCall then OutputAnalogChannel(1,255-TrackBar1.position);
     Label10.caption:=inttostr(255-TrackBar1.position);
    end;
    
    procedure TForm1.TrackBar2Change(Sender: TObject);
    begin
     if not DisableOtherFunctionCall then OutputAnalogChannel(2,255-TrackBar2.position);
     Label7.caption:=inttostr(255-TrackBar2.position);
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     ResetCounter(2);
    end;
    
    procedure TForm1.RadioGroup1Click(Sender: TObject);
    var t1:longint;
    begin
     case RadioGroup1.ItemIndex of
     0: t1:=0;
     1: t1:=2;
     2: t1:=10;
     3: t1:=1000;
     end;
     SetCounterDebounceTime(1,t1);
    end;
    
    procedure TForm1.RadioGroup2Click(Sender: TObject);
    var t2:longint;
    begin
     case RadioGroup2.ItemIndex of
     0: t2:=0;
     1: t2:=2;
     2: t2:=10;
     3: t2:=1000;
     end;
     SetCounterDebounceTime(2,t2);
    end;
    
    procedure TForm1.Button4Click(Sender: TObject);
    begin
     SetAllDigital;
     DisableOtherFunctionCall:=true;
     CheckBox6.checked:=true;
     CheckBox7.checked:=true;
     CheckBox8.checked:=true;
     CheckBox9.checked:=true;
     CheckBox10.checked:=true;
     CheckBox11.checked:=true;
     CheckBox12.checked:=true;
     CheckBox13.checked:=true;
     DisableOtherFunctionCall:=false;
    end;
    
    procedure TForm1.Button5Click(Sender: TObject);
    begin
     SetAllAnalog;
     DisableOtherFunctionCall:=true;
     TrackBar1.position:=0;
     TrackBar2.position:=0;
     DisableOtherFunctionCall:=false;
    end;
    
    procedure TForm1.DigitalOut(Sender: TObject);
    var i:longint;
    begin
     i:=integer(CheckBox6.checked)*1+
     integer(CheckBox7.checked)*2+
     integer(CheckBox8.checked)*4+
     integer(CheckBox9.checked)*8+
     integer(CheckBox10.checked)*16+
     integer(CheckBox11.checked)*32+
     integer(CheckBox12.checked)*64+
     integer(CheckBox13.checked)*128;
     if not DisableOtherFunctionCall then WriteAllDigital(i);
    end;
    procedure TForm1.Button6Click(Sender: TObject);
    begin
     ClearAllDigital;
     DisableOtherFunctionCall:=true;
     CheckBox6.checked:=false;
     CheckBox7.checked:=false;
     CheckBox8.checked:=false;
     CheckBox9.checked:=false;
     CheckBox10.checked:=false;
     CheckBox11.checked:=false;
     CheckBox12.checked:=false;
     CheckBox13.checked:=false;
     DisableOtherFunctionCall:=false;
    end;
    
    procedure TForm1.Button7Click(Sender: TObject);
    begin
     ClearAllAnalog;
     DisableOtherFunctionCall:=true;
     TrackBar1.position:=255;
     TrackBar2.position:=255;
     DisableOtherFunctionCall:=false;
    end;
    
    
    procedure TForm1.Timer2Timer(Sender: TObject);
    begin
     ClearDigitalChannel(n);
     TCheckBox(Form1.FindComponent('CheckBox'+inttostr(n+5))).checked:=false;
     inc(n);
     if n=9 then n:=1;
     TCheckBox(Form1.FindComponent('CheckBox'+inttostr(n+5))).checked:=true;
     SetDigitalChannel(n);
    end;
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
     n:=8;
     DisableOtherFunctionCall:=false;
     xxx:=false;
    end;
    
    procedure TForm1.SpeedButton1Click(Sender: TObject);
    begin
     timer2.enabled:=SpeedButton1.Down;
    end;
    
    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
     CloseDevice;
    end;
    
    end.

    Also, es soll einfach nur, wenn der Schalter auf der Karte gedrückt wird, ein Video gestartet werden. Ist ja Praktisch genau das selbe wie ein Programm starten.

    Kann mir da jemand helfen? Ich blick da einfach nicht durch...

    Wäre supergeil


    //Edit:

    Okay, bin schomal weitergekommen. Wenn ich unter

    Code:
    procedure TForm1.Timer1Timer(Sender: TObject);
    var i, Data1, Data2: longint;
    begin
     timer1.enabled:=false;
     Edit1.text:=inttostr(ReadCounter(1));
     Edit2.text:=inttostr(ReadCounter(2));
     ReadAllAnalog(Data1,Data2);
     ProgressBar1.Position:=Data1;
     ProgressBar2.Position:=Data2;
     Label14.caption:=inttostr(Data1);
     Label16.caption:=inttostr(Data2);
     i:=ReadAllDigital;
     CheckBox1.checked:=(i and 1)>0;
    [B] if Checkbox1.checked = true then showmessage ('lol');[/B]
     CheckBox2.checked:=(i and 2)>0;
     CheckBox3.checked:=(i and 4)>0;
     CheckBox4.checked:=(i and 8)>0;
     CheckBox5.checked:=(i and 16)>0;
     timer1.enabled:=true;
    end;
    eine If Abfrage einsetze, kann ich zum Beispiel ne Meldung ausgeben. In diesem Fall 'lol'. So, wie stell ich es jetzt an das man mit nem Savedialog nen Dateipfad zu dem Video abspeichert und dieses dann bei Knopfdruck abspielt? Ist ja nicht anders wie ne showmessage, nur wie war nochmal der Code für sowas?
     
  2. 3. September 2007
    AW: Video starten

    also ich würde es über den obendialog machen

    hier ein beispeil

    Code:
    if opendialog1.execute then begin //dialog öfffnen
     showmessage(opendialog1.files.text); //verzeichnis anzeigen
    end;
    also ganz einfach entweder opendialog1.files.text in einem string speichern oder direkt über schellexecute starten damit solltest du dein video abspielen können und wenn du das ganze auf der form machen willst dann benätigst du halt noch den tmediaplayer dann kannste sogar pausieren stoppen etc.
     
  3. 3. September 2007
    AW: Video starten

    Die Variable Video1 ist vom Typ string und beinhaltet den Pfad zur Videodatei. Wenn der Befehl ausgeführt wird passiert allerdings nichts. Starte ich eine .exe, funktionierts.

    An dem Rechner an dem es ausgeführt wird, gibt es weder Tastatur noch Maus. Nur diese Schalter.

    Es muss übrigens auch nicht gestoppt bzw pausiert werden. Es reicht, wenn das Video im Vollbildmodus vom Windows Media Player startet und bis zum Ende abgespielt wird.

    Mehr brauch ich nicht
     
  4. 3. September 2007
    AW: Video starten

    achso du willst du quasi einen rechner fürs wohnzimmer basteln nette idee

    versuchs doch mal so

    Code:
    shellexecute(handle,'open',pchar('wmplayer.exe'),pchar(video1),nil,sw_show);
    das sollte eigentlich gehen

    oder so falls dir das lieber ist
    Code:
    shellexecute(handle,'open',pchar('wmplayer.exe'),@video1,nil,sw_show);
    diese beiden zeilen code bedeuten genau das gleiche mit pchar oder mit @ wandelst du den string um
     
  5. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.