| 
				
					|  | Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
 |  
 
	
		| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |  
		| Autor | Nachricht |  
		| dotmarkus 
 
 
 Anmeldungsdatum: 04.08.2007
 Beiträge: 14
 
 
 | 
			
				|  Verfasst am: 04.08.2007, 12:43    Titel: einfach winapi frage |   |  
				| 
 |  
				| hallo bei folgendem von mir aus dem hello world programm gebasteltem programm:
 http://schrodt.dotmatrix.at/hae.bas
 
 wurmt mich folgendes problem:
 die sub rennt nebenher als thread.
 und zählt count im sekundentakt hoch
 nun müsste ja auch jede sekunde die while wend schleife:
 
 while ((GetMessage( @wMsg, NULL, 0, 0 ) <> FALSE) or ( countold <> count ) )
 
 TranslateMessage( @wMsg )
 DispatchMessage( @wMsg )
 countold = count
 
 wend
 
 anspringen , da countold nach jeder sekunde sich von count unterscheidet.
 tuts aber nicht! wenn man zb in die schleife hineinschreibt : print "test"
 dann wird das test erst dann geschrieben wenn man zb das fenster resized , was eine fenster message ist und daher in die erste bedingung der schleife passt.
 
 wenn als getmessage solange blockiert bis was brauchbares daherkommt ,(was ich vermute) wie kann ich dann von einer sub aus z.b. was in ein fenster hineinschreiben?
 ich hab schon versucht , das wmpaint in die sub zu kopieren und den windowhandler global deklariert.
 hat aber nicht funktioniert.
 kann man irgendwie von aussen aus die message ändern?
 oder wie mach ichdas alles?
 danke an alle und so.
 m.
 |  |  
		| Nach oben |  |  
		|  |  
		| ytwinky 
 
  
 Anmeldungsdatum: 28.05.2005
 Beiträge: 2624
 Wohnort: Machteburch
 
 | 
			
				|  Verfasst am: 04.08.2007, 12:46    Titel: |   |  
				| 
 |  
				| Hi dotmarkus, Wilkommen im Forum..
 Welche FreeBASIC-Version verwendest du?
 Welche Optionen hast du gesetzt?
 Gruß
 ytwinky
 _________________
 
 ..also ungefähr so, wie ich GOTO.. 	  | v1ctor hat Folgendes geschrieben: |  	  | Yeah, i like INPUT$(n) as much as PRINT USING.. | 
 |  |  
		| Nach oben |  |  
		|  |  
		| dotmarkus 
 
 
 Anmeldungsdatum: 04.08.2007
 Beiträge: 14
 
 
 | 
			
				|  Verfasst am: 04.08.2007, 12:49    Titel: die version hab ich mir gestern runtergeladen |   |  
				| 
 |  
				| und in den optionen hab ich nichts verändert |  |  
		| Nach oben |  |  
		|  |  
		| dotmarkus 
 
 
 Anmeldungsdatum: 04.08.2007
 Beiträge: 14
 
 
 | 
			
				|  Verfasst am: 04.08.2007, 12:53    Titel: |   |  
				| 
 |  
				| übrigens : hallo auch. |  |  
		| Nach oben |  |  
		|  |  
		| csde_rats 
 
  
 Anmeldungsdatum: 07.01.2007
 Beiträge: 2292
 Wohnort: Zwischen Sessel und Tastatur
 
 | 
			
				|  Verfasst am: 04.08.2007, 12:55    Titel: |   |  
				| 
 |  
				| Hm. Wenn die MessageSchleife nur einmal die Sekunde durchlaufen wird, ist nur 1x die Sekunde das Fenster "empfangsbereit"... die restliche Zeit wäre es "eingefroren"
 
 Wenn du nur 1xdie Sekunde was machen willst, musst du die entsprechenden HWND's shared deklarieren, dann kannst du in einem eigenem thread unabhängig von der Message rummmalen.
 _________________
 If hilfreicher_Beitrag then klick(location.here)
 
   Klick
 |  |  
		| Nach oben |  |  
		|  |  
		| dotmarkus 
 
 
 Anmeldungsdatum: 04.08.2007
 Beiträge: 14
 
 
 | 
			
				|  Verfasst am: 04.08.2007, 13:00    Titel: |   |  
				| 
 |  
				| tatsächlich ist die "einmalprosekunde" schleife in einem thread , dh unabhängig von der msg schleife. 
 die msg schleife wurde nur von mir so modifiziert , dass sie auch schaut ob sich count verändert hat.
 |  |  
		| Nach oben |  |  
		|  |  
		| csde_rats 
 
  
 Anmeldungsdatum: 07.01.2007
 Beiträge: 2292
 Wohnort: Zwischen Sessel und Tastatur
 
 |  |  
		| Nach oben |  |  
		|  |  
		| Sebastian Administrator
 
  
 Anmeldungsdatum: 10.09.2004
 Beiträge: 5969
 Wohnort: Deutschland
 
 | 
			
				|  Verfasst am: 04.08.2007, 13:02    Titel: |   |  
				| 
 |  
				| Hallo, 
 bitte stell sicher, dass du mindestens FB 0.17 verwendest. Wenn du deine Version von freebasic.de hast, kannst du davon ausgehen, dass sie nicht auf dem neusten Stand ist. Bitte beschaff dir in dem Fall gemäß dieser Anleitung die aktuellste Softwareversion. Du kannst deine installierte FB-Version herausfinden, indem du in der Kommandozeile (cmd.exe) Folgendes eingibst:
 
  	  | Code: |  	  | C:\<PfadZurFBInstallation>\FBC -version | 
 
 Viele Grüße!
 Sebastian
 _________________
 
   Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
 |  |  
		| Nach oben |  |  
		|  |  
		| dotmarkus 
 
 
 Anmeldungsdatum: 04.08.2007
 Beiträge: 14
 
 
 | 
			
				|  Verfasst am: 04.08.2007, 13:14    Titel: |   |  
				| 
 |  
				| hallo ich hab nun compiler 0.17b und in folgendem geändertem code ist im loop thread auch noch wmpaint drin
 hWnd ist global.
 
 geht aber immer noch nicht
 
 
 ''
 ''
 ''
 ''
 
  	  | Code: |  	  | 
 dim shared count as integer
 dim shared countold as integer
 dim shared  hWnd as integer
 
 #include once "windows.bi"
 
 declare function        WinMain     ( byval hInstance as HINSTANCE, _
 byval hPrevInstance as HINSTANCE, _
 szCmdLine as string, _
 byval iCmdShow as integer ) as integer
 
 
 ''
 '' Entry point
 ''
 end WinMain( GetModuleHandle( null ), null, Command$, SW_NORMAL )
 
 '' ::::::::
 '' name: WndProc
 '' desc: Processes windows messages
 ''
 '' ::::::::
 function WndProc ( byval hWnd as HWND, _
 byval message as UINT, _
 byval wParam as WPARAM, _
 byval lParam as LPARAM ) as LRESULT
 
 
 function = 0
 
 ''
 '' Process messages
 ''
 select case( message )
 ''
 '' Window was created
 ''
 case WM_CREATE
 exit function
 
 ''
 '' Windows is being repainted
 ''
 case WM_PAINT
 dim rct as RECT
 dim pnt as PAINTSTRUCT
 dim hDC as HDC
 
 hDC = BeginPaint( hWnd, @pnt )
 GetClientRect( hWnd, @rct )
 
 DrawText( hDC, _
 str$(count), _
 -1, _
 @rct, _
 DT_SINGLELINE or DT_CENTER or DT_VCENTER )
 
 EndPaint( hWnd, @pnt )
 
 exit function
 
 ''
 '' Key pressed
 ''
 case WM_KEYDOWN
 if( lobyte( wParam ) = 27 ) then
 PostMessage( hWnd, WM_CLOSE, 0, 0 )
 end if
 
 ''
 '' Window was closed
 ''
 case WM_DESTROY
 PostQuitMessage( 0 )
 exit function
 end select
 
 ''
 '' Message doesn't concern us, send it to the default handler
 '' and get result
 ''
 function = DefWindowProc( hWnd, message, wParam, lParam )
 
 end function
 
 
 SUB mythread
 
 do
 
 count = count +1
 sleep 1000
 print count
 dim rct as RECT
 dim pnt as PAINTSTRUCT
 dim hDC as HDC
 
 hDC = BeginPaint( hWnd, @pnt )
 GetClientRect( hWnd, @rct )
 
 DrawText( hDC, _
 str$(count), _
 -1, _
 @rct, _
 DT_SINGLELINE or DT_CENTER or DT_VCENTER )
 
 EndPaint( hWnd, @pnt )
 loop
 
 END SUB
 
 '' ::::::::
 '' name: WinMain
 '' desc: A win2 gui program entry point
 ''
 '' ::::::::
 function WinMain ( byval hInstance as HINSTANCE, _
 byval hPrevInstance as HINSTANCE, _
 szCmdLine as string, _
 byval iCmdShow as integer ) as integer
 
 dim wMsg as MSG
 dim wcls as WNDCLASS
 dim szAppName as string
 
 
 function = 0
 
 ''
 '' Setup window class
 ''
 szAppName = "HelloWin"
 
 with wcls
 .style         = CS_HREDRAW or CS_VREDRAW
 .lpfnWndProc   = @WndProc
 .cbClsExtra    = 0
 .cbWndExtra    = 0
 .hInstance     = hInstance
 .hIcon         = LoadIcon( NULL, IDI_APPLICATION )
 .hCursor       = LoadCursor( NULL, IDC_ARROW )
 .hbrBackground = GetStockObject( WHITE_BRUSH )
 .lpszMenuName  = NULL
 .lpszClassName = strptr( szAppName )
 end with
 
 ''
 '' Register the window class
 ''
 if( RegisterClass( @wcls ) = FALSE ) then
 MessageBox( null, "Failed to register wcls!", szAppName, MB_ICONERROR )
 exit function
 end if
 
 ''
 '' Create the window and show it
 ''
 hWnd = CreateWindowEx( 0, _
 szAppName, _
 "The Hello Program", _
 WS_OVERLAPPEDWINDOW, _
 CW_USEDEFAULT, _
 CW_USEDEFAULT, _
 CW_USEDEFAULT, _
 CW_USEDEFAULT, _
 NULL, _
 NULL, _
 hInstance, _
 NULL )
 
 
 ShowWindow( hWnd, iCmdShow )
 UpdateWindow( hWnd )
 
 
 
 
 ''
 '' Process windows messages
 
 threadcreate(@mythread,0)
 
 
 
 
 
 while ((GetMessage( @wMsg, NULL, 0, 0 ) <> FALSE)  )
 
 TranslateMessage( @wMsg )
 DispatchMessage( @wMsg )
 
 wend
 
 
 ''
 '' Program has ended
 ''
 function = wMsg.wParam
 
 end function
 
 
 | 
 |  |  
		| Nach oben |  |  
		|  |  
		| Sebastian Administrator
 
  
 Anmeldungsdatum: 10.09.2004
 Beiträge: 5969
 Wohnort: Deutschland
 
 |  |  
		| Nach oben |  |  
		|  |  
		| ytwinky 
 
  
 Anmeldungsdatum: 28.05.2005
 Beiträge: 2624
 Wohnort: Machteburch
 
 | 
			
				|  Verfasst am: 04.08.2007, 13:26    Titel: |   |  
				| 
 |  
				| ..das ist ja mal eine erschöpfende Auskunft.. 	  | dotmarkus hat Folgendes geschrieben: |  	  | geht aber immer noch nicht | 
 der zählt doch wunderbar
 ..
 59
 60
 61
 ..
 Was mich wundert ist, daß du als FB-Neuling gar keine Fragen zu den Fehlermeldungen des Kompilers hast..
 ..oder wird dein SourceCode ohne Fehler und Warnungen kompiliert?
 Gruß
 ytwinky
 _________________
 
 ..also ungefähr so, wie ich GOTO.. 	  | v1ctor hat Folgendes geschrieben: |  	  | Yeah, i like INPUT$(n) as much as PRINT USING.. | 
 |  |  
		| Nach oben |  |  
		|  |  
		| dotmarkus 
 
 
 Anmeldungsdatum: 04.08.2007
 Beiträge: 14
 
 
 | 
			
				|  Verfasst am: 04.08.2007, 13:29    Titel: |   |  
				| 
 |  
				| der loop schreibt bei dir die zahl ins fenster? 
 bei mir steht im window immer nur 0
 
 bzg fehlermeldungen:
 ja die machen mich fertig
  |  |  
		| Nach oben |  |  
		|  |  
		| csde_rats 
 
  
 Anmeldungsdatum: 07.01.2007
 Beiträge: 2292
 Wohnort: Zwischen Sessel und Tastatur
 
 |  |  
		| Nach oben |  |  
		|  |  
		| ytwinky 
 
  
 Anmeldungsdatum: 28.05.2005
 Beiträge: 2624
 Wohnort: Machteburch
 
 | 
			
				|  Verfasst am: 04.08.2007, 13:38    Titel: |   |  
				| 
 |  
				| Moooment.. Print schreibt auf die Konsole! Das hast du so programmiert und ich habe nur gesagt, daß es dort auch angezeigt wird..
 ..im Window, wo du das ausgeben möchtest(vermute ich mal) passiert das natürlich nicht, da du das ja auch nicht so programmiert hast..
 btw:
 Wie du siehst, sind deine Fragen hier einfacher zu beantworten, als im Chat..
 Gruß
 ytwinky
 _________________
 
 ..also ungefähr so, wie ich GOTO.. 	  | v1ctor hat Folgendes geschrieben: |  	  | Yeah, i like INPUT$(n) as much as PRINT USING.. | 
 
 Zuletzt bearbeitet von ytwinky am 04.08.2007, 13:40, insgesamt einmal bearbeitet
 |  |  
		| Nach oben |  |  
		|  |  
		| dotmarkus 
 
 
 Anmeldungsdatum: 04.08.2007
 Beiträge: 14
 
 
 | 
			
				|  Verfasst am: 04.08.2007, 13:40    Titel: |   |  
				| 
 |  
				| das print hab ich nur eingefügt im in der console zu sehen ob die sub läuft |  |  
		| Nach oben |  |  
		|  |  
		| dotmarkus 
 
 
 Anmeldungsdatum: 04.08.2007
 Beiträge: 14
 
 
 | 
			
				|  Verfasst am: 04.08.2007, 13:44    Titel: |   |  
				| 
 |  
				| csde rats und sebastian hier hab ich das hello world example aus den 0.17b exampes verwendet
 hwnd ist als HWND deklariert (global)
 und in der console sieht man auch den sub laufen
 1
 2
 3
 etc...
 aber das fenster zeigt nachwievor nur hello world an.
 wie schreib ich nun von einer sub ins window ? das was ich da reingepastet habe scheint nicht zu funktionieren
 
 http://schrodt.dotmatrix.at/hae3.bas
 |  |  
		| Nach oben |  |  
		|  |  
		| csde_rats 
 
  
 Anmeldungsdatum: 07.01.2007
 Beiträge: 2292
 Wohnort: Zwischen Sessel und Tastatur
 
 | 
			
				|  Verfasst am: 04.08.2007, 13:48    Titel: |   |  
				| 
 |  
				|  	  | Code: |  	  | #define WIN_INCLUDEALL 1 #include once "windows.bi"
 
 dim shared count as integer
 dim shared countold as integer
 dim shared  hWnd as HWND
 
 
 
 declare function        WinMain     ( byval hInstance as HINSTANCE, _
 byval hPrevInstance as HINSTANCE, _
 szCmdLine as string, _
 byval iCmdShow as integer ) as integer
 
 
 ''
 '' Entry point
 ''
 end WinMain( GetModuleHandle( null ), null, Command, SW_NORMAL )
 
 '' ::::::::
 '' name: WndProc
 '' desc: Processes windows messages
 ''
 '' ::::::::
 function WndProc ( byval hWnd as HWND, _
 byval message as UINT, _
 byval wParam as WPARAM, _
 byval lParam as LPARAM ) as LRESULT
 
 
 function = 0
 
 ''
 '' Process messages
 ''
 select case( message )
 ''
 '' Window was created
 ''
 case WM_CREATE
 exit function
 
 ''
 '' Windows is being repainted
 ''
 case WM_PAINT
 dim rct as RECT
 dim pnt as PAINTSTRUCT
 dim hDC as HDC
 
 hDC = BeginPaint( hWnd, @pnt )
 GetClientRect( hWnd, @rct )
 
 DrawText( hDC, _
 str$(count), _
 -1, _
 @rct, _
 DT_SINGLELINE or DT_CENTER or DT_VCENTER )
 EndPaint( hWnd, @pnt )
 
 exit function
 
 ''
 '' Key pressed
 ''
 case WM_KEYDOWN
 if( lobyte( wParam ) = 27 ) then
 PostMessage( hWnd, WM_CLOSE, 0, 0 )
 end if
 
 ''
 '' Window was closed
 ''
 case WM_DESTROY
 PostQuitMessage( 0 )
 exit function
 end select
 
 ''
 '' Message doesn't concern us, send it to the default handler
 '' and get result
 ''
 function = DefWindowProc( hWnd, message, wParam, lParam )
 
 end function
 
 
 SUB mythread
 
 do
 
 count = count +1
 sleep 1000
 print Str(count) + "(" + Str(hWnd) + ")"
 dim rct as RECT
 dim pnt as PAINTSTRUCT
 dim hDC as HDC
 
 hDC = BeginPaint( hWnd, @pnt )
 GetClientRect( hWnd, @rct )
 
 DrawText( hDC, _
 str(count), _
 -1, _
 @rct, _
 DT_SINGLELINE or DT_CENTER or DT_VCENTER )
 
 SendMessage(hWnd,WM_PAINT, NULL, NULL)
 
 EndPaint( hWnd, @pnt )
 loop
 
 END SUB
 
 '' ::::::::
 '' name: WinMain
 '' desc: A win2 gui program entry point
 ''
 '' ::::::::
 function WinMain ( byval hInstance as HINSTANCE, _
 byval hPrevInstance as HINSTANCE, _
 szCmdLine as string, _
 byval iCmdShow as integer ) as integer
 
 dim wMsg as MSG
 dim wcls as WNDCLASS
 dim szAppName as string
 
 
 function = 0
 
 ''
 '' Setup window class
 ''
 szAppName = "HelloWin"
 
 with wcls
 .style         = CS_HREDRAW or CS_VREDRAW
 .lpfnWndProc   = @WndProc
 .cbClsExtra    = 0
 .cbWndExtra    = 0
 .hInstance     = hInstance
 .hIcon         = LoadIcon( NULL, IDI_APPLICATION )
 .hCursor       = LoadCursor( NULL, IDC_ARROW )
 .hbrBackground = GetStockObject( WHITE_BRUSH )
 .lpszMenuName  = NULL
 .lpszClassName = strptr( szAppName )
 end with
 
 ''
 '' Register the window class
 ''
 if( RegisterClass( @wcls ) = FALSE ) then
 MessageBox( null, "Failed to register wcls!", szAppName, MB_ICONERROR )
 exit function
 end if
 
 ''
 '' Create the window and show it
 ''
 hWnd = CreateWindowEx( 0, _
 szAppName, _
 "The Hello Program", _
 WS_OVERLAPPEDWINDOW, _
 CW_USEDEFAULT, _
 CW_USEDEFAULT, _
 CW_USEDEFAULT, _
 CW_USEDEFAULT, _
 NULL, _
 NULL, _
 hInstance, _
 NULL )
 
 
 ShowWindow( hWnd, iCmdShow )
 UpdateWindow( hWnd )
 
 
 
 
 ''
 '' Process windows messages
 
 threadcreate(@mythread,0)
 
 
 
 
 
 while ((GetMessage( @wMsg, NULL, 0, 0 ) <> FALSE)  )
 
 TranslateMessage( @wMsg )
 DispatchMessage( @wMsg )
 
 wend
 
 
 ''
 '' Program has ended
 ''
 function = wMsg.wParam
 
 end function
 | 
 probiers mal aus....
 _________________
 If hilfreicher_Beitrag then klick(location.here)
 
   Klick
 |  |  
		| Nach oben |  |  
		|  |  
		| dotmarkus 
 
 
 Anmeldungsdatum: 04.08.2007
 Beiträge: 14
 
 
 | 
			
				|  Verfasst am: 04.08.2007, 13:50    Titel: |   |  
				| 
 |  
				| im window steht nun nachwievor 0 dafür steht der windowhandler nach der zahl in klammer (bei der ausgabe in der console)
 |  |  
		| Nach oben |  |  
		|  |  
		| csde_rats 
 
  
 Anmeldungsdatum: 07.01.2007
 Beiträge: 2292
 Wohnort: Zwischen Sessel und Tastatur
 
 |  |  
		| Nach oben |  |  
		|  |  
		| dotmarkus 
 
 
 Anmeldungsdatum: 04.08.2007
 Beiträge: 14
 
 
 | 
			
				|  Verfasst am: 04.08.2007, 13:57    Titel: |   |  
				| 
 |  
				| hab ich gemacht . das ergebnis schaut bei mir nachwievor so aus: 
 
   
 Editiert durch Moderator: Riesiges Bild zwecks Thumbnailerstellung bei Imageshack hochgeladen. (Sebastian)
 
 danke (dotmarkus)
 |  |  
		| Nach oben |  |  
		|  |  
		|  |  
  
	| 
 
 | 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.
 
 |  |