Listicon, zur Spalte Scrollen

Für allgemeine Fragen zur Programmierung mit PureBasic.
hawk009
Beiträge: 7
Registriert: 31.12.2005 20:02

Listicon, zur Spalte Scrollen

Beitrag 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
Benutzeravatar
winduff
Beiträge: 879
Registriert: 10.02.2006 21:05
Wohnort: Gießen
Kontaktdaten:

Beitrag von winduff »

alkohol + dein code + deine erklärung = 0 :twisted:

Ähm verstehe nicht ganz was du meinst, sorry
Bild
AND51 hat geschrieben:...und ich würde dein Programm aus Wut zwei mal installieren, um eines genüsslicher löschen zu können, als das andere...
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
hawk009
Beiträge: 7
Registriert: 31.12.2005 20:02

Beitrag von hawk009 »

Hi!

Die Position errechne ich schon anhand der Spaltenbreiten.

Danke für den Tip.

Gruß

Ralf
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
hawk009
Beiträge: 7
Registriert: 31.12.2005 20:02

Beitrag 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
Benutzeravatar
MLK
Beiträge: 267
Registriert: 01.11.2004 13:17
Wohnort: Hamburg

Beitrag 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
Constant not found: #vk_shit
Benutzeravatar
vonTurnundTaxis
Beiträge: 2130
Registriert: 06.10.2004 20:38
Wohnort: Bayreuth
Kontaktdaten:

Beitrag von vonTurnundTaxis »

Wie wäre es einfach mit

Code: Alles auswählen

 SetGadgetState(1, 4)
Nicht durch Zorn, sondern durch Lachen tötet man
ClipGrab | Pastor - jetzt mit kurzen URLs!
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten