Autor | Thema: Probleme mit postmessage im kompilierten Programm | | 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
|
| | 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
|
|
|