Allgemeine Fragen zur PROFAN Programmierung

Views (Heute): 249384 (10820)

| Suchen
| Zurück zur Übersicht

Autor | Thema: Probleme mit postmessage im kompilierten Programm
Philipp Sternberg
| Datum:30.10.01 16:12 (ps@burghardt-ib.de) |
Moin Moin ! Bei dem Versuch in ein ListViewControl ein neues Item (SubItem) einzufügen ist mir folgendes aufgefallen:Mit der Message LVM_INSERTITEM sendmessage (LVChandle&,4103,0,LV_ITEM#) (Rückgabewert ist Index des neuen Items oder -1) kann ich ein Item einem ListViewControl hinzufügen. Der Rückgabewert den sendmessage zurückliefert interessiert mich jedoch überhaupt nicht und daher dachte ich, dass ich auch postmessage nehmen könnte, da es wahrscheinlich schneller als sendmessage läuft. Problem dabei ist: mit postmessage funktioniert das Programm nur noch im Interpreter aber nicht mehr in der kompilierten Version. In der kompilierten Version werden die Items (hier Strings) nur manchmal eingefügt manchmal aber auch nicht. Wenn nur ein Item hinzugefügt wird ist das Problem deshalb auch nicht immer reproduzierbar. Fügt man jedoch (z.b. durch eine While-schleife) z.B. 30 Items der Liste hinzu, so tauchen in der Regel nur 7 - 15 davon in der Liste auf. Es kann vielleicht auch sein, dass postmessage ganz einfach zu schnell für das System ist und deshalb nicht alle Einträge im ListViewControl auftauchen. (Das würde zumindest erklären warum es im Interpreter läuft) Ist das ein Bug oder habe ich den Sinn von postmessage nicht verstanden und es völlig falsch verwendet oder ist es tatsächlich zu schnell ??? Schöne Grüße, Phillipp Sternberg
Thorsten
| Datum: 30.10.01 16:49 (mrk@mrk-soft.de) |
Hallo Phillip, Im gegensatz zu SENDMESSAGE wartet POSTMESSAGE auf keinen Rückgabewert, sondern Sendet einfach die Message ab, ob diese nun tatsächlich ankommt ist daher nicht erkennbar. SENDMESSAGE sendet diese und wartet, ob diese auch wirklich Empfangen wurde, ob also der Empfänger diese entgegengenommen hat und sendet einen rückgabewert. Das ListViewControl ist nun so ein Teil, welches Messages empfängt und darauf Reagiert. für die Reaktion benötigt es Zeit, (um das ITEM einzufügen), Profan muss in dieser Zeit Warten). Mit POSTMESSAGE Sendet Profan nun die Message an das ListViewControl, und macht sofort weiter, egal, ob es nun das Controll empfangen hat oder nicht. Bei einem Controll ist das wie du schon richtig erkannt hast, egal, wenn Profan in dieser Zeit mit etwas anderem beschäftigt ist, nur bei 30 Stück hintereinader ist es da ein reines Glücksspiel ... Mal rein Teoretisch gesehn, sendeste mit POStMESSAGE das erste ITEM, das Controll empfängt dies und verarbeitet es, nur zur selben zeit sendet Profan bereits schon das 2te oder 3te Item, diese werden aber nun nicht angenommen, solange das Controll ebend nicht ferig ist mit der Ausführung. Profan muss hier also auf das controll Warten, ob es fertig ist oder nicht, und dann erst weitermachen, was SENDMESSAGE macht. Wenn dich der rückgabewert nicht Interessiert, so vernachlässige diese einfach, wie z.b @SendMessage(handel&,$2004,ram#,0) POSTMESSAGE ist also da zu verwenden, wenn es wirklich egal ist zu wissen, ob der Empfänger die Message auch erhalten hat, und Profan nicht abhöngig davon ist. Thorsten

| Zurück zur Übersicht