#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? + Multi-Zitat Zitieren
#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. + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren