Je veut que la souris dépasse le Screen de 650x600 pour aller dans celle de 800x600 pour les gadgets. Voici le code:
Code : Tout sélectionner
;/Allas
 
;{/ Variable
  #TailleMapX  = 100
  #TailleMapY  = 100
  #TailleTileX = 64
  #TailleTileY = 32
  #MiniMapX = 11
  #MiniMapY = (800-150)+11
  #Window_Main = 0
  #LeftOffset = 150 
  #TopOffset  = 0
  ;}
  
;/ Variable Windows  
  
  Enumeration
    #Window_Tools
    #StatusBar_0
  EndEnumeration  
  
;/ Variable Images+Gadgets 
  
Enumeration 
    #Selector
    #Cursor
    #MiniMap  
    #Grass1
    #Grass2
    #Grass3
    #Grass4
    #Grass5
    #Grass6
    #Grass7
    #Grass8
    #Grass9
    #Grass10
    #Grass11
    #Grass12
    #Grass13
    #Grass14
    #Grass15
    #Grass16
    #Grass17
    #Grass18
    #Grass19
    #Grass20
    #Grass21
    #Grass22
    #Grass23
    #Grass24
    #Grass25
    #Grass26
    #Grass27
    #Grass28
    #Grass29
    #Grass30
    #Grass31
    #Grass32
    #Grass33
    #Grass34
    #Grass35
    #Grass36
    #Grass37
    #Grass38
    #Grass39
    #Grass40
    #Grass41
    #Grass42
    #Grass43
    #Grass44
    #Grass45
    #Grass46
    #Road1
    #Road2
    #Road3
    #Road4
    #Road5
    #Road6
    #Road7
    #Road8
    #Road9
    #Road10
    #Road11
    #Bloc_Petrol
    #Water_0 
    #Forest
    #Coast_0
    #Coast_1
    #Coast_2
    #Coast_3
    #Building
    #GUI_MiniMap
    #GUI_MiniMap_Aera
    #GUI_Commander
  EndEnumeration
  
;/ Variable Events
  
  Enumeration
    #Menu
    #Menu_2
    #Reprendre
    #Minimize 
    #Maximize 
    #Close 
  EndEnumeration
  
;/ Structure
  
  Structure World
    x.l
    Y.l
    type.l
  EndStructure
  
  InitSprite() 
  InitKeyboard()
  InitMouse()  
  
;{/ Declare
  Declare CreateMapIsometric(Taille_Map_X.l,Taille_Map_Y.l,TileType.l)
  Declare UpdateMap()
  Declare ControlInput()
  Declare MakeMiniMap()
  Declare UpdateMiniMap(x,Y)
  Declare Coast_Auto(x,Y)
  Declare Menu() 
  Declare Ouvre_Fenetre_principale() 
  UsePNGImageDecoder()
  Global Dim Map.World(#TailleMapX,#TailleMapY)
  ;} 
;/ Ouvres Fenetres
  
  Ouvre_Fenetre_principale()
  OpenWindowedScreen(WindowID(#Window_Main),150,0, 650, 600,1,0,0)
  TransparentSpriteColor(-1,RGB(255,0,255)) 
  
;{/ LoadImages
  
  IncludePath  "C:\Program Files\Be_War\"
  
  LoadSprite(#Selector,"Gfx\Selector.bmp")
  LoadSprite(#Cursor,"Gfx\Cursor.bmp")
  LoadSprite(#Grass1,"Gfx\Grass2\02A20.bmp")
  LoadSprite(#Grass2,"Gfx\Grass2\02A24.bmp")
  LoadSprite(#Grass3,"Gfx\Grass2\02A30.bmp")
  LoadSprite(#Grass4,"Gfx\Grass2\02A34.bmp")
  LoadSprite(#Grass5,"Gfx\Grass2\02A40.bmp")
  LoadSprite(#Grass6,"Gfx\Grass2\02A41.bmp")
  LoadSprite(#Grass7,"Gfx\Grass2\02A42.bmp")
  LoadSprite(#Grass8,"Gfx\Grass2\02A43.bmp")
  LoadSprite(#Grass9,"Gfx\Grass2\02A44.bmp")
  LoadSprite(#Grass10,"Gfx\Grass2\02b20.bmp")
  LoadSprite(#Grass11,"Gfx\Grass2\02b24.bmp")
  LoadSprite(#Grass12,"Gfx\Grass2\02b30.bmp")
  LoadSprite(#Grass13,"Gfx\Grass2\02b34.bmp")
  LoadSprite(#Grass14,"Gfx\Grass2\02b40.bmp")
  LoadSprite(#Grass15,"Gfx\Grass2\02b41.bmp")
  LoadSprite(#Grass16,"Gfx\Grass2\02b42.bmp")
  LoadSprite(#Grass17,"Gfx\Grass2\02b43.bmp")
  LoadSprite(#Grass18,"Gfx\Grass2\02b44.bmp")
  LoadSprite(#Grass19,"Gfx\Grass2\03A20.bmp")
  LoadSprite(#Grass19,"Gfx\Grass2\03A30.bmp")
  LoadSprite(#Grass20,"Gfx\Grass2\03A40.bmp")
  LoadSprite(#Grass21,"Gfx\Grass2\03A41.bmp")
  LoadSprite(#Grass22,"Gfx\Grass2\03A42.bmp")
  LoadSprite(#Grass23,"Gfx\Grass2\03b20.bmp")
  LoadSprite(#Grass24,"Gfx\Grass2\03b24.bmp")
  LoadSprite(#Grass25,"Gfx\Grass2\03b30.bmp")
  LoadSprite(#Grass26,"Gfx\Grass2\03b34.bmp")
  LoadSprite(#Grass27,"Gfx\Grass2\03b40.bmp")
  LoadSprite(#Grass28,"Gfx\Grass2\03b41.bmp")
  LoadSprite(#Grass29,"Gfx\Grass2\03b42.bmp")
  LoadSprite(#Grass30,"Gfx\Grass2\03b43.bmp")
  LoadSprite(#Grass31,"Gfx\Grass2\04a20.bmp")
  LoadSprite(#Grass32,"Gfx\Grass2\04a30.bmp")
  LoadSprite(#Grass33,"Gfx\Grass2\04a40.bmp")
  LoadSprite(#Grass34,"Gfx\Grass2\04a41.bmp")
  LoadSprite(#Grass35,"Gfx\Grass2\04a42.bmp")
  LoadSprite(#Grass37,"Gfx\Grass2\04b30.bmp")
  LoadSprite(#Grass38,"Gfx\Grass2\04b40.bmp")
  LoadSprite(#Grass39,"Gfx\Grass2\04b41.bmp")
  LoadSprite(#Grass40,"Gfx\Grass2\04b42.bmp")
  LoadSprite(#Grass41,"Gfx\Grass2\14a20.bmp")
  LoadSprite(#Grass42,"Gfx\Grass2\14a30.bmp")
  LoadSprite(#Grass43,"Gfx\Grass2\14a40.bmp")
  LoadSprite(#Grass44,"Gfx\Grass2\14a41.bmp")
  LoadSprite(#Grass45,"Gfx\Grass2\14a42.bmp")
  LoadSprite(#Grass46,"Gfx\Test\02A20.bmp")
  LoadSprite(#Bloc_Petrol,"Gfx\Petrol.bmp")
  LoadSprite(#Building,"Gfx\Building.bmp")
  LoadSprite(#Road1,"Gfx\Road1.bmp")
  LoadSprite(#Road2,"Gfx\Road2.bmp")
  LoadSprite(#Road3,"Gfx\Road3.bmp")
  LoadSprite(#Road4,"Gfx\Road4.bmp")
  LoadSprite(#Road5,"Gfx\Road5.bmp")
  LoadSprite(#Road6,"Gfx\Road6.bmp")
  LoadSprite(#Road7,"Gfx\Road7.bmp")
  LoadSprite(#Road8,"Gfx\Road8.bmp")
  LoadSprite(#Road9,"Gfx\Road9.bmp")
  LoadSprite(#Road10,"Gfx\Road10.bmp")
  LoadSprite(#Road11,"Gfx\Road11.bmp")
  LoadSprite(#Coast_0,"Gfx\Coast_0.png")
  LoadSprite(#Coast_1,"Gfx\Coast_1.png")
  LoadSprite(#Coast_2,"Gfx\Coast_2.png")
  LoadSprite(#Coast_3,"Gfx\Coast_3.png")
  LoadSprite(#Water_0,"Gfx\Water_0.png") 
  LoadSprite(#Forest,"Gfx\Forest1.bmp")
  LoadSprite(#GUI_MiniMap,"Gfx\GUI\Minimap_Support.bmp")
  LoadSprite(#GUI_Commander,"Gfx\Gui\Command.bmp")
  ;}
  
;{/ Global
Global ScreenWidth.l  : ScreenWidth  = 800
Global ScreenHeight.l : ScreenHeight = 600
Global ScrollX.l , ScrollY.l
Global EchX.f,EchY.f,PixelX.l,PixelY.l,color.l,Update_MiniMap.l
Global MMAeraX.l
Global MMAeraY.l
Global type.l,Taille.l : Taille=2
;}
Procedure Ouvre_Fenetre_principale() 
  If OpenWindow ( #Window_Main , ScreenWidth, ScreenHeight, 800, 600, "Be_War Editor" ,#PB_Window_SizeGadget | #PB_Window_SystemMenu) 
    If CreateGadgetList ( WindowID ( #Window_Main )) 
      ;/ Boutons
      LoadImage(#Menu,"Gfx\Gui\Menu.bmp")
      ButtonImageGadget(#Menu, 25, 20, 100, 32, ImageID(#Menu))
      EndIf 
    EndIf 
  EndProcedure
Procedure Menu()
  
  Repeat 
    Event = WaitWindowEvent () 
    If Event = #PB_Event_Gadget 
      Select EventGadget ()  
        Case #Menu
        Case #Menu
          LoadImage(#Menu_2,"Gfx\Gui\Menu_2.bmp")
          ImageGadget(#Menu_2, 310, 140, 330, 300, ImageID(#Menu_2))
          LoadImage(#Reprendre,"Gfx\GUI\Reprendre.bmp")
          ButtonImageGadget(#Reprendre, 360, 170, 230, 40, ImageID(#Reprendre)) 
          LoadImage(#Minimize,"Gfx\Gui\Minimizer.bmp")
          ButtonImageGadget(#Minimize, 360, 240, 230, 40, ImageID(#Minimize))
          LoadImage(#Maximize,"Gfx\GUI\Maximizer.bmp")
          ButtonImageGadget(#Maximize, 360, 310, 230, 40, ImageID(#Maximize))
          LoadImage(#Close  ,"Gfx\Gui\Close.bmp")
          ButtonImageGadget(#Close, 360, 380, 230, 40,ImageID(#Close))
          
            WaitWindowEvent ()
            DisableGadget(#Menu_2, #True)
          Case #Reprendre
            
            FreeGadget(#Reprendre)
            FreeGadget(#Menu_2)
            FreeGadget(#Maximize)
            FreeGadget(#Minimize)
            FreeGadget(#Close) 
            
          Case #Minimize 
            ShowWindow_(WindowID(#Window_Main), #SW_MINIMIZE) 
            
          Case #Maximize 
            If IsZoomed_(WindowID(#Window_Main)) 
              ShowWindow_(WindowID(#Window_Main), #SW_RESTORE) 
            Else 
              ShowWindow_(WindowID(#Window_Main), #SW_MAXIMIZE) 
            EndIf 
            
          Case #Close
            Event = #PB_Event_CloseWindow 
        EndSelect
      EndIf 
        Until Event = #PB_Event_CloseWindow 
  
EndProcedure 
Procedure UpdateMiniMap(x,Y)
  
  
  StartDrawing(ImageOutput(#MiniMap))
  
  
  
  PixelX = x / EchX
  PixelY = Y / EchY
  
  If Map(x,Y)\type=#Grass1
    color = RGB(55, 118, 62)
  ElseIf Map(x,Y)\type=#Grass2
    color = RGB(46, 98, 52)
  ElseIf Map(x,Y)\type=#Grass3
    color = RGB(43, 91, 48)
  ElseIf Map(x,Y)\type=#Grass4
    color = $56A24C
  ElseIf Map(x,Y)\type=#Grass5
    color = RGB(69, 147, 78)
  ElseIf Map(x,Y)\type=#Grass6
    color = RGB(77, 164, 87)
  EndIf
  
  If Map(x,Y)\type=#Bloc_Petrol
    color = RGB(255, 255, 10)
  EndIf
  
  If Map(x,Y)\type=#Building
    color = RGB(0, 255, 87)
  EndIf
  
  If Map(x,Y)\type=#Forest
    color = RGB(48, 93, 45)
  EndIf
  
  If ((PixelX<128) And (PixelY<128)) 
    Plot(PixelX, PixelY, color)
    If EchX < 0.5 
      Plot(PixelX + 2, PixelY, color)
      Plot(PixelX + 1, PixelY, color)
    ElseIf EchX < 1 
      Plot(PixelX + 1, PixelY, color)
    EndIf
  EndIf
  
  
  StopDrawing()
  
EndProcedure
Procedure MakeMiniMap()
  
  Shared MMOffsetX.f,MMOffsetY.f
  Shared dx.l,dy.l,X1a.l,Y1a.l,X2a.l,Y2a.l,X3a.l,Y3a.l,X4a.l,Y4a.l
  
  MMOffsetX=64
  MMOffsetY=64
  
  If #TailleMapX=>128 And #TailleMapY => 128
    EchX = #TailleMapX / 128
    EchY = #TailleMapY / 128
  Else
    EchX = 1 
    EchY = 1
  EndIf
  
  
  CreateImage(#MiniMap,128,128)
  
  StartDrawing(ImageOutput(#MiniMap))
  
  
  For Y = 1 To #TailleMapY
    For x = 1 To #TailleMapX
      
      PixelX = x / EchX
      PixelY = Y / EchY
      
      If Map(x,Y)\type=#Grass1
        color = RGB(55,150, 62)
      ElseIf Map(x,Y)\type=#Grass2
        color = RGB(46, 98, 52)
      ElseIf Map(x,Y)\type=#Grass3
        color = RGB(43, 91, 48)
      ElseIf Map(x,Y)\type=#Grass4
        color = $56A24C
      ElseIf Map(x,Y)\type=#Grass5
        color = RGB(69, 147, 78)
      ElseIf Map(x,Y)\type=#Grass6
        color = RGB(77, 164, 87)
      EndIf
      
      
      
      
      If ((PixelX<128) And (PixelY<128)) 
  			Plot(PixelX, PixelY, color)
  			If EchX < 0.5 
        Plot(PixelX + 2, PixelY, color)
        Plot(PixelX + 1, PixelY, color)
  			ElseIf EchX < 1 
        Plot(PixelX + 1, PixelY, color)
  			EndIf
      EndIf
      
    Next x
  Next Y
  
  
  StopDrawing()
  
  
  CreateSprite(#GUI_MiniMap_Aera,128,128)
  StartDrawing(SpriteOutput(#GUI_MiniMap_Aera))
  Box(0,0,128,128,RGB(255,0,255))
  
  
  
  dx = Int(ScreenWidth/#TailleTileX)-1
  dy = Int(ScreenHeight/(#TailleTileY*2))-2
  
  
  X1a=MMOffsetX
  Y1a=MMOffsetY
  
  X2a=MMOffsetX + ((dx+dy)/EchX) 
  Y2a=MMOffsetY + ((dx+dy)/EchY)
  
  X3a=MMOffsetX + ((dx+dy)/EchX)/2
  Y3a=MMOffsetY - ((dx+dy)/EchY)/2
  
  X4a=MMOffsetX + (((dx+dy)/EchX)/2)*3 
  Y4a=MMOffsetY + ((dx+dy)/EchY)/2 
  
  
  
  LineXY(X1a,Y1a,X2a,Y2a,RGB(255,255,100))
  LineXY(X2a,Y2a,X4a,Y4a,RGB(255,255,100))
  LineXY(X4a,Y4a,X3a,Y3a,RGB(255,255,100))
  LineXY(X3a,Y3a,X1a,Y1a,RGB(255,255,100))
  
  
  StopDrawing()
  
  
  
EndProcedure
Procedure ControlInput()
  ; Gestion Basique du scrolling.
  
  
  If KeyboardPushed(#PB_Key_Left)
    ScrollX-20
  EndIf
  
  If KeyboardPushed(#PB_Key_Right)
    ScrollX+20
  EndIf
  
  If KeyboardPushed(#PB_Key_Down)
    ScrollY+10
  EndIf
  
  If KeyboardPushed(#PB_Key_Up)
    ScrollY-10
  EndIf
  
EndProcedure
Procedure UpdateMap()
  Shared TilePosX.l,TilePosY.l,MouseSelectX.l,MouseSelectY.l,TileSelectX.l,TileSelectY.l
  Shared MMx.l,MMy.l,Select_T.l
  
  For Y = 1 To #TailleMapY
    For x = 1 To #TailleMapX
      
      TilePosX = Map(x,Y)\x - ScrollX 
      TilePosY = (Map(x,Y)\Y - SpriteHeight(Map(x,Y)\type)-#TailleTileY) - ScrollY 
      
      ;On affiche les tiles que si il sont dans une zone Affichable par l'écran.
      If TilePosX >-#TailleTileX And TilePosX < ScreenWidth And TilePosY >-(#TailleTileY*3) And TilePosY < ScreenHeight
        DisplayTransparentSprite(Map(x,Y)\type ,TilePosX,TilePosY)
      EndIf 
      
      If MouseX() > TilePosX + (#TailleTileX/4) And MouseX() < TilePosX + #TailleTileX - (#TailleTileX/4) And MouseY() > TilePosY + (#TailleTileY/4)+SpriteHeight(Map(x,Y)\type)-#TailleTileY And MouseY() < TilePosY + #TailleTileY - (#TailleTileY/4)+SpriteHeight(Map(x,Y)\type)-#TailleTileY
        MouseSelectX = TilePosX
        MouseSelectY = TilePosY
        TileSelectX = x
        TileSelectY = Y
      EndIf 
      
      If TilePosX > 0 And TilePosX < #TailleTileX And TilePosY > 0 And TilePosY < #TailleTileY
        MMx = x/EchX
        MMy = Y/EchY
      EndIf
      
      
      
    Next x
  Next Y 
  StartDrawing(ScreenOutput())
  DrawingMode(4) 
  ;Affichage de la zone selectionner suivant la taille du pinceau
  For T = 1 To Taille 
    
    
    
    ;DisplayTransparentSprite(#Selector,MouseSelectX+(Bx*64)/2,MouseSelectY+(By*32)/2)
    
    
    Ellipse(MouseX(),MouseY(),T+(Taille*64)/2,T+(Taille*32)/2,RGB(255/T, 255/T, 255 ))
    
  Next 
  
  ;Dessin Minimap 
  
  DrawImage(ImageID(#MiniMap),11,(ScreenHeight-150)+11 )
  ; Locate(0,0)
  ; DrawText(Str(TileSelectX)+":"+Str(TileSelectY))
  StopDrawing()
  
  
  
  MMAeraX = (11-64)+ MMx
  MMAeraY = ((ScreenHeight-150+11)-64) + MMy
  
  
  DisplayTransparentSprite(#GUI_MiniMap_Aera,MMAeraX,MMAeraY)
  DisplayTransparentSprite(#GUI_MiniMap,0,ScreenHeight-150)
  DisplayTransparentSprite(#GUI_Commander,0,ScreenHeight-SpriteHeight(#GUI_Commander))
  DisplayTransparentSprite(#Cursor,MouseX(),MouseY())
  
  
  
  ;-Paintbrush
  
  
  If KeyboardReleased(#PB_Key_PageUp)<>0   : Select_T + 1 : EndIf
  If KeyboardReleased(#PB_Key_PageDown)<>0 : Select_T - 1 : EndIf
  
  If Select_T > #Forest
    Select_T  = #Grass1
  EndIf
  
  If Select_T < #Grass1
    Select_T  = #Forest
  EndIf
  
  
  
  If MouseButton(1)<>0
    
    For By = -Taille/2 To Taille/2
      For Bx = -Taille/2 To Taille/2
        
        
        If TileSelectX+Bx= > 0 And TileSelectX+Bx <= #TailleMapX And TileSelectY+By= > 0 And TileSelectY+By <= #TailleMapY
          Map(TileSelectX+Bx,TileSelectY+By)\type = Select_T; #Bloc_Petrol
          
          If Select_T=#Water_0
            Coast_Auto(TileSelectX+Bx,TileSelectY+By)
          EndIf
          
          UpdateMiniMap(TileSelectX+Bx,TileSelectY+By)
        EndIf
        
        
    Next : Next
    
  EndIf
  
  
  If MouseWheel()>0
    Taille+1
  EndIf
  
  If MouseWheel()<0
    Taille-1
  EndIf
  
  If Taille < 1  : Taille = 1  : EndIf
  If Taille > 15 : Taille = 15 : EndIf
  
  
  If KeyboardPushed(#PB_Key_Tab)                  
    ReleaseMouse(1)
  Else
    ReleaseMouse(0)
  EndIf   
  
  
  
  
EndProcedure
Procedure Coast_Auto(x,Y)
  
  If Map(x,Y)\type = #Water_0
    
    If x+1<#TailleMapX
      If Map(x+1,Y)\type <> #Water_0
        Map(x+1,Y)\type = #Coast_2
      EndIf
    EndIf
    
    If x>0
      If Map(x-1,Y)\type <> #Water_0 
        Map(x-1,Y)\type = #Coast_1
      EndIf
    EndIf
    
    If Y+1<#TailleMapY
      If Map(x,Y+1)\type <> #Water_0 
        Map(x,Y+1)\type = #Coast_3
      EndIf
    EndIf
    
    If Y-1>0
      If Map(x,Y-1)\type <> #Water_0 
        Map(x,Y-1)\type = #Coast_0
      EndIf
    EndIf 
  EndIf
  
EndProcedure
Procedure CreateMapIsometric(Taille_Map_X.l,Taille_Map_Y.l,TileType.l)
  Shared DecalageX.l,DecalageY.l,offset.l
  For Y = 1 To Taille_Map_Y
    For x = 1 To Taille_Map_X
      
      DecalageX = DecalageX + (#TailleTileX/2)
      DecalageY = DecalageY + (#TailleTileY/2)
      
      Map(x,Y)\x    = DecalageX
      Map(x,Y)\Y    = DecalageY
      Map(x,Y)\type = TileType
      
    Next x
    offset+1
    DecalageX = -(offset*(#TailleTileX/2))   
    DecalageY = (#TailleTileY/2)*offset
  Next Y
  
EndProcedure
;/ Map Iso
CreateMapIsometric(#TailleMapX,#TailleMapY,#Grass1)
MakeMiniMap()
Repeat
  Repeat
  Event = WaitWindowEvent()
  ExamineKeyboard() : ExamineMouse() : ClearScreen(RGB(0,0,0))
  UpdateMap()
  ControlInput()
  FlipBuffers()
Until Event = #PB_Event_CloseWindow 
ForEver
If MouseX()>650
ReleaseMouse(1)   
EndIf