thanks for taking a look
I can change the loadimage commands if you want to run the program for yourself
instead of creating a window, I tried to create a gadget scroller that had a list of gadgets - like a list of buttons and textboxes
I can change the loadimage commands if you want to run the program for yourself
instead of creating a window, I tried to create a gadget scroller that had a list of gadgets - like a list of buttons and textboxes
Strict SeedRnd(MilliSecs()) SetGraphicsDriver D3D7Max2DDriver () Graphics 640 , 480 Local checktime Local fpscounter Local curTime Local curfps Local time gui_type.init_gui() Local t:textbox=textbox.Create() Local b:button=button.Create(150,50,100,40,"Request") Local g:gadget_scroller=gadget_scroller.Create(0 , 0 , 120 , 200) g.add_gadget(b) Global mouse_hit1 Global mouse_x Global mouse_y While Not KeyHit(KEY_ESCAPE) Delay(1) SetViewport(0 , 0 , GraphicsWidth() , GraphicsHeight() ) Cls time = MilliSecs() mouse_hit1=MouseHit(1) mouse_x = MouseX() mouse_y=MouseY() curtime=time If curTime > checkTime Then checkTime = curTime + 1000 curFPS= fpscounter fpscounter = 0 Else fpscounter = fpscounter + 1 End If Local argh$=String(curfps) SetColor 255 , 255 , 255 DrawText "FPS: " + curfps, 10, 10 For Local t:gui_element = EachIn gui_element.list t.update(mouse_hit1 , mouse_x , mouse_y) t.render() Next Flip False Wend Type gui_type Field up_arrow:Timage Field down_arrow:Timage Field window_img:Timage Field button_img:Timage Field button_over_img:Timage Global gui_pointer:gui_type Function init_gui() gui_pointer:gui_type=New gui_type gui_pointer.down_arrow=LoadImage("downarrow.png") gui_pointer.window_img = LoadImage("window.png") gui_pointer.button_img = LoadImage("button.png") gui_pointer.button_over_img=LoadImage("buttonpressed.png") EndFunction EndType Type gui_element Field x Field y Field width:Float Field height:Float Field mouse_over Field gadget_number 'for gadget scroller Global list:TList = New TList Method After:Object() Local link:TLink = list.FindLink(Self).NextLink() If link Return Object(link.Value()) Else Return Null EndIf EndMethod Method Before:Object() Local link:TLink = list.FindLink(Self).PrevLink() If link Return Object(link.Value()) Else Return Null EndIf EndMethod Method New() list.addlast(Self) EndMethod Method update(mouse_hit1,mouse_X,mouse_y) If detect_mouse_over(mouse_x,mouse_y) mouse_over = True Else mouse_over=False EndIf EndMethod Method detect_mouse_over(mouse_X,Mouse_Y) If Mouse_X > x If Mouse_X < (x + width) If Mouse_Y > y If Mouse_Y < (y + height) Return True EndIf EndIf EndIf EndIf EndMethod Method render() EndMethod EndType Type button Extends gui_element Field text$ Global img:timage Global img2:timage Field pressed_timer Function Create:button(x , y , width:Float , height:Float , text$) Local t:button=New button t.x = x t.y = y t.width = width t.height = height t.text = text If img = Null img=gui_type.gui_pointer.button_img img2=gui_type.gui_pointer.button_over_img EndIf EndFunction Method update(mouse_hit1,mouse_x,mouse_y) Super.update(mouse_hit1,mouse_x,mouse_y) If mouse_hit1 If mouse_over = True DebugLog Self.text EndIf EndIf EndMethod Method render() SetColor(255,255,255) SetScale (Self.width / ImageWidth(img) , height / ImageHeight(img)) If mouse_over=True And mouse_hit1=True pressed_timer=MilliSecs() EndIf If pressed_timer+300>MilliSecs() DrawImage img2 , x , y Else DrawImage img,x,y EndIf SetScale(1 , 1) If mouse_over=False SetColor (0 , 0 , 0) Else SetColor (170,0,0) EndIf Local draw_x=(x+(width/2))-(TextWidth(text)/2) Local draw_y=(y+(height/2))-(TextHeight(text)/2) DrawText text,draw_x,draw_y SetColor(255 , 255 , 255) EndMethod EndType Type textbox Extends gui_element Field lines$[400] Field current_line Global img Global list:TList=New TList Function Create:textbox() Local t:textbox=New textbox t.x = 500 t.y = 0 t.width = 150 t.height = 150 t.lines[0] = "Help an ogre" t.lines[1] = "Just hit me" t.lines[2] = "over the head" t.current_line=0 list.addlast(t) Return t End Function Method render() SetColor 255,255,255 'SetViewport viewport_x , viewport_Y , viewport_width , viewport_height SetScale (width/128,height/128) 'DrawRect viewport_x,viewport_y,viewport_width,viewport_height DrawImage gui_type.gui_pointer.window_img,x,y SetScale(1,1) SetColor 0 , 0 ,0 Local line_position=0 For Local iter = Self.current_line To lines.length-1 If lines[iter]<>"" DrawText lines[iter],x+5,y+(line_position*15)+5 line_position=line_position+1 EndIf Next SetColor 255,255,255 SetScale (0.5,0.5) DrawImage gui_type.gui_pointer.down_arrow,x+width-29,y+height-58 SetRotation (180) DrawImage gui_type.gui_pointer.down_arrow,x+width,y+29 SetRotation (0) SetScale (1,1) EndMethod EndType Type gadget_scroller Extends gui_element Field current_gadget:Object Field gadget_list:TList Field virtual_height Method add_gadget(o:gui_element) gui_element.list.remove(o) gadget_list.addlast(o) o.gadget_number=gadget_list.count() EndMethod Function Create:gadget_scroller(x,y,width,height) Local o:gadget_scroller = New gadget_scroller o.gadget_list = New TList Return o EndFunction Method render() For Local o:gui_element = EachIn gadget_list DebugLog "found gadget on list" If o = Self.current_gadget SetViewport (x , y , width , height) DebugLog "arg" o.render Exit EndIf Next SetViewport(0,0,GraphicsWidth(),GraphicsHeight()) EndMethod Method update(mouse_hit1,mouse_X,mouse_y) EndMethod EndType