![]() |
Probleme mit Panel
Hallo zusammen!
Ich habe eine Frage zum Thema Panel. Ich stelle das Livebild einer Kamera auf einem Panel dar. Nun wollte ich die Mausposition auf dem Panel, also die zugehörigen Koordinaten des Mauspfeils anzeigen lassen und anschließend speichern, bis mir ein Problem auffiel. Ich kann kein Ereignis mehr im Panel anwenden, weder ein OnCLick, MouseMove usw. bzw. anwenden schon, nur dabei passiert nichts. Da ich aber wie oben angedeutet die Position speichern will, wenn der Benutzer auf das Livebild klickt, wäre ich euch dankbar wenn ihr mir einen Tipp geben könntet. Vielen Dank schon mal... |
AW: Probleme mit Panel
Wie stellst du das Bild dar?
Vermutung: Es wird ein weiteres Anzeigecontrol in das Panel eingeblendet, welches die Mausereignisse empfängt. |
AW: Probleme mit Panel
Code:
Auf diese Weise wird das Bild/Handle in einem Panel dargestellt.
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; implementation function capCreateCaptureWindow(lpszWindowName: LPCSTR; dwStyle: DWORD; x, y, nWidth, nHeight: integer; hwndParent: HWND; nID: integer): HWND; stdcall; external 'AVICAP32.DLL' name 'capCreateCaptureWindowA'; {------------------------------------------------------------------------------} {$R *.DFM} procedure TForm1.Bildzeigen; begin connect := capCreateCaptureWindow('Kamera',ws_child+ws_visible, 0, 0, 600, 450, Panel1.Handle, 1); SendMessage(connect, WM_CAP_DRIVER_CONNECT, 0, 0); SendMessage(connect, WM_CAP_SET_PREVIEWRATE, 30, 0); sendMessage(connect, WM_CAP_SET_OVERLAY, 1, 0); SendMessage(connect, WM_CAP_SET_PREVIEW, 1, 0); end; Habe noch zusätzliche Funktionen, wie Abspeichern der Bilder usw. aber daran sollte es nicht liegen. Du meinst ein zusätzlich Anzeigecontrol könnte helfen? Aber mich würde es trotzdem interessieren, warum das Panel in diesem Fall Probleme macht. |
AW: Probleme mit Panel
Zitat:
Es WIRD durch die DLL-Funktion eine zusätzliche Anzeigekomponente auf dem Panel erzeugt. Wenn die Anzeigekomponente ein Haus wäre, gibst du die Hausnummer (Panel.Handle) und die Ausmaße des Grundstücks an (x, y, nWidth, nHeight) an, auf dem gebaut werden soll. Wenn du auf einen Panel einen Button legst und auf den Button, anstatt auf dem Panel drückst, wird ja auch das OnClick-Event des Buttons und nicht des Panels ausgelöst. |
AW: Probleme mit Panel
Weil dein Panel mit dem Aufruf CreateCaptureWindow zum Parent wird.
Delphi-Quellcode:
Das übergibst du ja auch in dieser zeile.
hwndParent: HWND;
Es liegt also hinter dem CaptureWindow .. PS: Das kannst du nur ändern wenn du anstelle von CreateCaptureWindow eine möglichkeit hast auf ein DC zu zeichnen.. gruss |
AW: Probleme mit Panel
Nicht schön, aber auf die Art könntest Du Dir was basteln .....
Delphi-Quellcode:
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean); begin if (msg.hwnd=connect) and (msg.message = WM_MouseMove) then DeinCode end; |
AW: Probleme mit Panel
Danke für die Antworten, werde das Einbinden der Cam evtl. anders lösen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz