@Kiffi und @mk-soft:
Ich will mich erstmal an PureBasic rantasten. Ich habe ein Projekt für meine Arbeit, rund 4000 Zeilen in XProfan, und will einige sehr oft wiederholte Passagen in PureBasic umsetzen, weil XProfan sehr langsam ist. Unabhängig von Sinn oder Unsinn dieser Sache fehlt es mir noch zu sehr an PureBasic-Verständnis und deswegen möchte ich erstmal das eine Problem lösen. Da das ListView bisher in XProfan erstellt wird kann ich keine Gadgetbefehle benutzen. Das ListView direkt in der DLL zu erstellen und das Handle an das aufrufende Programm zu übergeben ist natürlich eine tolle Idee!
Meine Funktion funktioniert so weit, nur dass ich vor der Schleife den Parameter "mask" noch einmal setzen muss. Vergisst PureBasic den Inhalt wieder? Die API setzt eigentlich nichts in der Struktur zurück, das kommt mir merkwürdig vor.
Unabhängig davon verstehe ich nicht, warum der Param-Wert nicht übergeben wird:
Code: Alles auswählen
Procedure AddLVItem(hnd,strg.s)
Protected message.LVITEM
message.LVITEM\mask=#LVIF_TEXT | #LVIF_PARAM
message.LVITEM\iItem=SendMessage_(hnd,#LVM_GETITEMCOUNT,0,0)
message.LVITEM\lParam=Val(StringField(strg,2,Chr(9)))
strg=StringField(strg,1,Chr(9))
temp.s=StringField(strg,1,"|")
message.LVITEM\pszText=@temp
message.LVITEM\iItem=SendMessage_(hnd,#LVM_INSERTITEMA,0,message)
message.LVITEM\mask=#LVIF_TEXT
For loop = 1 To CountString(strg,"|")
temp=StringField(strg,loop+1,"|")
message.LVITEM\pszText=@temp
message.LVITEM\iSubItem=loop
SendMessage_(hnd,#LVM_SETITEMA,0,message)
Next
EndProcedure
Ich setze das Flag und weise lParam einen Wert zu. Die Zeile im ListView wird erstellt, aber es kommt kein Param an. Das Beispiel aus dem Link macht im Prinzip genau das gleiche.
Wenn ich den Code einkürze (mit #LF$) bleibt das ListView leer:
Code: Alles auswählen
Procedure AddLVItem(hnd,strg.s)
Protected message.LVITEM
message.LVITEM\mask=#LVIF_TEXT | #LVIF_PARAM
message.LVITEM\iItem=SendMessage_(hnd,#LVM_GETITEMCOUNT,0,0)
message.LVITEM\lParam=Val(StringField(strg,2,Chr(9)))
strg=StringField(strg,1,Chr(9))
temp.s=ReplaceString(strg,"|",#LF$);StringField(strg,1,"|")
message.LVITEM\pszText=@temp
message.LVITEM\iItem=SendMessage_(hnd,#LVM_INSERTITEMA,0,message)
; message.LVITEM\mask=#LVIF_TEXT
; For loop = 1 To CountString(strg,"|")
; temp=StringField(strg,loop+1,"|")
; message.LVITEM\pszText=@temp
; message.LVITEM\iSubItem=loop
; SendMessage_(hnd,#LVM_SETITEMA,0,message)
; Next
EndProcedure
Zur Erinnerung: In XProfan werden die SubItems standardmäßig mit "|" getrennt, deshalb die Umwandlung.
Edit: Das #LF$ wird wohl nur bei der entsprechenden Gadget-Funktion wirken.
Vielen Dank,
Jac