UDP Server mit GUI
Übersicht

![]() |
kogBetreff: UDP Server mit GUI |
![]() Antworten mit Zitat ![]() |
---|---|---|
Guten Tag an alle,
Als ich heute ein kleines Serverprogramm schrieb, musste ich was feststellen, das empfangen und senden an einen BlitzBasic clienten ist kein Problem, doch BlitzMax empfängt nur etwas wenn das Fenster vom Server offen ist, gibt es eine möglichkeit dies auch zu minimieren und der Server trotzdem noch empfangen kann? |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Via WinAPI sollte das möglich sein, ja. So wie bei den alten Blitz ja auch schon.
Was vielleicht auch hilft, habe ich aber noch nicht ausprobiert, wäre den entsprechenden Event abzufangen und ins leere laufen zu lassen. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
kog |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich benutze das BNetEX modul, doch leider habe ich keine ahnung wie du mein, in einer repeat schleife frage ich den UDP Status ab ob eine Nachricht hineinkommt oder nicht.
Hier der schleifen code: BlitzBasic: [AUSKLAPPEN] If window p.s.: Vo wo genau us dr Schwiz? Wele Kanton? |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das hat damit nichts zu tun.
Was du machen musst, falls du keine WinAPI nutzen willst, ist einen EventHook erzeugen um damit den verlorenen Fokus zu kompensieren. Weiss jedoch nicht ob das hier wirklich funktioniert, müsstest du probieren. Das ganze hat mti dem UDP Code rein garnix zu tun, es ist nur so das BM Apps (oder blitz allgemein) stehen bleiben wenn man sie minimiert, bis man sie wieder reinholt. Und dem musst du mit einem EventHook entgegen wirken und den Event verwerfen anstatt ihn weiterzuleiten. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
kog |
![]() Antworten mit Zitat ![]() |
---|---|---|
Irgendwie bin ich zu blöd für Hook, habe es so versucht wie im tutorial:
Code: [AUSKLAPPEN] AddHook EmitEventHook, renderUDP Function renderUDP:Object(iId:Int,tData:Object,tContext:Object) Local Event:TEvent=TEvent(tData) UDPUpdate() Return tData End Function |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
sorry, wenn du versucht hättest das Tut zu verstehen, dann hätteste nicht sowas geschrieben.
Ich bin allerdings gerne bereit dir zu helfen, wenn du nicht mehr copy-paste machst und sagst du hättest das tut wirklich gemacht ... Sprich frühestens morgen oder übermorgen, da man das nicht in 2min versteht. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
kog |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe das Tutorials mit den Eventhooks nochmal in ruhe durchgelesen, auch herausgefunden welche ID heraus kommt wenn man das fenster aktiviert, doch wie findet man es heraus wenn es nicht aktiviert ist?
ich habe ihn jetzt so erweitert: Code: [AUSKLAPPEN] If Event.Source=window And Event.ID = 16388
UDPUpdate() EndIf doch immer noch keine lösung |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wenn die Anwendung "pausiert" wird, wird der EVENT_APPSUSPEND gesendet, entsprechend wird ein Event erzeugt wenn die Anwendung fortgesetzt wird. | ||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
kog |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich weiss, ich nerve hier ziemlich rum, doch leider funktioniert dies nicht, zum testen habe ich ein End hineingebaut:
Code: [AUSKLAPPEN] Function renderUDP:Object(iId:Int,tData:Object,tContext:Object)
Local Event:TEvent=TEvent(tData) If Event.Source=window And Event.ID = EVENT_APPSUSPEND End UDPUpdate() EndIf Return tData End Function aber dies funktioniert nicht, ich wäre sehr froh wenn du mir ein beispiel machen würdest, wenn dieses Problem geklärt wäre, könnte ich endlich mit dem UDP Code weitermachen.. |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
EVENT_APPRESUME und EVENT_APPSUSPEND haben kein Source, denn das würde keinen Sinn machen da nur 1 Anwendung laufen kann.
Sprich wenn du das raus nimmst, wird er drauf reagieren. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
kog |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe die Event.ID abfrage rausgenommen und in der schleife mit waitevent() abgefragt EVENT_APPRESUME und EVENT_APPSUSPEND, doch leider funktioniert es immernochnicht.
Hmm BlitzBasic war einfacher^^ nX^ hat mir auch versucht mit dem Code zu helfen doch leider funktioniert dies nicht, gibt es noch eine andere möglichkeit? |
||
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also die Nachrichten sollten dir zumindest in BNetEx nicht verloren gehen.
Also laut BlitzPlus ist es ja folgendermaßen: Zitat: Früher oder später wird jeder auf ein kleines Problem stoßen. Wenn man ein anderes Programmfenster auswählt, dann läuft das BB-Programm weiterhin. Dies lässt sich mit einigen Tricks verhindern (Event $2001). Doch viel einfacher ist es mit diesem Befehl. Normalerweise ist diese Funktion deaktiviert. Wird es aktiviert, dann wird das Programm automatisch angehalten, bis das BB-Fenster wieder aktiviert wird.
Ob das bei BMax auch so ist, weiß ich nicht. mfg olli |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Eine Möglichkeit wäre sonst auch das ganze via Timer zu steuern (denn Timer erzeugen den Event
Code: [AUSKLAPPEN] Strict
Global window:tgadget = CreateWindow("Test" , 0 , 0 , 200 , 200) Global panel:tgadget = CreatePanel(0 , 0 , ClientHeight(window) , ClientWidth(window) , window) AddHook 0,renderUDP SetHotKeyEvent(Key_Q,modifier_control ) ' Ctrl + Q um Anwendung zu beenden Global timer:ttimer = CreateTimer(100) ' Alle 10ms auf neue Nachrichten prüfen Repeat WaitEvent() If EventID() = event_hotkeyhit And EventMods() = modifier_control And EventData() = key_q End EndIf Forever End Function renderUDP:Object(iId:Int,tData:Object,tContext:Object) Local Event:TEvent = TEvent(tData) If event And Event.ID = EVENT_TIMERTICK And event.source = timer Print "Zeit: " + MilliSecs() EndIf Return tData End Function Der EventHook sonst hätte nämlich keinen Sinn, da wie der Name sagt, der Hook an Events gebunden ist und wenn eine Anwendung nicht mehr fokusiert ist, erhält sie eigentlich keine Events mehr, ausgenommen APPRESUME und TIMERTICK ... Und ersterer ist ein einmaliger Event. Ich weiss das es auch eine Möglichkeit gab das "lose Focus" Verhalten zu manipulieren, allerdings leider nimmer aus dem Kopf, da muss ich erst ein wenig rumschauen. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
- Zuletzt bearbeitet von Dreamora am Di, Aug 15, 2006 14:14, insgesamt einmal bearbeitet
![]() |
kog |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielen Dank!
Ich kann Ihnen gar nicht genug danken, es funktioniert endlich, danke! @Dreamora: Us welem kanton chuntsch? |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group