Seite 1 von 2

Listicon, zur Spalte Scrollen

Verfasst: 09.08.2006 00:26
von hawk009
Hallo!

Ich möchte im Listicon, per Programm, zu einer (nicht sichtbaren) Spalte scrollen.

Code: Alles auswählen

OpenWindow(0, 100, 300, 400, 200, "Listicon Scroll Test", #PB_Window_SystemMenu) 


If CreateGadgetList(WindowID(0)) 
  ListIconGadget(1, 1, 1, 300, 160, "Spalte0", 100, #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect | #PB_ListIcon_HeaderDragDrop)
 
  AddGadgetColumn(1, 1, "Spalte1", 100)
  AddGadgetColumn(1, 2, "Spalte2", 100)
  AddGadgetColumn(1, 3, "Spalte3", 100)
  
  AddGadgetItem(1, -1, "0:0" + Chr(10) + "0:1" + Chr(10) + "0:2" + Chr(10) + "0:3")
  AddGadgetItem(1, -1, "1:0" + Chr(10) + "1:1" + Chr(10) + "1:2" + Chr(10) + "0:3")
  AddGadgetItem(1, -1, "2:0" + Chr(10) + "2:1" + Chr(10) + "2:2" + Chr(10) + "0:3")
  AddGadgetItem(1, -1, "3:0" + Chr(10) + "3:1" + Chr(10) + "3:2" + Chr(10) + "0:3")
  AddGadgetItem(1, -1, "4:0" + Chr(10) + "4:1" + Chr(10) + "4:2" + Chr(10) + "0:3")

EndIf

Repeat 

  EventID.l = WaitWindowEvent()

Until EventID = #PB_Event_CloseWindow 

Im Beispiel also die Spalte3 sichtbar machen.

Hat jemand eine Idee, wie man das realisiert?

Danke

Ralf

Verfasst: 09.08.2006 01:06
von winduff
alkohol + dein code + deine erklärung = 0 :twisted:

Ähm verstehe nicht ganz was du meinst, sorry

Verfasst: 09.08.2006 01:47
von ts-soft
winduff hat geschrieben:alkohol + dein code + deine erklärung = 0 :twisted:

Ähm verstehe nicht ganz was du meinst, sorry
Dann geh mal Rausch ausschlafen :mrgreen:

Code: Alles auswählen

OpenWindow(0, 100, 300, 400, 200, "Listicon Scroll Test", #PB_Window_SystemMenu)


If CreateGadgetList(WindowID(0))
  ListIconGadget(1, 1, 1, 300, 160, "Spalte0", 100, #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect | #PB_ListIcon_HeaderDragDrop)
 
  AddGadgetColumn(1, 1, "Spalte1", 100)
  AddGadgetColumn(1, 2, "Spalte2", 100)
  AddGadgetColumn(1, 3, "Spalte3", 100)
 
  AddGadgetItem(1, -1, "0:0" + Chr(10) + "0:1" + Chr(10) + "0:2" + Chr(10) + "0:3")
  AddGadgetItem(1, -1, "1:0" + Chr(10) + "1:1" + Chr(10) + "1:2" + Chr(10) + "0:3")
  AddGadgetItem(1, -1, "2:0" + Chr(10) + "2:1" + Chr(10) + "2:2" + Chr(10) + "0:3")
  AddGadgetItem(1, -1, "3:0" + Chr(10) + "3:1" + Chr(10) + "3:2" + Chr(10) + "0:3")
  AddGadgetItem(1, -1, "4:0" + Chr(10) + "4:1" + Chr(10) + "4:2" + Chr(10) + "0:3")
  SendMessage_(GadgetID(1), #LVM_SCROLL, 110, 0)
EndIf

Repeat

  EventID.l = WaitWindowEvent()

Until EventID = #PB_Event_CloseWindow 
Das berechnen, wieviel zu scrollen ist, mußte aber selber rausfinden

Verfasst: 09.08.2006 07:54
von hawk009
Hi!

Die Position errechne ich schon anhand der Spaltenbreiten.

Danke für den Tip.

Gruß

Ralf

Verfasst: 09.08.2006 08:28
von AND51
gnozales' PureLVSORT Lib kann das auch für dich machen und bietet noch eine Menge nützlicher Befehele für ListIconGadget()s. Kann ich nur empfehlen.

Verfasst: 09.08.2006 08:49
von ts-soft
@AND51
Es gibt auch Leute, die wollen selber programmieren. Eine Lib erspart oft viel
Arbeit, aber für solche Kleinigkeiten, wohl nicht nötig. Erst selber rausfinden,
dann fragen, und wenns zu kompliziert wird, kann man immer noch die Lib
nehmen :wink:

Verfasst: 09.09.2006 07:57
von hawk009
Hi!

Noch einmal ein Frage dazu.

Mit der Message #LVM_SCROLL kann ich im Listicon "pixelgenau" horizontal scrollen.

Gibt es eine Möglichkeit die derzeitige Position des Scrollbars im Listicon
zu ermitteln?

Irgend einen Winapi Befehl?

Gruß

Ralf

Verfasst: 10.09.2006 19:38
von MLK
keine lust jetzt näher darauf einzugehen, zu erklären oder den code noch mehr anzupassen, aber vielleicht hilfts:

Code: Alles auswählen

#LVM_GETSUBITEMRECT = #LVM_FIRST+$38

OpenWindow(0, 100, 300, 400, 200, "Listicon Scroll Test", #PB_Window_SystemMenu) 


If CreateGadgetList(WindowID(0)) 
  ListIconGadget(1, 1, 1, 300, 160, "Spalte0", 100, #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect | #PB_ListIcon_HeaderDragDrop) 
  
  AddGadgetColumn(1, 1, "Spalte1", 100) 
  AddGadgetColumn(1, 2, "Spalte2", 100) 
  AddGadgetColumn(1, 3, "Spalte3", 100) 
  
  AddGadgetItem(1, -1, "0:0" + Chr(10) + "0:1" + Chr(10) + "0:2" + Chr(10) + "0:3") 
  AddGadgetItem(1, -1, "1:0" + Chr(10) + "1:1" + Chr(10) + "1:2" + Chr(10) + "0:3") 
  AddGadgetItem(1, -1, "2:0" + Chr(10) + "2:1" + Chr(10) + "2:2" + Chr(10) + "0:3") 
  AddGadgetItem(1, -1, "3:0" + Chr(10) + "3:1" + Chr(10) + "3:2" + Chr(10) + "0:3") 
  AddGadgetItem(1, -1, "4:0" + Chr(10) + "4:1" + Chr(10) + "4:2" + Chr(10) + "0:3") 
  SendMessage_(GadgetID(1), #LVM_SCROLL, 110, 0) 
EndIf 

Repeat  
  EventID.l = WaitWindowEvent() 
  
  If GetAsyncKeyState_(#VK_RETURN)
    
    rec.RECT\left = #LVIR_BOUNDS
    SendMessage_(GadgetID(1), #LVM_GETSUBITEMRECT, 0, @rec)
    rec\right = rec\left + GetGadgetItemAttribute(1, #Null, #PB_ListIcon_ColumnWidth, 0) 
    GetClientRect_(GadgetID(1), @clientrec.RECT)
    If rec\left < 0 Or (rec\right-rec\left) >= clientrec\right
      SendMessage_(GadgetID(1), #LVM_SCROLL, rec\left-1-1, 0) 
    ElseIf rec\right > clientrec\right
      SendMessage_(GadgetID(1), #LVM_SCROLL, rec\right-clientrec\right, 0)
    EndIf
    
  EndIf 
Until EventID = #PB_Event_CloseWindow
ausführen und enter drücken

Verfasst: 10.09.2006 19:43
von vonTurnundTaxis
Wie wäre es einfach mit

Code: Alles auswählen

 SetGadgetState(1, 4)

Verfasst: 10.09.2006 19:49
von ts-soft
vonTurnundTaxis hat geschrieben:Wie wäre es einfach mit

Code: Alles auswählen

 SetGadgetState(1, 4)
Weil dadurch nicht erreicht wird, was gefragt wurde. Das Scrollen einer
Spalte in den sichtbaren Bereich, also nach rechts oder links, nicht rauf und
runter :lol: