Ver Mensaje Individual
  #3  
Antiguo 12-06-2018
LanAndrew LanAndrew is offline
Registrado
NULL
 
Registrado: jun 2018
Posts: 2
Reputación: 0
LanAndrew Va por buen camino
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
  //Beim Lesen der propertywerte existiert das Fenster noch nicht. Der property-
  //wert wird gespeichert und mit ihm wird nach CreateWnd SetConnected erneut aufgerufen
  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

      //automatische Suche nach einem Treiber:
      if FAutomaticSearchForDriver then
      try
        FDriverNo := AutomaticSearchForDriver;
      except
        //keiner gefunden: Abbruch
        MessageDlg(ERRMSG_GENERAL_OPEN_FAILED, mtError, [mbOk], 0);
        exit;
      end;

      {Capture-Window oeffnen}
      {Meldung:}
      StatusText := '--CONNECTING TO ' + FDriverNameList[FDriverNo] + '...--';
      Paint;
      {Broadcast an alle anderen TTSCAP32-Fenster, die sollen ihre Capturewindow schließen}
      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
      {Verbindung zum Treiber herstellen}
        if not LongBool(SendMessage(WM_CAP_DRIVER_CONNECT, FDriverNo, 0)) then
          tsError(ERRMSG_CONNECT_FAILED, True) else FConnected := TRUE;
        {Drivercaps holen}
        FDriverCaps.UpdateShownCaps;
        {CapStatus holen}
        GetCaptureStatus;
        {Captureparameter holen}
        GetCaptureParameter;
        {Videoformat holen}
        GetVideoFormat;
        {AudioFormat holen}
        FAudioParameter.LoadAudioFormat;
        {Callbacks einschalten}
        InstallCallbacks(TRUE);
        InstallFrameCallback(FALSE);
        {eingestellte parameter übernehmen}
        ExecuteAll;
        {Größe d. CaptureFensters Updaten}
        Resize;
        StatusText := '--CONNECTED--';
        {Tastatur- und mouse - Messages zum CaptureWindow an Komponente weiterleiten, bitte}
        if IsMessageHookNeeded and not PreventMessageHook then
          tsCap32MessageRedirecter.RegisterHandlePair(self);
        //Userevent OnConnected
        if Assigned(FOnConnected) then FOnConnected(self, TRUE);
        //Userevent OnSync
        SyncExternalCtrls;
      except
        on E: Exception do begin
          {something was wrong. free all and disconnect}
          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; //Exceptionblock
    end; //!FConnected&&IsWindow
  end //status
  else
  begin
    if FConnected then
    begin
      {Tastatur- und mouse-Message-umleitung aus}
      tsCap32MessageRedirecter.UnRegisterHandlePair(self);
      //nach außen hin ab jetzt disconnected
      FConnected:=FALSE;

      if IsWindow(hCapWnd) then begin
        {Falls Aufnahme am laufen, ausschalten}
        if CapturingNow then CapOrder := stop;
        {Callbacks ausschalten}
        InstallCallbacks(FALSE);
        {Verbindung zum Treiber abbrechen}
        if not LongBool(SendMessage(WM_CAP_DRIVER_DISCONNECT, FDriverNo, 0))then
          tsError('Disconnect failed', False);
        {Fenster killen}
        if (LongBool(DestroyWindow(FhCapWnd)) = FALSE) then
          tsError('CloseWindow failed', False);
      end;
      FSaveRequired := FALSE;
      FhCapWnd:=0;

      {Videoformat loeschen, falls gefüllt}
      if FpVideoFormat<>nil then
      begin
        FreeMem(FpVideoFormat);
        fpVideoFormat := nil;
      end;

      StatusText := '--DISCONNECTED--';
      //Userevent OnConnected
      if Assigned(FOnConnected) then FOnConnected(self, FALSE);
      //neuzeichnen
      Invalidate;
      {Drivercaps auf FALSE updaten}
      FDriverCaps.UpdateShownCaps;
      {Angeschlossenes Popupmenu synchronisieren}
      SyncExternalCtrls;
    end; //FConnected
  end; //!status
end;
Mil gracias de antemano por tu respuesta. Por cierto! Me encanta tu P.D!

Última edición por Casimiro Notevi fecha: 12-06-2018 a las 18:11:57. Razón: Poner etiquetas [delphi] [/delphi]
Responder Con Cita