Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Webcam Code mehrmals ausführen (https://www.delphipraxis.net/107858-webcam-code-mehrmals-ausfuehren.html)

Larsi 3. Feb 2008 16:59


Webcam Code mehrmals ausführen
 
Liste der Anhänge anzeigen (Anzahl: 1)
hi,
in der codelib gibt es ja folgenden code:
Delphi-Quellcode:
//Zuerst brauchst du folgende Konstanten
const
  WM_CAP_DRIVER_CONNECT = WM_USER + 10;
  WM_CAP_EDIT_COPY = WM_USER + 30;
  WM_CAP_SET_PREVIEW = WM_USER + 50;
  WM_CAP_SET_OVERLAY = WM_USER + 51;
  WM_CAP_SET_PREVIEWRATE = WM_USER + 52;

implementation

{$R *.dfm} 

//Dann brauchst du noch das hier
function capCreateCaptureWindow(lpszWindowName: LPCSTR;
  dwStyle: DWORD;
  x, y,
  nWidth,
  nHeight: integer;
  hwndParent: HWND;
  nID: integer): HWND; stdcall;
  external 'AVICAP32.DLL' name 'capCreateCaptureWindowA';

procedure TForm1.LaberLaber; //halt irgendne Prozedur, ich habs im Formcreate, damit ich gleich was seh ^^ 
var handle:THandle;
begin
  handle := capCreateCaptureWindow('Video',ws_child+ws_visible, 0,
  0, 320, 240, Panel1.Handle, 1); //Wie du siehst, brauchst du ein Panel in diesem Beispiel ;-)
  SendMessage(handle, WM_CAP_DRIVER_CONNECT, 0, 0);
  SendMessage(handle, WM_CAP_SET_PREVIEWRATE, 30, 0);
  sendMessage(handle, WM_CAP_SET_OVERLAY, 1, 0);
  SendMessage(handle, wm_cap_set_preview, 1, 0);
end;

Aber wenn man dass in ne timer prozedur tue, dann ist angeblich schon irgendnein videotreiber verwendet. (verständlich, weil ich ja zweimal auf das gleiche zugriefen will, oda?)

meine frage ist jetzt wie ich das so mache dass es wieder so geht wie beim ersten mal nach dem zweiten mal :) . gibts irgendein Driver Disconnect was ich verwenden kann, hab das hier irgendwo mal gelesen, also mit dem diconnecten.

Ich habe es ja auch schon so ausprobiert:
Delphi-Quellcode:
SendMessage(handle, WM_CAP_DRIVER_DISCONNECT, 0, 0);
bzw. dann in const auch dass:
Delphi-Quellcode:
WM_CAP_DRIVER_DISCONNECT = WM_USER + 10;
aber wenn der code das zweite mal läuft kommt die gleiche meldung!!!

Der Fehler ist jetzt als png datei im anhang!
MFG Lars Wiltfang


Noch ne kleine Frage die grad aufkommt: Wie kann man das ganze schneller machen :)

toms 3. Feb 2008 17:28

Re: Webcam Code mehrmals ausführen
 
Welcher Code genau wird im Timer ausgeführt? capCreateCaptureWindow darfst du nur einmal ausführen.

Sharky 3. Feb 2008 17:30

Re: Webcam Code mehrmals ausführen
 
Zitat:

Zitat von Larsi
...Aber wenn man dass in ne timer prozedur tue, ...

Hai Larsi,

warum soll der Code denn in einem Timer laufen? Es wird doch eine Videostream angezeigt und nicht immer ein einzelnes Bild aufgenommen.

Phoenix 3. Feb 2008 17:33

Re: Webcam Code mehrmals ausführen
 
Zitat:

Zitat von Larsi
Ich habe es ja auch schon so ausprobiert:
Delphi-Quellcode:
SendMessage(handle, WM_CAP_DRIVER_DISCONNECT, 0, 0);
bzw. dann in const auch dass:
Delphi-Quellcode:
WM_CAP_DRIVER_DISCONNECT = WM_USER + 10;
aber wenn der code das zweite mal läuft kommt die gleiche meldung!!!

Das ist klar.

WM_USER + 10 ist ja schon connect. Du schickst also den gleichen Befehl (Verbinden), nur benutzt Du dafür einen anderen Namen der Konstante.

Du müsstest rausfinden, welcher Wert (anstelle von 10 = connect) für Disconnect (auf gut glück geraten: die 20 ist noch nicht definiert - das könnte also sein) steht, und den dann benutzen.

toms 3. Feb 2008 17:40

Re: Webcam Code mehrmals ausführen
 
Delphi-Quellcode:
WM_CAP_START = WM_USER;
WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11;

Larsi 4. Feb 2008 07:13

Re: Webcam Code mehrmals ausführen
 
oh wusste gar nicht das dass n livestream is^^ dachte das macht nur bilder :) hat sich jetzt alles geklärt!
MFG Lars Wiltfang


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz