Lasten- und Pflichtenheft ist gut ... "bau ma was ein, damit wir auch von einer webcam das bild in DMS bekommen"
Nja, da mach ich mal 3 Wochen Urlaub und schon schaltet wer die Kameras aus.
Aber zur Komponente.
Wenn du z.B. von TComponent erbst und den TThread nur als Unterkomponente laufen läßt, dann kann man diese Komponente auch nett auf der Form oder einem DatenModul ablegen und gemütlich über den
OI die Events anhängen.
Bzw. das TThread.Execute ganz einfach über
TThread.CreateAnonymousThread(...)
startet, die Synchronisierung über TThread.Synchronize(nil, ...) schiebt und sich somit die komplette TThread-Instanz erspart.
(im Notfall kann ich's dir auch mal in wenigen Minütchen entsprechend umstellen)
PS: Den Mist mit dem TfrmMain.JPEGReceived hab ich auch schon erlebt.
grad erst vor paar Wochen, als ich meine Webcam schnell mal via CAPI reingebaut hatte.
Wusstest du, daß es theoretisch sowas gibt?
Delphi-Quellcode:
procedure TfrmMain.JPEGReceived(Sender: TObject; Data: TMemoryStream);
begin
Image1.Picture.ForceType(TJPEGImage);
Image1.Picture.Graphic.LoadFromStream(Data);
end;
Aber weil irgendein besch* Arsch diese Prozedur unbedingt als Private deklarieren mußte, sieht der Ersatz-Code praktisch so aus
Delphi-Quellcode:
procedure TfrmMain.JPEGReceived(Sender: TObject; Data: TMemoryStream);
var
JPEG: TJPEGImage;
begin
if not (Image1.Picture.Graphic is TJPEGImage) then begin
JPEG := TJPEGImage.Create;
try
Image1.Picture.Assign(JPEG); // bzw. Image1.Picture.Graphic := JPEG;
finally
JPEG.Free;
end;
end;
Image1.Picture.Graphic.LoadFromStream(Data);
end;
Oder eben so, wie bei dir.