Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

warum kommt nach einem tastendruck kein neues bild?

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
pebisoft
gesperrt


Anmeldungsdatum: 28.11.2004
Beiträge: 131

BeitragVerfasst am: 04.10.2006, 23:11    Titel: warum kommt nach einem tastendruck kein neues bild? Antworten mit Zitat

das bild "test.bmp" wird jede sekunde von einem anderen programm geändert abgespeichert.
dieses bild lese ich nach tastendruck jedesmal neu ein mit unterem programm.
ich versuche es jedenfalls. erst wenn ich das screenfenster ein bisschen mit der maus bewege, geht es mit einem tastendruck und es erscheint das bild im fenster. wenn ich das screenfenster nicht bewege, und ich drücke eine taste, tut sich nichts.

#include "windows.bi"
#Include "fbgfx.bi"

Option Explicit
Dim img As Integer Ptr
Dim As Integer breit, hoch
Dim As Uinteger Post_Quit = FALSE

Screen 18,32 'Bit per Pixel = 32
breit = 400 'Bildbreite und
hoch = 400 'Bildhöhe sind bekannt
img = ImageCreate (breit, hoch)

Do

BLoad "test.bmp",img
Put (20,20), img, PSet

If ( Multikey( SC_ESCAPE ) ) Then Post_Quit = TRUE
sleep

Loop Until Post_Quit

ImageDestroy img

End


Zuletzt bearbeitet von pebisoft am 06.10.2006, 09:57, insgesamt 2-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 05.10.2006, 09:33    Titel: Antworten mit Zitat

Es ist möglich, dass der Focus nicht auf deinem Fenster liegt und das Programm damit deinen Tastendruck nicht mitbekommt.
Versuch mal eine Bilderneuerung ohne Tastendruck indem du
Code:
...
Sleep 500
...

schreibst. D.h. alle 0,5sek wird das Bild automatisch erneuert.

Gruß Volta
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
pebisoft
gesperrt


Anmeldungsdatum: 28.11.2004
Beiträge: 131

BeitragVerfasst am: 05.10.2006, 20:23    Titel: Antworten mit Zitat

ich habe jetzt herausgefunden, das es dieses captureprogramm ist.
erst wenn ich das screen-programm mit der maus bewege, schreibt dieses programm eine neue test1.bmp in das verzeichnis.
was muss hier geändert werden?
in der Case WM_PAINT habe ich auch mal eine pause reingeschrieben,
geht aber immer noch nicht.

Code:

#include once "win\vfw.bi" 'Die vfw.bi includet schon die windows.bi

Option Explicit

Function WindowProc (Byval hWnd As HWND,_
                     Byval uMsg As uint,_
                     Byval wParam As WPARAM,_
                     Byval lParam As LPARAM) As LRESULT

  Dim hDC As HDC
  Dim ps As PAINTSTRUCT
  Static hWndCam As HWND

  Select Case uMsg

  Case WM_CREATE
    hWndCam = capCreateCaptureWindow ("CapCam", WS_CHILD Or WS_VISIBLE, _
                                      15, 40, 320, 240, hWnd, 500)

    If hWndCam = 0 Then
      MessageBox (hWnd, "keine Webcam gefunden ..", "Fehler", MB_ICONERROR)
      DestroyWindow (hWnd)
      Return 0
    End If
   
    capDriverConnect (hWndCam, 0) 'nur für eine WebCam sonst, iIndex=1,2,3 ...
    capPreviewRate (hWndCam, 30)
    capPreview (hWndCam, 1)                  'Vorschau (de)aktivieren
    'capGrabFrameNoStop (hWndCam)             'Videostream zeigen
    capFileSaveDIB(hWndCam, @"test1.bmp") 'Schnappschuss als CapCam1.bmp
    'capEditCopy(hWndCam)
    Return 0

  Case WM_COMMAND
    Return 0

  Case WM_PAINT
      hDC = BeginPaint (hWnd, @ps)
      capFileSaveDIB(hWndCam, @"test1.bmp")
      sleep 500
      EndPaint (hWnd, @ps)
    Return 0

  Case WM_CLOSE
    'Beim Beenden muss die WebCam wieder freigegeben werden!
    capDriverDisconnect (hWndCam)
    DestroyWindow (hWnd)

  Case WM_DESTROY
    PostQuitMessage (NULL)
    Return 0

  Case Else
    Return DefWindowProc (hWnd, uMsg, wParam, lParam)

  End Select
End Function

Function WinMain  (Byval hInstance As HINSTANCE,_
                   Byval hPrevInstance As HINSTANCE,_
                   Byval lpCmdLine As LPSTR,_
                   Byval nCmdShow As Integer) As Integer

  Dim hWnd As HWND
  Dim wMsg As MSG
  Dim wcx As WNDCLASSEX
  Dim className As String = "webcam_class"

  'WNDCLASSEX structure
  With wcx
    .cbSize = Sizeof (WNDCLASSEX)
    .style = CS_HREDRAW Or CS_VREDRAW Or CS_BYTEALIGNWINDOW
    .lpfnWndProc = cast (WNDPROC, @WindowProc)
    .cbClsExtra = NULL
    .cbWndExtra = NULL
    .hInstance = hInstance
    .hbrBackground = CPtr( HGDIOBJ, COLOR_BACKGROUND )
    .lpszMenuName = NULL
    .lpszClassName = Strptr (className)
    .hIcon = LoadIcon (NULL, IDI_APPLICATION)
    .hCursor = LoadCursor  (NULL, IDC_ARROW)
    .hIconSm = 0
  End With

  RegisterClassEx (@wcx)
  hWnd = CreateWindowEx (WS_EX_OVERLAPPEDWINDOW,_
                         Strptr (className), "Webcam Beispiel",_
                         WS_OVERLAPPEDWINDOW,_
                         CW_USEDEFAULT, CW_USEDEFAULT, 360, 320,_
                         NULL, NULL,_
                         hInstance, NULL)

  ShowWindow (hWnd, SW_SHOWNORMAL)
  UpdateWindow (hWnd)

  Do Until (GetMessage (@wMsg, NULL, 0, 0) = 0)
    TranslateMessage (@wMsg)
    DispatchMessage (@wMsg)
  Loop

  Return wMsg.wParam

End Function
'Entry point
End WinMain (GetModuleHandle (NULL), NULL, Command$, SW_NORMAL)

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 05.10.2006, 22:54    Titel: Antworten mit Zitat

is klar, da WM_PAINT nur dann ausgeführt wird wenn das Fenster verändert wird.
Ein fortlaufendes kopieren des Bildes bekommst du nur durch eine TIMER - Steuerung.
Und da wir ja jetzt auch ein DIB aus dem Clipboard laden können zwinkern
hab ich das gleich mal eingebaut. happy
Code:
'Beispiel: Webcam Sekundenbilder in das Clipboard
'05.10.2006 by Volta
#include once "win\vfw.bi" 'Die vfw.bi includet schon die windows.bi
'libavicap32.dll.a nach FBverzeichnis/lib/win32 schieben.
Option Explicit

#define ID_TIMER    1

Function WindowProc (Byval hWnd As HWND,_
                     Byval uMsg As uint,_
                     Byval wParam As WPARAM,_
                     Byval lParam As LPARAM) As LRESULT

  Dim hDC As HDC
  Dim ps As PAINTSTRUCT
  Static hWndCam As HWND

  Select Case uMsg

  Case WM_CREATE
    hWndCam = capCreateCaptureWindow ("CapCam", WS_CHILD Or WS_VISIBLE, _
                                      15, 40, 320, 240, hWnd, 500)

    If hWndCam = 0 Then
      MessageBox (hWnd, "keine Webcam gefunden ..", "Fehler", MB_ICONERROR)
      DestroyWindow (hWnd)
      Return 0
    End If
    capDriverConnect (hWndCam, 0)
    capPreview (hWndCam, 0)                  'Vorschau deaktivieren
    SetTimer (hWnd, ID_TIMER, 1000, NULL)
    Return 0

  Case WM_COMMAND
    Return 0

  Case WM_PAINT
      hDC = BeginPaint (hWnd, @ps)
      EndPaint (hWnd, @ps)
    Return 0

  Case WM_TIMER
     capGrabFrame (hWndCam)    'Einzelbild anzeigen
     capEditCopy(hWndCam)......'ins Clipboard
    Return 0

  Case WM_CLOSE
    'Beim Beenden muss die WebCam wieder freigegeben werden!
    capDriverDisconnect (hWndCam)
    KillTimer( hWnd, ID_TIMER )
    DestroyWindow (hWnd)

  Case WM_DESTROY
    PostQuitMessage (NULL)
    Return 0

  Case Else
    Return DefWindowProc (hWnd, uMsg, wParam, lParam)

  End Select
End Function

Function WinMain  (Byval hInstance As HINSTANCE,_
                   Byval hPrevInstance As HINSTANCE,_
                   Byval lpCmdLine As LPSTR,_
                   Byval nCmdShow As Integer) As Integer

  Dim hWnd As HWND
  Dim wMsg As MSG
  Dim wcx As WNDCLASSEX
  Dim className As String = "webcam_class"

  'WNDCLASSEX structure
  With wcx
    .cbSize = Sizeof (WNDCLASSEX)
    .style = CS_HREDRAW Or CS_VREDRAW Or CS_BYTEALIGNWINDOW
    .lpfnWndProc = cast (WNDPROC, @WindowProc)
    .cbClsExtra = NULL
    .cbWndExtra = NULL
    .hInstance = hInstance
    .hbrBackground = CPtr( HGDIOBJ, COLOR_BACKGROUND )
    .lpszMenuName = NULL
    .lpszClassName = Strptr (className)
    .hIcon = LoadIcon (NULL, IDI_APPLICATION)
    .hCursor = LoadCursor  (NULL, IDC_ARROW)
    .hIconSm = 0
  End With

  RegisterClassEx (@wcx)
  hWnd = CreateWindowEx (WS_EX_OVERLAPPEDWINDOW,_
                         Strptr (className), "Webcam Beispiel",_
                         WS_OVERLAPPEDWINDOW,_
                         CW_USEDEFAULT, CW_USEDEFAULT, 360, 320,_
                         NULL, NULL,_
                         hInstance, NULL)

  ShowWindow (hWnd, SW_SHOWNORMAL)
  UpdateWindow (hWnd)

  Do Until (GetMessage (@wMsg, NULL, 0, 0) = 0)
    TranslateMessage (@wMsg)
    DispatchMessage (@wMsg)
  Loop

  Return wMsg.wParam

End Function
'Entry point
End WinMain (GetModuleHandle (NULL), NULL, Command$, SW_NORMAL)
Wenn das Prog läuft, starte die Example.exe (in der neuen zip -> Zeig_Clipboard.exe), da siehst du dann die Bilder aus dem Clipboard.
Wie die TIMER-Geschichte hier läuft siehst du aus dem Listing.

Gruß Volta
EDIT/ hier als zip (65KB)
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
pebisoft
gesperrt


Anmeldungsdatum: 28.11.2004
Beiträge: 131

BeitragVerfasst am: 06.10.2006, 09:29    Titel: Antworten mit Zitat

hallo volta, das war es, der "timer", vielen dank!
jetzt kann ich die funkbilder von meinem roboter sehen und mit dem screenprogram ein bild auswerten mit pixelauswertung nach evtl. hindernissen.

wo kann man eigentlich diese "Case WM_TIMER" ..."Case..." usw nachlesen.
wieviel "Case" gibt es, welches brauche ich für welchen zweck.

gibt es für diese spezis ein tut.

wäre ein weiterer schritt für das freebasic....es wird immer interessanter.


ich hatte im anderen thread mal gefragt, ob eigentlich die beiden fenster miteinander kommunizieren können, so ungefähr : windowfenster , schick mir jetzt ein bild in die ablage, damit ich(screenprogramm )das jetzt lesen kann und andersherum auch das kommunizieren.


wo gibt es eigentlich die "'$Include once: "kernel32.bi"?

mfg
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 06.10.2006, 12:17    Titel: Antworten mit Zitat

Zitat:
wo kann man eigentlich diese "Case WM_TIMER" ..."Case..." usw nachlesen.
wieviel "Case" gibt es, welches brauche ich für welchen zweck.
gibt es für diese spezis ein tut. :
Was es mit dem Messages aufsich hat :
http://www.deinmeister.de/w32asm2.htm#messages
siehe in der FBVerzeichnis/inc/win/winuser.bi jede Menge WM_...
Zitat:
ich hatte im anderen thread mal gefragt, ob eigentlich die beiden fenster miteinander kommunizieren können, so ungefähr : windowfenster , schick mir jetzt ein bild in die ablage, damit ich(screenprogramm )das jetzt lesen kann und andersherum auch das kommunizieren.
siehe oben, zB. über eine Message, es gibt aber (wie immer in WinAPI) noch andere Möglichkeiten...
Zitat:
wo gibt es eigentlich die "'$Include once: "kernel32.bi"?
gibt es nicht (nicht mehr), mit #Include once: "windows.bi" werden alle Functions der kernel32.dll eingebunden.
('$Include once: <- veraltet nicht mehr verwenden, nur noch -> #Include once:)

Internet Suchdienst VOLTA'X GmbH & Co KG
Aufträge von Privatpatienten werden nach HOAI abgerechnet,
Kassenpatienten googlen selber.

_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 06.10.2006, 14:11    Titel: Antworten mit Zitat

volta hat Folgendes geschrieben:
Internet Suchdienst VOLTA'X GmbH & Co KG
Aufträge von Privatpatienten werden nach HOAI abgerechnet,
Kassenpatienten googlen selber.
lachen
vor lachen auf dem Boden rollen
Ilmt happy
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz