Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Stretch bei Panel? (https://www.delphipraxis.net/36958-stretch-bei-panel.html)

ReDoX 28. Dez 2004 18:49


Stretch bei Panel?
 
Hi,
gibt es eine Möglichkeit stretch bei einem Panel zu benutzen?
Ich das ganze soll dann so wie bei einem Image funktionieren.
Mfg MrScholz

Karlson 30. Dez 2004 13:55

Re: Stretch bei Panel?
 
Für was sollte das denn gut sein? :) Das Panelskin wird ja immer der aktuellen Grösse angepasst, da bracuhst du doch kein stretch :)

ReDoX 30. Dez 2004 14:32

Re: Stretch bei Panel?
 
Also ich möchte das bild meine WebCam auf dem panel darstellen das funktioniert auch ganz gut aber hat nicht in der größe vom panel.
Deswegen stretch!
Mfg MrScholz

Luckie 30. Dez 2004 14:44

Re: Stretch bei Panel?
 
Wie wäre es mit einem TImage auf dem Panel zum Anzeigen?

Helmi 30. Dez 2004 14:45

Re: Stretch bei Panel?
 
Hallo,

ich hab mal ein Test-Programm ausgegramt und hab das mit dem Panel so gemacht:

Code:
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;

function capCreateCaptureWindow(lpszWindowName: LPCSTR;
  dwStyle: DWORD;
  x, y,
  nWidth,
  nHeight: integer;
  hwndParent: HWND;
  nID: integer): HWND; stdcall;
  external 'AVICAP32.DLL' name 'capCreateCaptureWindowA';

procedure TForm1.Button1Click(Sender: TObject);
var
  handle:THandle;
  Video_Width, Video_Height: Integer;

begin
  Video_Width  := 320;
  Video_Height := 240;

  Panel1.Width := Video_Width;
  Panel1.Height := Video_Height;

  handle := capCreateCaptureWindow('Video',ws_child + ws_visible, 0,
  0, Video_Width, Video_Height, Panel1.Handle, 1);
  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;

ReDoX 30. Dez 2004 14:55

Re: Stretch bei Panel?
 
@ Helmi Danke aber diese Variante stretcht das Bild der WebCam ja nicht wirklich sie stretcht eher das panel...
Das ganze soll so wie ein TImage funktionieren aber da ein Image kein Handel hat muss ich das auf dem Panel machen aber beim panel gibt es kein Panel1.stretch. :wall:
Mfg MrScholz
Edit: @ Lukie ich wie soll das gehen?

Luckie 30. Dez 2004 14:57

Re: Stretch bei Panel?
 
In dem du ein TImage auf das Panel packst.

Bist du sicher, dass du ein Handle brauchts und keinen Devicecontext? Für Zeichenoperationen wird meistens ein DC benötigt, selten ein Handle.

Helmi 30. Dez 2004 14:58

Re: Stretch bei Panel?
 
aber du musst doch herausfinden können, wie groß das Video ist.
Und dann setzt einfach das panel auf die Größe des Videos (vielleicht noch überall + 1 Pixel,dann schauts besser aus)

ReDoX 30. Dez 2004 15:00

Re: Stretch bei Panel?
 
Ich benutze die funktion

Delphi-Quellcode:
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;

function capCreateCaptureWindow(lpszWindowName: LPCSTR;
  dwStyle: DWORD;
  x, y,
  nWidth,
  nHeight: integer;
  hwndParent: HWND;
  nID: integer): HWND; stdcall;
  external 'AVICAP32.DLL' name 'capCreateCaptureWindowA';

procedure GetPic(Panel: TPanel);
begin
  Picture := capCreateCaptureWindow('Video',ws_child+ws_visible, 0,
  0, 640, 480, Panel.Handle, 1);
  SendMessage(Picture, WM_CAP_DRIVER_CONNECT, 0, 0);
  SendMessage(Picture, WM_CAP_SET_PREVIEWRATE, 30, 0);
  sendMessage(Picture, WM_CAP_SET_OVERLAY, 1, 0);
  SendMessage(Picture, wm_cap_set_preview, 1, 0);
end;
Und da muss ich

Picture := capCreateCaptureWindow('Video',ws_child+ws_visible , 0,
0, 640, 480, Panel.Handle, 1);

das handle angeben.
Mfg MrScholz

Edit: @ helmi Ich möchte ja das panel klein halten also nur 320x240 und da soll alles drauf zu sehen sein.

Helmi 30. Dez 2004 15:05

Re: Stretch bei Panel?
 
also irgendwie schaut mein Code sehr ähnlich deinem aus :-)

mit 640 (Width) und 480 (Height) weisst du ja die Größe deines Videos.

Jetzt kannst du ja einfach die Größe des Panels auf diese Werte setzen.

[edit] ich war zu langsam:

Wenn du das Video klein halten willst, dann schreib anstatt den 640 und 480
einfach 320 und 240.

Und das Panel auf auf diese Width- und Height-Werte!

Also so:
Code:
Picture := capCreateCaptureWindow('Video',ws_child+ws_visible, 0,
  0, 320, 240, Panel.Handle, 1);

Panel.Width := 320;
Panel.Height := 240;
Das 0, 0, 320, 240 ist X, Y, Width, Height
[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:12 Uhr.
Seite 1 von 2  1 2      

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