Mir ist aufgefallen, dass Usermessages nicht mehr zurück gesetzt werden. So passiert es jetzt, dass Abfragen für solche Messages immer und immer wieder ausgelöst werden. Das war in früheren XProfan-Versionen nicht so.
Hier ein simples Beispiel:
%umessage wird nicht zurück gesetzt?
-
-
-
-
Frank
Stimmt. Ich wollte sogar mal testweise die Usermessage entfernen und es geht nicht so wie es in der Hilfe beschrieben steht:ZitatCls
Usermessages 20000
SetTimer 10SendMessage(%hwnd,20000,0,0)
While 1
WaitInputIf %UMessage=20000
Usermessages -20000
print "Umessage"
EndIfEndwhile
KillTimer -
Ausserdem ist ein Fehler unter #28.5 in der Hilfe (hier fett ):
ZitatUserMessages -1000,1002
Die UserMessage -1000 wird entfernt und ie Message 1000 neu hinzugefügt.
-
Stimmt, Rolf. Bin ich vorhin auch drüber gestolpert.
roland: Ich hätte dich ja angeskyped, aber du bist die letzten Tage dort nicht erreichbar, weil immer "beschäftigt".
Kadisc: Dort macht der Fehler sich wohl nicht bemerkbar, weil danach eh das Programmende erfolgt. Ausserdem wird eine System-Message gesendet, keine User-Message. Du biegst nur von System auf User um...
Ich vermute, Roland hat nur vergessen, %umessage nach Gebrauch zurück zu setzen. Denn die Message kommt nicht wirklich immer wieder an...
-
Zitat von Frabbing;680751
...Das war in früheren XProfan-Versionen nicht so.
In meiner älteren Profanversion wird die Usermessage bereits durch das Waitinput "gekillt" - die Message kommt also in deinem Code bei mir nie bei der IF Abfrage an. Wenn sich das geändert hat, ist das also eher eine Verbesserung :-).
Jedesmal aber eine Usermessage senden zu müssen, um eine andere zurückzusetzen, ist schon etwas blödsinnig - wäre ganz vernünftig, die Systemvariable direkt zurücksetzen zu können. -
Zitat
In meiner älteren Profanversion wird die Usermessage bereits durch das Waitinput "gekillt" - die Message kommt also in deinem Code bei mir nie bei der IF Abfrage an. Wenn sich das geändert hat, ist das also eher eine Verbesserung :-).
Auf jeden Fall.
ZitatJedesmal aber eine Usermessage senden zu müssen, um eine andere zurückzusetzen, ist schon etwas blödsinnig - wäre ganz vernünftig, die Systemvariable direkt zurücksetzen zu können.
Genau, deswegen ja auch der Titel des Threads.
-
Das Problem war leider schon ein paar Male "aufgetaucht" - auf die Schnelle habe ich diesen [...] Thread hier gefunden von Jörg und mir persönlich war es wegen dieser [...] scrollarea.pcu* negativ aufgefallen. Daraus wurde die usermessages.pcu* weil ich eben ohne diesen "Fehler" arbeiten wollte und das ging auch eine Weile gut.
Ich wusste nicht, dass der Bug nicht bereits (schon längst?) behoben war.
*) Mittlerweile sind beide Units veraltet und von entsprechenden Includes abgelöst.
"Workaround":
Code[URL='http://xprofan.com/faq.mx?setTimer']setTimer[/URL] 33 [URL='http://xprofan.com/faq.mx?while']while[/URL] %[URL='http://xprofan.com/faq.mx?uMessage']uMessage[/URL] [URL='http://xprofan.com/faq.mx?waitInput']waitInput[/URL][URL='http://xprofan.com/faq.mx?case'] case[/URL] %[URL='http://xprofan.com/faq.mx?wmTimer']wmTimer[/URL]:[URL='http://xprofan.com/faq.mx?break']break[/URL][URL='http://xprofan.com/faq.mx?wend'] wend[/URL] [URL='http://xprofan.com/faq.mx?killtimer']killtimer[/URL]
-
Der Workaround funktioniert. Ich hoffe aber, Roland schaut sich das trotzdem mal an und löscht die Variable noch nach jedem Gebrauch. :p
-
Das sollte meiner Meinung nach unbedingt in der nächsten Version behoben sein!!:| Ich bin auch schon darübergestolpert, habe einen ähnlichen Workaround und dachte nur ich hab was verpeilt.:D
-
Hallo,
zu Beginn des Waitinputs wird der aktuelle Wert von %UserMessage zurückgesetzt, aber da die UserMessages ja auf vielfachen Wunsch gestackt werden, ist da halt schon die nächste in den Startlöchern.
Vielleicht sollte ich eine Möglichkeit schaffen, diesen Stack bei Bedarf zu löschen. Vielleicht fällt mir noch eine passende Syntax dazu ein ...
Gruß
RolandNachsatz: Gerade sehe ich, dass ich da schon was verbessert habe. In bestimmten Situationen konnte die Rücksetzung tatsächlich "übersehen" werden.XProfan 11.2 wird bald kommen! Natürlich als kostenloses Update für alle Besitzer von XProfan 11.0 oder 11.1.
-
:super02:
Jetzt dürfen wir nur nicht drängeln.:D
-
Roland hat bestätigt, dass das im kommenden XProfan 11.2 gefixt ist.:D
Roland du bist der Beste!
-
Ja, einwandfrei!
Die neuen Menü-Icons funktionieren ebenfalls, wenn ich auch finde, der Text wird zu dicht an die Icons gesetzt. Aber das kann ja jederzeit mit 2-3 Leerzeichen geändert werden.
-
Zitat von Frabbing;684866
Die neuen Menü-Icons funktionieren ebenfalls, wenn ich auch finde, der Text wird zu dicht an die Icons gesetzt. Aber das kann ja jederzeit mit 2-3 Leerzeichen geändert werden.
LOL, genau das wollte ich gerade schreiben.:D
-
Und bei Submenü ohne Eintrag mit Tabulator (sprich, die Breite des Menüeintrags entspricht der Breite des Textes plus ">") wird das ">" übermalt; da muss man momentan auch noch Leerzeichen einfügen. Vielleicht lässt sich da auch was machen.:|
-
Zitat von Frabbing;684866
Die neuen Menü-Icons funktionieren ebenfalls, wenn ich auch finde, der Text wird zu dicht an die Icons gesetzt. Aber das kann ja jederzeit mit 2-3 Leerzeichen geändert werden.
Ja, das ist Absicht, damit sie kompatibel zum Standardmenü sind. Wenn Du die Farben nicht mit den Set-Funktionen veränderst, sondern einfach nur den zusätzlichen Parameter für die Icons nutzt, passt es zusammen. Für XProfan 12 wird es sicherlich weitere Einstellmöglichkeiten geben.
Gruß
Roland -
Hallo Roland,
es muss aber unbedingt der vom User eingestellte Font/Fontgröße überprüft werden, sonst sieht das Menü nicht mehr gut aus.
-
Hm, ..., ich glaubte dieses zu berücksichtigen. Offensichtlich habe ich da was übersehen. Da ich den vom System eingestellten Font nutze, ging ich davon aus, dass GetTextExtentPoint32(DC,Addr(ItemText),Length(ItemText),ISize) genau diesen berücksichtigt, da er ja wohl dem DC zugewiesen ist; schließlich wird er beim Zeichnen des Textes auch genutzt. Muß da wohl noch etwas forschen ...
-
Zitat
Da ich den vom System eingestellten Font nutze, ging ich davon aus, dass GetTextExtentPoint32(DC,Addr(ItemText),Length(Item Text),ISize) genau diesen berücksichtigt, da er ja wohl dem DC zugewiesen ist; schließlich wird er beim Zeichnen des Textes auch genutzt.
Darüber bin ich auch schonmal gestolpert. Ich weiß momentan aber nicht mehr genau, wie ich das dann gelöst hatte. Meine, das hatte was mit dem Mapping-Mode zu tun und mit der benutzten Schriftart.
Eine Notlösung wäre noch DrawText mit Flag DT_CALCRECT... :cool:
-
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!