;|ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ ;| Titel....: ListImageGadget ;| Datei....: ListImageGadget.pbi ;| Datum....: 14.09.2009 ;| Inhalt...: * ListGadget mit beliebig Großen Images ;|_____________________________________________________________________________ ; Vorrausgesetzte Includes ;ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ ; Konstanten ;ŻŻŻŻŻŻŻŻŻŻŻŻŻŻ ; Strukturen ;ŻŻŻŻŻŻŻŻŻŻŻŻŻŻ Structure ListImageGadgetItem Gadget.i State.i Text$ Image.i BackgroundImage.i BackgroundImageGadget.i ImageGadget.i EndStructure ; Arrays und LinkedLists ;ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ Global NewList ListImageGadgetItem.ListImageGadgetItem() ; Proceduren und Macros ;ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ Procedure ListImageGadget(Gadget, x, y, Width, Height) ScrollAreaGadget(Gadget, x, y, Width, Height, Width-30, 1) CloseGadgetList() SetGadgetColor(Gadget, #PB_Gadget_BackColor, $FFFFFF) EndProcedure Procedure AddListImageGadgetItem(Gadget, Position, Text$, Image) With ListImageGadgetItem() y = 0 ForEach ListImageGadgetItem() If \Gadget = Gadget y + GadgetHeight(\BackgroundImageGadget) EndIf Next AddElement(ListImageGadgetItem()) \Gadget = Gadget \State = #False \Text$ = Text$ \Image = Image \BackgroundImage = CreateImage(#PB_Any, GadgetWidth(Gadget)-32, ImageHeight(Image)+2) StartDrawing(ImageOutput(\BackgroundImage)) FillArea(0,0,-1,$FFFFFF) DrawAlphaImage(ImageID(\Image), 1, 1) DrawingMode(#PB_2DDrawing_Transparent) DrawingFont(GetGadgetFont(#PB_Default)) DrawText(ImageWidth(\Image)+6, (ImageHeight(\BackgroundImage)-TextHeight(\Text$))/2, \Text$, $000000) StopDrawing() SetGadgetAttribute(Gadget, #PB_ScrollArea_InnerHeight, y+ImageHeight(\BackgroundImage)+2) OpenGadgetList(Gadget) \BackgroundImageGadget = ImageGadget(#PB_Any, 1, y+1, ImageWidth(\BackgroundImage), ImageHeight(\BackgroundImage), ImageID(\BackgroundImage)) CloseGadgetList() EndWith EndProcedure Procedure SetListImageGadgetItem(*ListImageGadgetItem.ListImageGadgetItem, State) With *ListImageGadgetItem If State StartDrawing(ImageOutput(\BackgroundImage)) Box(0,0,ImageWidth(\BackgroundImage),ImageHeight(\BackgroundImage),$800000) DrawAlphaImage(ImageID(\Image), 1, 1) DrawingMode(#PB_2DDrawing_Transparent) DrawingFont(GetGadgetFont(#PB_Default)) DrawText(ImageWidth(\Image)+3, y+(ImageHeight(\BackgroundImage)-TextHeight(\Text$))/2, \Text$, $FFFFFF) StopDrawing() Else StartDrawing(ImageOutput(\BackgroundImage)) Box(0,0,ImageWidth(\BackgroundImage),ImageHeight(\BackgroundImage),$FFFFFF) DrawAlphaImage(ImageID(\Image), 1, 1) DrawingMode(#PB_2DDrawing_Transparent) DrawingFont(GetGadgetFont(#PB_Default)) DrawText(ImageWidth(\Image)+3, y+(ImageHeight(\BackgroundImage)-TextHeight(\Text$))/2, \Text$, $000000) StopDrawing() EndIf SetGadgetState(\BackgroundImageGadget, ImageID(\BackgroundImage)) \State = State EndWith EndProcedure Procedure GetListImageGadgetState(Gadget) Protected Index ForEach ListImageGadgetItem() If ListImageGadgetItem()\Gadget = Gadget If ListImageGadgetItem()\State ProcedureReturn Index Break EndIf Index + 1 EndIf Next EndProcedure Procedure.s GetListImageGadgetText(Gadget) ForEach ListImageGadgetItem() If ListImageGadgetItem()\Gadget = Gadget If ListImageGadgetItem()\State ProcedureReturn ListImageGadgetItem()\Text$ Break EndIf EndIf Next EndProcedure Procedure SetListImageGadgetState(Gadget, State) Protected Index ForEach ListImageGadgetItem() If ListImageGadgetItem()\Gadget = Gadget If ListImageGadgetItem()\State SetListImageGadgetItem(ListImageGadgetItem(), #False) EndIf If Index = State SetListImageGadgetItem(ListImageGadgetItem(), #True) EndIf Index + 1 EndIf Next EndProcedure Procedure ListImageGadgetCallback(WindowID, Message, wParam, lParam) Protected *ListImageGadgetItem.ListImageGadgetItem With ListImageGadgetItem() If Message = 273 ForEach ListImageGadgetItem() If GadgetID(\BackgroundImageGadget) = lParam Gadget = \Gadget SetListImageGadgetItem(ListImageGadgetItem(), #True) SetActiveGadget(\Gadget) Break ElseIf GadgetID(\Gadget) = lParam SetActiveGadget(\Gadget) EndIf Next If IsGadget(Gadget) ForEach ListImageGadgetItem() If \Gadget = Gadget And \State = #True And GadgetID(\BackgroundImageGadget) <> lParam SetListImageGadgetItem(ListImageGadgetItem(), #False) EndIf Next EndIf ElseIf Message = 256 Select wParam Case 38 If LastElement(ListImageGadgetItem()) Repeat If GetActiveGadget() = \Gadget And \State = #True *ListImageGadgetItem = @ListImageGadgetItem() While PreviousElement(ListImageGadgetItem()) If \Gadget = *ListImageGadgetItem\Gadget SetListImageGadgetItem(*ListImageGadgetItem, #False) SetListImageGadgetItem(ListImageGadgetItem(), #True) If GetGadgetAttribute(\Gadget, #PB_ScrollArea_Y) > GadgetY(\BackgroundImageGadget)-1 SetGadgetAttribute(\Gadget, #PB_ScrollArea_Y, GadgetY(\BackgroundImageGadget)-1) EndIf Break EndIf Wend Break EndIf Until Not PreviousElement(ListImageGadgetItem()) EndIf Case 40 If FirstElement(ListImageGadgetItem()) Repeat If GetActiveGadget() = \Gadget And \State = #True *ListImageGadgetItem = @ListImageGadgetItem() While NextElement(ListImageGadgetItem()) If \Gadget = *ListImageGadgetItem\Gadget SetListImageGadgetItem(*ListImageGadgetItem, #False) SetListImageGadgetItem(ListImageGadgetItem(), #True) If GetGadgetAttribute(\Gadget, #PB_ScrollArea_Y) < GadgetY(\BackgroundImageGadget)+GadgetHeight(\BackgroundImageGadget)-GadgetHeight(\Gadget)+5 SetGadgetAttribute(\Gadget, #PB_ScrollArea_Y, GadgetY(\BackgroundImageGadget)+GadgetHeight(\BackgroundImageGadget)-GadgetHeight(\Gadget)+5) EndIf Break EndIf Wend Break EndIf Until Not NextElement(ListImageGadgetItem()) EndIf EndSelect EndIf EndWith ProcedureReturn #PB_ProcessPureBasicEvents EndProcedure SetWindowCallback(@ListImageGadgetCallback()) ; ################################################################ ; ################################################################ ; ################################################################ ; ################################################################ ; ################################################################ OpenWindow(0, 0, 0, 600, 400, "Fenster", #PB_Window_SystemMenu|#PB_Window_ScreenCentered) ListImageGadget(1, 10, 10, 280, 380) ListImageGadget(2, 310, 10, 280, 380) For n = 1 To 20 AddListImageGadgetItem(1, -1, Str(Random(999999)), CreateImage(#PB_Any, Random(80)+20, Random(40)+20)) AddListImageGadgetItem(2, -1, Str(Random(999999)), CreateImage(#PB_Any, Random(80)+20, Random(40)+20)) Next Repeat Event = WaitWindowEvent() Select Event Case #PB_Event_CloseWindow End Case #PB_Event_Gadget Select EventGadget() Case 0 EndSelect Case #PB_Event_Menu Select EventMenu() Case 0 EndSelect EndSelect ForEver ; IDE Options = PureBasic 4.40 Beta 2 (Windows - x86) ; CursorPosition = 290 ; FirstLine = 231