Perfekt... Danke Andy..
Ja Hausaufgaben auf jeden fall ... vor allem das ordentlich in die UDF einzubauen..
Vielen Dank ihr beiden...
MFG Chris
Perfekt... Danke Andy..
Ja Hausaufgaben auf jeden fall ... vor allem das ordentlich in die UDF einzubauen..
Vielen Dank ihr beiden...
MFG Chris
Hey Andy
Keinesfalls darfst du Events blocken!
Noch eine Frage.
Warum ist das mit dem Blocken so?
Es klappt eigentlich alles in den Events bis auf _ArrayDisplay() warum?
Das hier bleibt hängen...
#include <array.au3>
Global Const $FD_READ = 1
Global Const $FD_WRITE = 2
Global Const $FD_OOB = 4
Global Const $FD_ACCEPT = 8
Global Const $FD_CONNECT = 16
Global Const $FD_CLOSE = 32
Global $hWs2_32 = -1
TCPStartup()
$iListenSocket = TCPListen ( '127.0.0.1', 4222 )
Do
$iSocket = TCPAccept($iListenSocket)
Until $iSocket <> -1
TCPCloseSocket($iListenSocket)
$__TCP_WINDOW = GUICreate("GUIRegisterMsg")
$hWs2_32 = DllOpen( "Ws2_32.dll" )
DllCall( $hWs2_32,"int", "WSAAsyncSelect", "uint", $iSocket, "hwnd", $__TCP_WINDOW, "uint", 0x0400, "int", $FD_READ )
GUIRegisterMsg( 0x0400, "Event" )
While 1
Sleep(5)
WEnd
Func Event($hWnd, $iMsgID, $WParam, $LParam)
$sDataBuff = TCPRecv($iSocket, 1024)
Local $aArray_Base[2] = ["Org Item 0", "Org item 1"]
_ArrayDisplay($aArray_Base, "1D - Base array")
DllCall( $hWs2_32,"int", "WSAAsyncSelect", "uint", $iSocket, "hwnd", $__TCP_WINDOW, "uint", 0x0400, "int", $FD_READ )
EndFunc
Mache ich das hier bei Opt("GUIOnEventMode",1 ) klappt es ja auch...in etwa so....
#include <GUIConstantsEx.au3>
#include <array.au3>
Opt("GUIOnEventMode", 1) ; Change to OnEvent mode
[/autoit] [autoit][/autoit] [autoit]Local $hMainGUI = GUICreate("Hello World", 200, 100)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEButton")
GUICtrlCreateLabel("Hello world! How are you?", 30, 10)
Local $iOKButton = GUICtrlCreateButton("OK", 70, 50, 60)
GUICtrlSetOnEvent($iOKButton, "OKButton")
GUISetState(@SW_SHOW, $hMainGUI)
While 1
Sleep(100) ; Sleep to reduce CPU usage
WEnd
Func OKButton()
; Note: At this point @GUI_CtrlId would equal $iOKButton,
; and @GUI_WinHandle would equal $hMainGUI
Local $aArray_Base[2] = ["Org Item 0", "Org item 1"]
_ArrayDisplay($aArray_Base, "1D - Base array")
EndFunc ;==>OKButton
Func CLOSEButton()
; Note: At this point @GUI_CtrlId would equal $GUI_EVENT_CLOSE,
; and @GUI_WinHandle would equal $hMainGUI
MsgBox(0, "GUI Event", "You selected CLOSE! Exiting...")
Exit
EndFunc ;==>CLOSEButton
Gibts da irgendeine Möglichkeit?
MFG Chris
Du arbeitest da Eine Message ab. Das System wartet darauf, dass dein Fenster das ok gibt, dass das bearbeitet wurde, bzw. dass es weitergehn soll. Kommt das nicht "hängt" sich dein fenster auf. (Es kann nicht mehr auf events reagiert werden, da schon eines bearbeitet wird. Es wird ja nicht für jedes Event ein neuer Thread in deinem Orgramm geöffnet).
Noch eine Frage.
Warum ist das mit dem Blocken so?
Es klappt eigentlich alles in den Events bis auf _ArrayDisplay() warum?
Windows besteht eigentlich nur aus Events und Messages, für jeden Tastendruck, Mausbewegung, Fensteraktualisierung, Netzwerktätigkeit, für alles gibt es ein Event.
Du hängst jetzt dein Event in diese Kette mit ein. Windows arbeitet nun pausenlos diese Kette ab und sobald eine Aktion registriert wird, wird sofort die entsprechende Funktion aufgerufen. Dabei ist es Windows herzlich egal, was in dieser Funktion passiert, denn die oberste Windows-Direktive lautet: "Jedes Fenster ist für seinen Inhalt selbst verantwortlich!".
Die Funktion meldet lediglich ein "OK" beim Verlassen an den Event-Handler. Um die Systemstabilität bei nicht erfolgreich beendeten Funktionen zu gefährden, werden diese nach einer bestimmten Zeit aus der Kette "ausgehängt".
Wenn du jetzt innerhalb der Funktion bspw. eine Messagebox oder das Arraydisplay aufrufst, bleibt der Ablauf hängen. Deine Funktion wird nicht mehr aufgerufen, da beim Beenden kein erfolgreiches "OK" registriert wurde. Für Windows ist das ein Fehler, die Funktion wird aus der Kette gelöscht! Wenn jetzt bspw. bei der Msgbox auf "Weiter" geklickt wird, passiert....nichts!
Daher auch am Ende deiner Funktion Event() die Info FD_READ an den TCP-Handler, dass nun eine neue Nachricht empfangen werden kann!
Erster Post auf aktuellen Stand gebracht ( 5 Beispiele
TinkerForge_Bsp1_LCDHelloWorld
TinkerForge_Bsp2_LCDProgessBar
TinkerForge_Bsp3_FirstEvent
TinkerForge_Bsp4_GetStackData
TinkerForge_Bsp5_Poti
Wenn jemand noch Ideen und weitere Anregungen hat immer raus damit!
MFG Chris
Erster Post auf aktuellen Stand gebracht.
Aktueller Stand ( 9 Beispiele
TinkerForge_Bsp1_LCDHelloWorld
TinkerForge_Bsp2_LCDProgessBar
TinkerForge_Bsp3_FirstEvent
TinkerForge_Bsp4_GetStackData
TinkerForge_Bsp5_Poti
TinkerForge_Bsp10_1_ServoBrick
TinkerForge_Bsp10_2_ServoBrick_Event
TinkerForge_Bsp11_1_StepperBrick
TinkerForge_Bsp12_16IO
Da es gerade mal ein sehr sehr kleiner Teil ist den ich übersetzen konnte ( sind jetzt schon über 3,2k Zeilen ) wäre es cool wenn jemand mit machen würde... naja...
MFG Chris