Aktuelle Zeit: 05.07.2020 18:13

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 22 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags: AddGadgetItem und Kompatibilität mit Windows API
BeitragVerfasst: 24.07.2019 18:01 
Offline
Benutzeravatar

Registriert: 24.07.2019 17:53
Wohnort: Riesa
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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: AddGadgetItem und Kompatibilität mit Windows API
BeitragVerfasst: 24.07.2019 18:42 
Offline
Admin
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
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.

_________________
BildBildBildBild BildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: AddGadgetItem und Kompatibilität mit Windows API
BeitragVerfasst: 24.07.2019 19:45 
Offline
Benutzeravatar

Registriert: 24.07.2019 17:53
Wohnort: Riesa
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: AddGadgetItem und Kompatibilität mit Windows API
BeitragVerfasst: 24.07.2019 20:42 
Offline
Benutzeravatar

Registriert: 24.07.2019 17:53
Wohnort: Riesa
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:
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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: AddGadgetItem und Kompatibilität mit Windows API
BeitragVerfasst: 24.07.2019 23:56 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Schau mal nach Werkzeug -> Strukturverzeichnis.

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 / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf My Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: AddGadgetItem und Kompatibilität mit Windows API
BeitragVerfasst: 25.07.2019 03:59 
Offline

Registriert: 15.10.2004 17:42
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.

_________________
PB 5.60


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: AddGadgetItem und Kompatibilität mit Windows API
BeitragVerfasst: 25.07.2019 04:47 
Offline
Benutzeravatar

Registriert: 24.07.2019 17:53
Wohnort: Riesa
Hallo mk-soft,
danke für den Hinweis, das schaue ich mir gleich nach der Arbeit an.

Hello Heinz, schön dich zu sehen. :bounce:
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: AddGadgetItem und Kompatibilität mit Windows API
BeitragVerfasst: 25.07.2019 14:45 
Offline
Benutzeravatar

Registriert: 24.07.2019 17:53
Wohnort: Riesa
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:
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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: AddGadgetItem und Kompatibilität mit Windows API
BeitragVerfasst: 25.07.2019 15:08 
Offline
Admin
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Vielleicht hilft dir der Code weiter: https://www.purebasic.fr/french/viewtop ... =6&t=15675
Da gibt es u.a. eine Prozedur ListView_AddItem().

_________________
BildBildBildBild BildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: AddGadgetItem und Kompatibilität mit Windows API
BeitragVerfasst: 25.07.2019 16:10 
Offline
Benutzeravatar

Registriert: 24.07.2019 17:53
Wohnort: Riesa
@RSBasic:
Ja, ein wenig. Ich muss die Maske vor dem For nochmal neu setzen:
Code:
  message.LVITEM\mask=1


Vielen Dank für die Hilfe!!!


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 22 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 17 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye