AddGadgetItem und Kompatibilität mit Windows API
- Jac de Lad
- Beiträge: 56
- Registriert: 24.07.2019 17:53
- Computerausstattung: AMD Ryzen 1700X, MSI B350 PC Mate, 256GB SSD, 16GB RAM@2933MHz, AMD Radeon 7770 OC, 106TB HDD, 28" Samsung 4k-Monitor, Windows 10 x64
- Wohnort: Riesa
- Kontaktdaten:
AddGadgetItem und Kompatibilität mit Windows API
Hallo Leute,
kurze Vorgeschichte: Ich komme von XProfan und würde PureBasic gern als Ergänzung für zeitkritische Funktionen nutzen, bzw. komplett umsteigen, falls es sich lohnt (aber das ist nicht Thema dieses Threads). XProfan beherrscht ListViews (in PureBasic "ListIconGadget" genannt, nur sehr mangelhaft, deshalb hab ich eine Bibliothek erstellt, mit der mittels Windows-API ein ListView erzeugt und verwaltet werden kann. Jetzt zu meiner Frage:
Ich habe ein mittels API erstelltes ListView und möchte per PureBasic eine Zeile hinzufügen. Das klappt nicht mit AddGadgetItem (ich vermute, dass PureBasic die Gadgets intern anders verwaltet und ein ListIconGadget kein SysListView32 ist, daher kann ich das Handle meines ListViews nicht mit diesem Befehl nutzen). Ist das möglich?
Vielen Dank im Voraus,
Jac
kurze Vorgeschichte: Ich komme von XProfan und würde PureBasic gern als Ergänzung für zeitkritische Funktionen nutzen, bzw. komplett umsteigen, falls es sich lohnt (aber das ist nicht Thema dieses Threads). XProfan beherrscht ListViews (in PureBasic "ListIconGadget" genannt, nur sehr mangelhaft, deshalb hab ich eine Bibliothek erstellt, mit der mittels Windows-API ein ListView erzeugt und verwaltet werden kann. Jetzt zu meiner Frage:
Ich habe ein mittels API erstelltes ListView und möchte per PureBasic eine Zeile hinzufügen. Das klappt nicht mit AddGadgetItem (ich vermute, dass PureBasic die Gadgets intern anders verwaltet und ein ListIconGadget kein SysListView32 ist, daher kann ich das Handle meines ListViews nicht mit diesem Befehl nutzen). Ist das möglich?
Vielen Dank im Voraus,
Jac
Re: AddGadgetItem und Kompatibilität mit Windows API
Wenn du das ListIconGadget (ListView) mit WinAPI erstellst, dann brauchst du immer die Handle-Nummer. Bei PureBasic wird eine interne ID generiert.
Statt AddGadgetItem() musst du SendMessage_() und #LVM_INSERTITEM benutzen.
Statt AddGadgetItem() musst du SendMessage_() und #LVM_INSERTITEM benutzen.
- Jac de Lad
- Beiträge: 56
- Registriert: 24.07.2019 17:53
- Computerausstattung: AMD Ryzen 1700X, MSI B350 PC Mate, 256GB SSD, 16GB RAM@2933MHz, AMD Radeon 7770 OC, 106TB HDD, 28" Samsung 4k-Monitor, Windows 10 x64
- Wohnort: Riesa
- Kontaktdaten:
Re: AddGadgetItem und Kompatibilität mit Windows API
Hallo RSBasic,
ja, in XProfan hab ich mir auch eine Funktion zusammengeschustert, die auf sendmessage basiert. Ich hatte nur gehofft, dass es auch mit einem vorgefertigten Befehl geht. Vielen Dank für die Antwort.
ja, in XProfan hab ich mir auch eine Funktion zusammengeschustert, die auf sendmessage basiert. Ich hatte nur gehofft, dass es auch mit einem vorgefertigten Befehl geht. Vielen Dank für die Antwort.
- Jac de Lad
- Beiträge: 56
- Registriert: 24.07.2019 17:53
- Computerausstattung: AMD Ryzen 1700X, MSI B350 PC Mate, 256GB SSD, 16GB RAM@2933MHz, AMD Radeon 7770 OC, 106TB HDD, 28" Samsung 4k-Monitor, Windows 10 x64
- Wohnort: Riesa
- Kontaktdaten:
Re: AddGadgetItem und Kompatibilität mit Windows API
Ok, also das klappt jetzt schon halb. Allerdings werden meine Substrings nicht übergeben. Zur Erklärung: in hnd kommt das Handle und in strg der String, der in das ListView soll, an. strg besteht aus mehrere Teilstrings, getrennt durch |; am Ende kommt ein Tab (Chr(9)) und ein Zahlenwert. Der erste Teilstring wird eingefügt, aber die anderen Teilstrings werden zwar ausgeschnitten, jedoch nicht eingefügt. Ich habe meinen XProfan-Code genommen und in PureBasic übersetzt und es dieser Teil besteht auch nur aus ein paar Zeilen, klappt trotzdem nicht. Kann mir jemand weiterhelfen?
Code: Alles auswählen
Structure LVADDITEM
mask.l
item.l
subitem.l
state.l
statemask.l
text.l
textmax.l
image.l
param.l
ident.l
groupid.l
ccloumns.l
picolfmt.l
igroup.l
EndStructure
Procedure AddLVItem(hnd,strg.s)
message.LVADDITEM\mask=5
message.LVADDITEM\item=SendMessage_(hnd,$1004,0,0)
message.lvadditem\param=Val(StringField(strg,2,Chr(9)))
strg=StringField(strg,1,Chr(9))
temp.s=StringField(strg,1,"|")
message.LVADDITEM\text=@temp
SendMessage_(hnd,$1007,0,message)
For loop = 1 To CountString(strg,"|")
temp=StringField(strg,loop+1,"|")
;MessageRequester(Str(message.LVADDITEM\item),temp,0)
message.LVADDITEM\text=@temp
message.LVADDITEM\subitem=loop
SendMessage_(hnd,$1006,0,message)
Next
EndProcedure
Re: AddGadgetItem und Kompatibilität mit Windows API
Schau mal nach Werkzeug -> Strukturverzeichnis.
Die Strukturen sind schon alle angelegt und brauchst nicht mehr selber schreiben
Die Strukturen sind schon alle angelegt und brauchst nicht mehr selber schreiben
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Re: AddGadgetItem und Kompatibilität mit Windows API
Der String für PB muß auch mit Chr(10) statt mit | unterteilt sein.
Sollte man auch beachten. Ansonsten nimmt PB alle Zeichen bis
Chr(10). Wenn dann der Teilstring genau so lang ist, wie die
erste Spalte, meint man, man hätte es richtig gemacht.
Sollte man auch beachten. Ansonsten nimmt PB alle Zeichen bis
Chr(10). Wenn dann der Teilstring genau so lang ist, wie die
erste Spalte, meint man, man hätte es richtig gemacht.
PB 5.60
- Jac de Lad
- Beiträge: 56
- Registriert: 24.07.2019 17:53
- Computerausstattung: AMD Ryzen 1700X, MSI B350 PC Mate, 256GB SSD, 16GB RAM@2933MHz, AMD Radeon 7770 OC, 106TB HDD, 28" Samsung 4k-Monitor, Windows 10 x64
- Wohnort: Riesa
- Kontaktdaten:
Re: AddGadgetItem und Kompatibilität mit Windows API
Hallo mk-soft,
danke für den Hinweis, das schaue ich mir gleich nach der Arbeit an.
Hello Heinz, schön dich zu sehen.
Der erste Sendmessage-Befehl fügt eine Zeile hinzu, aber nur Text in der ersten Spalte. Mit der Schleife und dem zweiten Sendmessage-Befehl fülle ich die Subtexte. Das | ist im Moment noch eine XProfan-Altlast, stört aber nicht, da jeder Subtext einzeln geschrieben wird und das Trennzeichen dadurch irrelevant ist.
danke für den Hinweis, das schaue ich mir gleich nach der Arbeit an.
Hello Heinz, schön dich zu sehen.
Der erste Sendmessage-Befehl fügt eine Zeile hinzu, aber nur Text in der ersten Spalte. Mit der Schleife und dem zweiten Sendmessage-Befehl fülle ich die Subtexte. Das | ist im Moment noch eine XProfan-Altlast, stört aber nicht, da jeder Subtext einzeln geschrieben wird und das Trennzeichen dadurch irrelevant ist.
- Jac de Lad
- Beiträge: 56
- Registriert: 24.07.2019 17:53
- Computerausstattung: AMD Ryzen 1700X, MSI B350 PC Mate, 256GB SSD, 16GB RAM@2933MHz, AMD Radeon 7770 OC, 106TB HDD, 28" Samsung 4k-Monitor, Windows 10 x64
- Wohnort: Riesa
- Kontaktdaten:
Re: AddGadgetItem und Kompatibilität mit Windows API
Ich habs mal angepasst, die vordefinierten Strukturen kannte ich noch nicht. Auch, dass ich einen Pointer für pszText einsetzen muss ist mir neu, da ist XProfan anders. Wie auch immer, das Ergebnis ist leider immer noch das Gleiche:
Code: Alles auswählen
Procedure AddLVItem(hnd,strg.s)
message.LVITEM\mask=5
message.LVITEM\iItem=SendMessage_(hnd,$1004,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
SendMessage_(hnd,$1007,0,message)
For loop = 1 To CountString(strg,"|")
temp=StringField(strg,loop+1,"|")
;MessageRequester(Str(message.LVADDITEM\item),temp,0)
message.LVITEM\pszText=@temp
message.LVITEM\iSubItem=loop
SendMessage_(hnd,$1006,0,message)
Next
EndProcedure
Re: AddGadgetItem und Kompatibilität mit Windows API
Vielleicht hilft dir der Code weiter: https://www.purebasic.fr/french/viewtop ... =6&t=15675
Da gibt es u.a. eine Prozedur ListView_AddItem().
Da gibt es u.a. eine Prozedur ListView_AddItem().
- Jac de Lad
- Beiträge: 56
- Registriert: 24.07.2019 17:53
- Computerausstattung: AMD Ryzen 1700X, MSI B350 PC Mate, 256GB SSD, 16GB RAM@2933MHz, AMD Radeon 7770 OC, 106TB HDD, 28" Samsung 4k-Monitor, Windows 10 x64
- Wohnort: Riesa
- Kontaktdaten:
Re: AddGadgetItem und Kompatibilität mit Windows API
@RSBasic:
Ja, ein wenig. Ich muss die Maske vor dem For nochmal neu setzen:
Vielen Dank für die Hilfe!!!
Ja, ein wenig. Ich muss die Maske vor dem For nochmal neu setzen:
Code: Alles auswählen
message.LVITEM\mask=1