ListIconGadget() #PB_ListIcon_HeaderDragDrop noch ne Frage

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

ListIconGadget() #PB_ListIcon_HeaderDragDrop noch ne Frage

Beitrag von Xaby »

TuMachenDatei
...
For x=0 To Spalten-1
WriteStringN(3,Str(GetGadgetItemAttribute(0,0,#PB_ListIcon_ColumnWidth,x)))
Next
...
MachZuDatei



Folgendes:

Zeile1="Hallo;Paul;Spalte3;Usw.;Einfach nur ein Test;Letzte"

Dim Dip und Zim. SpBreite ist ein eindimensionales Array vom Typ Longint

Meinet wegen alles Hundert, wenn man keine Datei zum Öffnen hat.


... Fensterzeugs ...

Code: Alles auswählen

ListIconGadget(0, 5, 150, 635, 400, StringField(Zeile1,1,";"), SPBreite(1), #PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection | #PB_ListIcon_GridLines | #PB_ListIcon_HeaderDragDrop )
Vor allem: #PB_ListIcon_HeaderDragDrop

Ich würde gern nicht nur die Spaltenbreite, sondern auch die Spaltenpositionen speichern können.
Wie kann ich sie ermitteln und wie kann ich sie setzen. Oder ist das so nicht möglich?

Gruß, Folker :allright:
Zuletzt geändert von Xaby am 18.10.2006 13:28, insgesamt 1-mal geändert.
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag von nicolaus »

Hi Folker,

Das ist eigentlich recht einfach.
Schau dir einfach mal folgenden code von mir an und füh in im debug aus. Da wirst du bei der ausgabe die reihenfolge sehen können. Immer wenn du nen header verschoben hast drück den button "show" um im debugfenster die neue reihenfolge zu sehen.

Code: Alles auswählen

OpenWindow(0,0,0,300,300,"LI Test",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
CreateGadgetList(WindowID(0))
ListIconGadget(0,0,0,300,200,"Test1",50,#PB_ListIcon_HeaderDragDrop)
ButtonGadget(1,5,210,100,20,"show")
AddGadgetColumn(0,1,"Test2",100)
AddGadgetColumn(0,2,"Test3",100)
#LVM_GETCOLUMNORDERARRAY = (#LVM_FIRST+ $3B)
Dim colArray(2) ;<- hier die anzahl der columns die du hast beginnend bei 0
SendMessage_(GadgetID(0),#LVM_GETCOLUMNORDERARRAY,3,@colArray(0))
For I = 0 To 2
  Debug colArray(I)
Next
Debug "------------"
Repeat
  Event = WaitWindowEvent()
  If Event = #PB_Event_Gadget
    GadgetID = EventGadget()
    If GadgetID = 1
      SendMessage_(GadgetID(0),#LVM_GETCOLUMNORDERARRAY,3,@colArray(0)) 
      For I = 0 To 2
        Debug colArray(I)
      Next
      Debug "------------"
    EndIf
  EndIf
Until Event = #PB_Event_CloseWindow
Hoffe das hilft dir,
Gruß Nico
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

Coole Sache, Dank dir.

Schade eigentlich, dass dafür nicht

GetGadgetItemAttribute(#Gadget, Eintrag, Attribut [, Spalte])

Benutzen kann. Vielleicht im Feld Eintrag ... entscheidet, ob man Spaltenbreite oder eigentlichen SpaltenIndex zurück bekommt.

Dank dir. Gruß, Folker :allright:
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Noch ne Frage

Beitrag von Xaby »

Hab ich auch noch die Möglichkeit, genauso einfach die Spalten in ihrer Reihenfolge wieder zu setzen?

Die einzige Idee, die ich so habe, scheint recht kompliziert zu sein.

Muss ich das ganze ListGadget neu machen?


Meine Idee:

Array mit Daten. Spalteninhalten.

For y=0 to ZeilenAnzahl
For x=0 to SpaltenAnzahl

DatenArray[...

Next ; Komisch, das hier nicht steht EndFor



Aber das kann nicht die Lösung sein, wenn ich erst mein Feld neu sortieren müsste.

Gibt es einen Befehl, um die Spalten zu versetzen, unabhängig vom Inhalt?

Gruß, Folker :allright:
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag von nicolaus »

Hm ich verstehe jetzt erstmal nicht ganz was du genau meinst / willst.
Du tust doch die Spalten schon verschieben mit #PB_ListIcon_HeaderDragDrop.

Oder kann es sein das du nicht die Spalten meinst sondern die Zeilen?

Code: Alles auswählen

	      Spalte 1| Spalte 2 | Spalte 3 
Zeile 1 _________|__________|_________
Zeile 2 _________|__________|_________
Zeile 3 _________|__________|_________
Zeile 4 _________|__________|_________
Zeile 5 _________|__________|_________
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

Nein Nein, ich meine schon die Spalten.

Ich stelle mir das so vor:

Programm startet und lädt aus einer Text-Datei oder was auch immer, Spaltenbreite und Spaltenposition.

Damit die #PB_ListIcon_HeaderDragDrop ...
Verschiebungen auch wieder hergestellt werden können.

Sonst müsste man sie doch jedes Mal neu verschieben per Hand oder?

Wie kann ich sie also setzen. Abfragen muss ich sie zum Speichern.
Aber zum Laden sollte ich sie setzen können.

Oder für vordefinierte Einstellungen.

Dank dir im Voraus. Gruß, Folker :allright:
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

Ich wollte es dir schon lange sagen ...

es ist eigentlich genau das, was ich meinte :D

Dank dir. :allright:
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag von dysti »

@Xaby: Zwischen deinem Post vom 31.März.2006 und 19.Okt.2006 sehe ich keine Lösung.
Wie kann man denn jetzt die Spalten nachträglich versetzen?
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

Das muss man nämlich gar nicht ...

Stell dir vor, du hast folgendes:

AddGadgetColumn(0,Feld1, "Name",100)
AddGadgetColumn(0,Feld2, "Nick",100)


Feld1 : Feld2
Name : Nick
Folker : Xaby

Und du weißt, dass die Reihenfolge per Hand umgestellt worden ist auf:

Fel2 : Feld1

Nun könnte man die Liste auslesen und in ein Array schreiben.
Und diesmal gibt man sie anders aus

Vorher war es:

AddGadgetColumn(0,Feld2, "Name",100)
AddGadgetColumn(0,Feld1, "Nick",100)

.... oder???

Ich glaube, ich hatte zu diesem Thema auch was von Fluid Byte gesehen, aber ich find es einfach nicht mehr. Zu wenig oder zu viele Treffer bei der Suche ... :(
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

So die Theorie ...

Es ist verzwickt. Im Beispiel funktioniert alles prima.

Nun wollte ich die Sache in mein Programm einbauen ...

Mein Array war Global

Code: Alles auswählen

SendMessage_(GadgetID(0),#LVM_GETCOLUMNORDERARRAY,3,@colArray(0)) 
Was genau macht die 3?

Und die scheinen immer Global zu sein

Code: Alles auswählen

#LVM_GETCOLUMNORDERARRAY = (#LVM_FIRST+ $3B) 


Verträgt sich deine variante eventuell nicht mit anderen CallBack-Funktionen?

Ich kenn mich zu wenig aus, ich kann dir nur sagen, dass es mein Array nicht beschreibt. Es schreibt nicht mal NULLen rein.
Egal wohin ich die Titel verschiebe.

Wodran kann es liegen?

Hab es einfach zum Testen in meine HAUPTSCHLEIFE gelegt.

Eigentlich brauch ich doch nur:

#LVM_GETCOLUMNORDERARRAY definieren (ist doch immer Global)
und danach mein Array mit
SendMessage_ abfragen ...

Wo ist der Haken?


Ich hab alles versucht. Ich muss was kleines übersehen habe
...


ich bin drauf und dran mein Programm um deins rumzubauen ...
aber das kann doch nicht die Lösung sein.

Kennst du Ursachen für sowas?


...

Hier mal was zusammen gebautes ...
Wieso geht es nicht?

Code: Alles auswählen

Procedure Dings()
  ListIconGadget(5,0,0,300,200,"Test1",50,#PB_ListView_Multiselect | #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect | #PB_ListIcon_HeaderDragDrop | #PB_ListIcon_AlwaysShowSelection) 
  
  
EndProcedure


Procedure Dong()
  AddGadgetColumn(5,1,"Test2",100) 
  AddGadgetColumn(5,3,"Test3",100) 
  AddGadgetColumn(5,3,"4",50)
  CreateImage(0,32,32)
  AddGadgetItem(5,0,"Test"+Chr(10))
  AddGadgetItem(5, -1, "Item 1"+Chr(10)+"Item 2"+Chr(10)+"Item 3"+Chr(10)+"Item 4")
  
 
EndProcedure

Enumeration
  #Wind
  
EndEnumeration

#LVM_GETCOLUMNORDERARRAY = (#LVM_FIRST+ $3B) 

OpenWindow(#Wind,0,0,400,400,"LI Test",#PB_Window_ScreenCentered|#PB_Window_SystemMenu) 
CreateGadgetList(WindowID(0)) 
PanelGadget(0,4,4,380,380)
AddGadgetItem(0,0,"Test")
ButtonGadget(1,5,210,100,20,"show") 
Dings()

CloseGadgetList()

Dong()
Global Dim colrray(10) ;<- hier die anzahl der columns die du hast beginnend bei 0 
;SendMessage_(GadgetID(0),#LVM_GETCOLUMNORDERARRAY,3,@colArray(0)) 
Redim colrray(12)

For i = 0 To 2 
  Debug colrray(i) 
Next 
Debug "------------" 
Repeat 
  Event = WaitWindowEvent(1000) 
  If Event = #PB_Event_Gadget 
    GadgetID = EventGadget() 
    If GadgetID = 1 
      SendMessage_(GadgetID(0),#LVM_GETCOLUMNORDERARRAY,3,@colrray(0)) 
      For i = 0 To 2 
        Debug colrray(i) 
      Next 
      Debug "------------" 
    EndIf 
  EndIf 
  
  SendMessage_(GadgetID(5),#LVM_GETCOLUMNORDERARRAY,3,@colrray(0)) 
  For i = 0 To 2 
    Debug colrray(i) 
  Next 
  Debug "------------" 
  
Until Event = #PB_Event_CloseWindow
Kinder an die Macht http://scratch.mit.edu/
Antworten