Problem mit vfw

danny61
Beiträge: 94
Registriert: So 5. Nov 2006, 18:40
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Berlin

Problem mit vfw

Beitrag von danny61 »

Hallo,
ich möchte eine Klasse schreiben die die vfw-Capture Funktionen Kapselt.
Leider scheitere ich schon am constructor :?
Beim Aufruf von CapCreateWnd erhalte ich eine Schutzverletzung.
So wie ich die Fehlermeldung vertehe, gibt es kein Handle auf meine Klasse/Control.
Müßte das Handle nicht aber nach dem inherited Create zur Verfügung stehen ?
Muß allerdings gestehen, dass das mein erster Versuch ist direkt mit der Win API zu arbeiten, also vermutlich ein Newbie Fehler :)
Hier meine Klasse (bis jetzt) :

Code: Alles auswählen

unit Media;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, Controls, Windows, vfw, extCtrls, Dialogs;
 
Type
  TVideoCap = Class(TPanel)
  private
    FCapHandle : HWND;
    procedure CreateVWnd;
  public
    constructor create(aOwner : TComponent); override;
  end;
 
implementation
 
procedure TVideoCap.CreateVWnd;
begin
   FCapHandle:=capCreateCaptureWindow('Video Capture',WS_CHILD or WS_VISIBLE or WS_CLIPCHILDREN or WS_CLIPSIBLINGS,0,0,Width,Height,Handle,1);
end;
 
constructor TVideoCap.Create(aOwner:TComponent);
begin
  inherited create(aOwner);
  CreateVWnd;
end;
 
end.

Beim gleichen Aufruf von CapCreateWnd innerhalb eines Formulars mit dem Handle eines TPanel funktioniert es.
thx

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

gute frage ...
ShowMessage(IntToStr(Handle))

dürfte dir ne antwort liefern ....
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

danny61
Beiträge: 94
Registriert: So 5. Nov 2006, 18:40
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Berlin

Beitrag von danny61 »

Dann kommt wie zu erwarten war, auch eine AV

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Sorry dann musst wohl mal den debugger benutzen ne av hätt ich da nicht erwartet da das Handle Cardinal sein dürfte und die Funktion die es erzeugt ne Exception auslösen kann aber ne av ?!
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

danny61
Beiträge: 94
Registriert: So 5. Nov 2006, 18:40
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Berlin

Beitrag von danny61 »

Tja, das mit dem Debuggen habe ich schon versucht.
Leider sagt mir das überhaupt nichts.
Hier die Stelle an der der Fehler ausgelöst wird :
Dateianhänge
Clipboard01.jpg

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Nö, das ist schon die exceptionbehandlung da wird der fehler mit Sicherheit nicht ausgelöst.
Mach mal an dieser Stelle Alt+Strg+S ...
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

danny61
Beiträge: 94
Registriert: So 5. Nov 2006, 18:40
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Berlin

Beitrag von danny61 »

Mit STRG+ALT+S erhalte ich das hier :
Dateianhänge
Clipboard01.jpg

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Da seist du schön das der Fehler eigentlich in TWinControl.CreateWnd auftritt warum auch immer das passiert
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

danny61
Beiträge: 94
Registriert: So 5. Nov 2006, 18:40
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Berlin

Beitrag von danny61 »

So wie ich das verstehe fehlt meinem Control der Parent aber den gebe ich doch schon im Constructor an.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Und das Handle ist gut zu dem Zeitpunkt?
Was hat es denn für einen Wert? (ShowMessage(..))

Was passiert, wenn du ein anderes Handle, z.B.
Application.MainForm.Handle;
übergibst?

danny61
Beiträge: 94
Registriert: So 5. Nov 2006, 18:40
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Berlin

Beitrag von danny61 »

Um das Handle zu erhalten bzw. zu erzeugen ruft er ja CreateWnd auf.
Wenn ich Application.MainForm.Handle benutze funktioniert es aber ich will das CaptureWindow ja an mein eigenes Control binden und evtl. später mal eine Komponente daraus machen.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

danny61 hat geschrieben:Um das Handle zu erhalten bzw. zu erzeugen ruft er ja CreateWnd auf.
Wenn ich Application.MainForm.Handle benutze funktioniert es aber ich will das CaptureWindow ja an mein eigenes Control binden und evtl. später mal eine Komponente daraus machen.


Ich meinte an die Funktion capCreateCaptureWindow(.........,Handle,1); übergibst.
Eventuell ist dein Handle noch nicht gut.
Hast du denn mal die primitivsten Tests gemacht?

Mach doch mal statt
CreateVWnd;
ShowMessage(Inttostr(Handle));

Da kackt der bestimmt auch schon ab, weil das Handle noch nix ist.
Zuerst Parent setzten für das TPanel derivat.

danny61
Beiträge: 94
Registriert: So 5. Nov 2006, 18:40
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Berlin

Beitrag von danny61 »

Das da auch schon die AV kommt steht ja oben.
Den Parent setze ich doch aber mit inherited create(aOwner)
oder verstehe ich da was falsch ?

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

danny61 hat geschrieben:Das da auch schon die AV kommt steht ja oben.
Den Parent setze ich doch aber mit inherited create(aOwner)
oder verstehe ich da was falsch ?


Owner ist Owner nicht Parent!
Vielleicht gibt's für TPanel CreateParented() weiss ich aber nicht ausswendig.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

@theo lies dir doch den thread mal von anfang an durch und stell nich die selben fragen wie ich nochma :) der fehler tritt tief im lcl code auf eigentlich müsste es so funktionieren wie ers macht da hatter schon recht
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Antworten