Erweiterte Items [X]
Moin.
Ich würde es ganz einfach über Images lösen. Jedes Item ist ein Image, was vorher im Hintergrund generiert wird. Da kann man auch gerne gleich zwei machen (für den Klick/Auswahl Effekt). Diese Images kommen auf Imagegadgets in ein ScrollAreaGadget(). Fertig.
Geht super, weil ja auch Imagegadgets die Events von PureBasic empfangen. Und über einfache Routinen bekommt man zur Not aus raus, auf welchen Pixel in der Grafik geklickt wurde (für Buttons und so).
Morty
Ich würde es ganz einfach über Images lösen. Jedes Item ist ein Image, was vorher im Hintergrund generiert wird. Da kann man auch gerne gleich zwei machen (für den Klick/Auswahl Effekt). Diese Images kommen auf Imagegadgets in ein ScrollAreaGadget(). Fertig.
Geht super, weil ja auch Imagegadgets die Events von PureBasic empfangen. Und über einfache Routinen bekommt man zur Not aus raus, auf welchen Pixel in der Grafik geklickt wurde (für Buttons und so).
Morty
@RSBasic:
mh, wieso nicht mit PB-Boardmitteln? Oder habe ich das was falsch verstanden?
So mal auf die Schnelle zusammengetackert:
Grüße ... Kiffi
// Edit: Das Flackern sollte man auch einfach in den Griff bekommen...
mh, wieso nicht mit PB-Boardmitteln? Oder habe ich das was falsch verstanden?
So mal auf die Schnelle zusammengetackert:
Code: Alles auswählen
Enumeration
#Window
#ScrollAreaGadget
EndEnumeration
Structure s_Item
ContainerGadget.l
TextGadget.l
ProgressBarGadget.l
EndStructure
NewList Item.s_Item()
OpenWindow(#Window, #PB_Ignore, #PB_Ignore, 300, 600, "")
CreateGadgetList(WindowID(#Window))
ScrollAreaGadget(#ScrollAreaGadget, 5, 5, WindowWidth(#Window) - 10, WindowHeight(#Window) - 10, WindowWidth(#Window) - 30, 0, 100, #PB_ScrollArea_Single)
ContainerGadgetHeight= 60
For i = 0 To 20
AddElement(Item())
Item()\ContainerGadget = ContainerGadget(#PB_Any, 0, NewY, 200, ContainerGadgetHeight, #PB_Container_Single)
SetGadgetColor(Item()\ContainerGadget, #PB_Gadget_BackColor, #White)
Item()\TextGadget = TextGadget(#PB_Any, 5, 5, 50, 20, "Item " + Str(i))
SetGadgetColor(Item()\TextGadget, #PB_Gadget_BackColor, #White)
Item()\ProgressBarGadget = ProgressBarGadget(#PB_Any, 5, 30, 150, 20, 0, 100, #PB_ProgressBar_Smooth)
CloseGadgetList() ; ContainerGadget
NewY + ContainerGadgetHeight
Next
CloseGadgetList() ; ScrollAreaGadget
SetGadgetAttribute(#ScrollAreaGadget, #PB_ScrollArea_InnerHeight, NewY)
Repeat
; nur zu Demozwecken ein wenig Action:
WWE=WaitWindowEvent(10)
SelectElement(Item(), Random(20))
SetGadgetState(Item()\ProgressBarGadget, GetGadgetState(Item()\ProgressBarGadget) + 1)
If GetGadgetState(Item()\ProgressBarGadget) = 100
SetGadgetState(Item()\ProgressBarGadget, 0)
EndIf
Until WWE = #PB_Event_CloseWindow// Edit: Das Flackern sollte man auch einfach in den Griff bekommen...
a²+b²=mc²
gute lösung das mit einer ScrollArea zu machen, PS. bei mir fackert nix 
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
@Morty
Mal schaun...
@Kiffi
Und das Resizen?
Wenn man 100-200 solche Gadgets erstellt, dann ruckelt es beim Resizen.
Ein einfaches Beispiel:
Mal schaun...
@Kiffi
Und das Resizen?
Wenn man 100-200 solche Gadgets erstellt, dann ruckelt es beim Resizen.
Ein einfaches Beispiel:
Code: Alles auswählen
If OpenWindow(0,0,0,1000,500,"No Name",#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(0))
ScrollAreaGadget(1,10,10,WindowWidth(0)-20,WindowHeight(0)-20,WindowWidth(0)-41,15000,10,0)
For a=100 To 3090 Step 10
ContainerGadget(a,0,Hoehe,WindowWidth(0)-41,50,#PB_Container_Raised)
ButtonGadget(a+4,WindowWidth(0)-210,5,32,32,"",0)
ButtonGadget(a+5,WindowWidth(0)-170,5,32,32,"",0)
ButtonGadget(a+6,WindowWidth(0)-130,5,32,32,"",0)
ButtonGadget(a+7,WindowWidth(0)-90,5,32,32,"",0)
CloseGadgetList()
Hoehe+50
b+1
Next
CloseGadgetList()
ShowScrollBar_(GadgetID(1),#SB_VERT,#True)
EndIf
Repeat
EventID=WaitWindowEvent()
If EventID=#PB_Event_SizeWindow
SetGadgetAttribute(1,#PB_ScrollArea_InnerWidth,WindowWidth(0)-41)
ResizeGadget(1,#PB_Ignore,#PB_Ignore,WindowWidth(0)-20,WindowHeight(0)-20)
For c=100 To 3090 Step 10
If IsGadget(c)
ResizeGadget(c,#PB_Ignore,#PB_Ignore,WindowWidth(0)-41,#PB_Ignore)
ResizeGadget(c+4,WindowWidth(0)-210,#PB_Ignore,#PB_Ignore,#PB_Ignore)
ResizeGadget(c+5,WindowWidth(0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore)
ResizeGadget(c+6,WindowWidth(0)-130,#PB_Ignore,#PB_Ignore,#PB_Ignore)
ResizeGadget(c+7,WindowWidth(0)-90,#PB_Ignore,#PB_Ignore,#PB_Ignore)
EndIf
Next
EndIf
If EventID = #PB_Event_CloseWindow
Quit=1
EndIf
Until Quit=1
EndIf
- Falko
- Admin
- Beiträge: 3535
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit) - Kontaktdaten:
Probier das mal bei dir so mal aus. Mein Rechner ist zu schnell dafür
Gruß Falko
Code: Alles auswählen
Repeat
EventID=WaitWindowEvent()
If EventID=#PB_Event_SizeWindow
SetGadgetAttribute(1,#PB_ScrollArea_InnerWidth,WindowWidth(0)-41)
ResizeGadget(1,#PB_Ignore,#PB_Ignore,WindowWidth(0)-20,WindowHeight(0)-20)
If EventID=#PB_Event_SizeWindow
For c=100 To 3090 Step 10
If IsGadget(c)
ResizeGadget(c,#PB_Ignore,#PB_Ignore,WindowWidth(0)-41,#PB_Ignore)
ResizeGadget(c+4,WindowWidth(0)-210,#PB_Ignore,#PB_Ignore,#PB_Ignore)
ResizeGadget(c+5,WindowWidth(0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore)
ResizeGadget(c+6,WindowWidth(0)-130,#PB_Ignore,#PB_Ignore,#PB_Ignore)
ResizeGadget(c+7,WindowWidth(0)-90,#PB_Ignore,#PB_Ignore,#PB_Ignore)
EndIf
Next
EndIf
EndIf
If EventID = #PB_Event_CloseWindow
Quit=1
EndIf
Until Quit=1
EndIf- 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
ListView in PB = ListBox in APIRSBasic hat geschrieben:Was ist mit...
#CB_SETITEMHEIGHT
#LB_SETITEMHEIGHT
Kann man die fürs Listview benutzen?
\\Edit:
Sorry, nicht beachtet:
LB=ListBox
CB=ComboBox
ListIcon in PB = ListView in API
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

@Thomas
Ah okay
Ich habs mal rasch ausprobiert...
Aber ist wohl klar, dass das nicht funktioniert
Ich guck mal auf der MSDN-Site...(vielleicht finde ich da was (was ich stark bezweifle)
\\Edit:
Failed
Ah okay
Ich habs mal rasch ausprobiert...
Code: Alles auswählen
SendMessage_(GadgetID(1),#LB_SETITEMHEIGHT,50,0)
Ich guck mal auf der MSDN-Site...(vielleicht finde ich da was (was ich stark bezweifle)
\\Edit:
Failed
- Falko
- Admin
- Beiträge: 3535
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit) - Kontaktdaten:
Das funktioniert so wohl am besten
Sorry, ich musste mich mit dem WindowsCallback anfreunden
Sorry, ich musste mich mit dem WindowsCallback anfreunden
Code: Alles auswählen
Procedure MyWindowCallback(hWnd,uMsg,wParam,lParam)
If uMsg=#WM_EXITSIZEMOVE
ResizeGadget(1,#PB_Ignore,#PB_Ignore,WindowWidth(0)-20,WindowHeight(0)-20)
For c=100 To 3090 Step 10
; If IsGadget(c)
ResizeGadget(c,#PB_Ignore,#PB_Ignore,WindowWidth(0)-41,#PB_Ignore)
ResizeGadget(c+4,WindowWidth(0)-210,#PB_Ignore,#PB_Ignore,#PB_Ignore)
ResizeGadget(c+5,WindowWidth(0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore)
ResizeGadget(c+6,WindowWidth(0)-130,#PB_Ignore,#PB_Ignore,#PB_Ignore)
ResizeGadget(c+7,WindowWidth(0)-90,#PB_Ignore,#PB_Ignore,#PB_Ignore)
; EndIf
Next
EndIf
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
If OpenWindow(0,0,0,1000,500,"No Name",#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(0))
ScrollAreaGadget(1,10,10,WindowWidth(0)-20,WindowHeight(0)-20,WindowWidth(0)-41,15000,10,0)
For a=100 To 3090 Step 10
ContainerGadget(a,0,Hoehe,WindowWidth(0)-41,50,#PB_Container_Raised)
ButtonGadget(a+4,WindowWidth(0)-210,5,32,32,"",0)
ButtonGadget(a+5,WindowWidth(0)-170,5,32,32,"",0)
ButtonGadget(a+6,WindowWidth(0)-130,5,32,32,"",0)
ButtonGadget(a+7,WindowWidth(0)-90,5,32,32,"",0)
CloseGadgetList()
Hoehe+50
b+1
Next
CloseGadgetList()
ShowScrollBar_(GadgetID(1),#SB_VERT,#True)
SetGadgetAttribute(1,#PB_ScrollArea_InnerWidth,WindowWidth(0)-41)
EndIf
SetWindowCallback(@MyWindowCallback())
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIfGruß, FalkoFür das Maximieren und Minimieren müsstest du dich mit der uMessage-Konstante #WM_SIZE und den wParametern:
#SIZE_MAXHIDE Message is sent to all pop-up windows when some other window is maximized.
#SIZE_MAXIMIZED Window has been maximized.
#SIZE_MAXSHOW Message is sent to all pop-up windows when some other window has been restored to its former size.
#SIZE_MINIMIZED Window has been minimized.
#SIZE_RESTORE
auseinander setzen.



