Efectivamente... Tiene pinta de que no se está cerrando pero no sé qué hacer para que se cierre!!
Es más, abro el proyecto y automáticamente me sale la imagen que visualiza la webcam del pc, doy a desconectar la cámara desde la pantalla de delphi, vuelvo a dar a conectar y se abre una ventanita en la que me pide que elija qué cámara quiero usar (solo detecta la webcam) la elijo y me da el error de ayer.
No sé por qué la primera vez que abro el programa detecta la cámara web directamente y una vez que cierro la ventana o desconecto la cámara, la siguiente vez que intento conectar la cámara me pide que elija y al elegirla me da error!
El procedure que utilizo para conectar/desconectar es:
Código Delphi
[-]procedure TtsCap32.SetConnected(status:Boolean);
var
c: array[0..9]of Char;
begin
if (csReading in ComponentState) then begin
BufConnected := status;
exit;
end;
if (PROHIBITED_STATES*ComponentState)<>[] then exit;
if status then begin
if not FConnected and IsWindow(Handle) then
begin
if FAutomaticSearchForDriver then
try
FDriverNo := AutomaticSearchForDriver;
except
MessageDlg(ERRMSG_GENERAL_OPEN_FAILED, mtError, [mbOk], 0);
exit;
end;
StatusText := '--CONNECTING TO ' + FDriverNameList[FDriverNo] + '...--';
Paint;
BroadcastToWindows(Handle, 'TtsCap32', ConnectRequCode, FDriverNo, 0);
StrPCopy(@c, 'TSCap32');
FhCapWnd := 0;
FhCapWnd := capCreateCaptureWindowA(@c, (WS_CHILD or WS_VISIBLE),
0, 0, 200, 100, Handle, 0);
if not IsWindow(FhCapWnd) then tsError('Open the Capturewindow failed', True);
try
if not LongBool(SendMessage(WM_CAP_DRIVER_CONNECT, FDriverNo, 0)) then
tsError(ERRMSG_CONNECT_FAILED, True) else FConnected := TRUE;
FDriverCaps.UpdateShownCaps;
GetCaptureStatus;
GetCaptureParameter;
GetVideoFormat;
FAudioParameter.LoadAudioFormat;
InstallCallbacks(TRUE);
InstallFrameCallback(FALSE);
ExecuteAll;
Resize;
StatusText := '--CONNECTED--';
if IsMessageHookNeeded and not PreventMessageHook then
tsCap32MessageRedirecter.RegisterHandlePair(self);
if Assigned(FOnConnected) then FOnConnected(self, TRUE);
SyncExternalCtrls;
except
on E: Exception do begin
FConnected := FALSE;
StatusText := '--DISCONNECTED--';
DestroyWindow(FhCapWnd);
FhCapWnd := 0;
{$IFDEF TSCAP32_GERMAN_VERSION}
tsError('Fehler bei Treiberanmeldung. Auslösende Exception meldet: '+ E.Message, True);
{$ELSE}
tsError('connect failed - exception message: '+ E.Message, True);
{$ENDIF}
end;
end; end; end else
begin
if FConnected then
begin
tsCap32MessageRedirecter.UnRegisterHandlePair(self);
FConnected:=FALSE;
if IsWindow(hCapWnd) then begin
if CapturingNow then CapOrder := stop;
InstallCallbacks(FALSE);
if not LongBool(SendMessage(WM_CAP_DRIVER_DISCONNECT, FDriverNo, 0))then
tsError('Disconnect failed', False);
if (LongBool(DestroyWindow(FhCapWnd)) = FALSE) then
tsError('CloseWindow failed', False);
end;
FSaveRequired := FALSE;
FhCapWnd:=0;
if FpVideoFormat<>nil then
begin
FreeMem(FpVideoFormat);
fpVideoFormat := nil;
end;
StatusText := '--DISCONNECTED--';
if Assigned(FOnConnected) then FOnConnected(self, FALSE);
Invalidate;
FDriverCaps.UpdateShownCaps;
SyncExternalCtrls;
end; end; end;
Mil gracias de antemano por tu respuesta. Por cierto! Me encanta tu P.D!