Input en Drawing 2D

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
PCPixMusic
Messages : 106
Inscription : ven. 06/janv./2017 9:50

UP

Message par PCPixMusic »

Bonjour,

Personne ne sait ?

Merci à qui pourras me répondre.

Passez un bon week-end.
PCPixMusic
Messages : 106
Inscription : ven. 06/janv./2017 9:50

Input en Drawing 2D

Message par PCPixMusic »

Bonjour,

Es qu'il existe une fonction qui permet de faire de la saisie de texte uniquement en mode graphique avec Input en Drawing 2D ?
Donc d'un équivalent de StringGadget

Une question que je me pose pour réaliser un jeu par exemple 100% graphique sans aucun gadget.
Mais aussi est surtout par curiosité.

Merci d'avance pour vos réponses.

Passez une bonne journée.
PCPixMusic
Messages : 106
Inscription : ven. 06/janv./2017 9:50

Détection du pointeur de la souris qui sort d'un gadget.

Message par PCPixMusic »

Bonjour,

J'ai besoin de la possibilité de détecter quand le pointeur de la souris sort d'un gadget, afin de le désactiver à ce moment-là.

Je suis sûr que j'ai lu quelque chose dans la documentation, mais impossible de retrouver.

Merci beaucoup pour vos réponses.

Passez un très bon Week-End.
Avatar de l’utilisateur
TazNormand
Messages : 1294
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: Input en Drawing 2D

Message par TazNormand »

@PCPixMusic : J'ai fusionné tes messages ; si possible postes un message avec plusieurs questions au lieu de mettre x messages, surtout si ça concerne un sujet unique.

Autre chose, le UP, c'est bien, mais faut le faire sur un de tes messages, et comme tu le dis si bien : "Passez un bon Week-End" !

On est tous en week-end, voire en vacances pour plusieurs d'entre nous, tu comprendras que les réponses ne vont pas tomber comme ça en 5 minutes.

"Patience est mère de toutes les vertus" dit le dicton 8)
Image
Image
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: Input en Drawing 2D

Message par Shadow »

Bonjour PCPixMusic,

Je ne sais pas comment crée un système d'imput en mode drawing... sans gadget c'est galère.
Essaye d'être plus clair et de dire exactement se que tu veux.
C'est pour quoi faire ?

Cordialement.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
grendizer
Messages : 59
Inscription : mer. 29/mai/2019 6:29

Re: Input en Drawing 2D

Message par grendizer »

bonjour PCPixMusic

c'est pour un HighScore d'un jeu?

sinon regarde ça : https://github.com/kennycason/snakes

c'est une version 3.94 de PB mais le gars a codé un setting pour son jeu snake .

si cela peux t'aider .

Bon dimanche
Avatar de l’utilisateur
kernadec
Messages : 1594
Inscription : ven. 25/avr./2008 11:14

Re: Input en Drawing 2D

Message par kernadec »

salut à tous
Merci grendizer pour ce lien, donc voici le code adapté pour PB 573 LTS
les scores sont écrit dans le fichier "HS.snake" ligne 824
vous devrez télécharger le lien du post précédent :mrgreen:
Cordialement

Code : Tout sélectionner

InitSprite()
If InitSound()
  sound= 1
EndIf 
InitKeyboard()
If InitJoystick()
  joystick = 1
EndIf 
;OnErrorResume()


Procedure DrawTextXY(text.s, x.w, y.w)
  StartDrawing(ScreenOutput())
  DrawingMode(1)
  BackColor(RGB(0,0,0))
  FrontColor(RGB(255, 255, 255))
  DrawText(x,y,text)
  StopDrawing()
EndProcedure

IncludePath  #PB_Compiler_Home + "snakes-master\"

DataSection     ; ********* a includebinary file bigger .exe but noone can steal stuff :)
  body:
  IncludeBinary "sprites\body.bmp"
  head1: 
  IncludeBinary "sprites\head_1.bmp"
  head2: 
  IncludeBinary "sprites\head_2.bmp"
  head3: 
  IncludeBinary "sprites\head_3.bmp"
  head4: 
  IncludeBinary "sprites\head_4.bmp"
  body2: 
  IncludeBinary "sprites\body2.bmp"
  head21: 
  IncludeBinary "sprites\head2_1.bmp"
  head22: 
  IncludeBinary "sprites\head2_2.bmp"
  head23: 
  IncludeBinary "sprites\head2_3.bmp"
  head24: 
  IncludeBinary "sprites\head2_4.bmp"
  body3: 
  IncludeBinary "sprites\body3.bmp"
  head31: 
  IncludeBinary "sprites\head3_1.bmp"
  head32: 
  IncludeBinary "sprites\head3_2.bmp"
  head33: 
  IncludeBinary "sprites\head3_3.bmp"
  head34: 
  IncludeBinary "sprites\head3_4.bmp"
  body4: 
  IncludeBinary "sprites\body4.bmp"
  head41: 
  IncludeBinary "sprites\head4_1.bmp"
  head42: 
  IncludeBinary "sprites\head4_2.bmp"
  head43: 
  IncludeBinary "sprites\head4_3.bmp"
  head44: 
  IncludeBinary "sprites\head4_4.bmp"
  body5: 
  IncludeBinary "sprites\body5.bmp"
  head51: 
  IncludeBinary "sprites\head5_1.bmp"
  head52: 
  IncludeBinary "sprites\head5_2.bmp"
  head53: 
  IncludeBinary "sprites\head5_3.bmp"
  head54: 
  IncludeBinary "sprites\head5_4.bmp"
  body6: 
  IncludeBinary "sprites\body6.bmp"
  head61:
  IncludeBinary "sprites\head6_1.bmp"
  head62: 
  IncludeBinary "sprites\head6_2.bmp"
  head63: 
  IncludeBinary "sprites\head6_3.bmp"
  head64: 
  IncludeBinary "sprites\head6_4.bmp"
  body7: 
  IncludeBinary "sprites\body7.bmp"
  head71: 
  IncludeBinary "sprites\head7_1.bmp"
  head72: 
  IncludeBinary "sprites\head7_2.bmp"
  head73: 
  IncludeBinary "sprites\head7_3.bmp"
  head74: 
  IncludeBinary "sprites\head7_4.bmp"
  body8: 
  IncludeBinary "sprites\body8.bmp"
  head81: 
  IncludeBinary "sprites\head8_1.bmp"
  head82: 
  IncludeBinary "sprites\head8_2.bmp"
  head83: 
  IncludeBinary "sprites\head8_3.bmp"
  head84: 
  IncludeBinary "sprites\head8_4.bmp"
  body9: 
  IncludeBinary "sprites\body9.bmp"
  head91: 
  IncludeBinary "sprites\head9_1.bmp"
  head92: 
  IncludeBinary "sprites\head9_2.bmp"
  head93: 
  IncludeBinary "sprites\head9_3.bmp"
  head94: 
  IncludeBinary "sprites\head9_4.bmp"
  food1: 
  IncludeBinary "sprites\food1.bmp"
  food2: 
  IncludeBinary "sprites\food2.bmp"
  food3: 
  IncludeBinary "sprites\food3.bmp"
  food4: 
  IncludeBinary "sprites\food4.bmp"
  food5: 
  IncludeBinary "sprites\food5.bmp"
  misc1: 
  IncludeBinary "sprites\mystery.bmp"  
  sound0: 
  IncludeBinary "sound\item1.wav"
  sound1: 
  IncludeBinary "sound\item2.wav"
  sound2: 
  IncludeBinary "sound\item3.wav"   
  sound50: 
  IncludeBinary "sound\music_A.wav"
  sound51: 
  IncludeBinary "sound\music_B.wav"
  sound52: 
  IncludeBinary "sound\music_C.wav"
  sound53: 
  IncludeBinary "sound\music_D.wav"
  
EndDataSection  

#SGreen = 0
#SYellow = 5
#SOrange = 10
#SBlue = 15
#STeal = 20
#SRed = 25
#SPurple = 30
#SGhost = 35
#Shippy = 40

CatchSound(0, ?sound0)
CatchSound(1, ?sound1)
CatchSound(2, ?sound2)

CatchSound(50, ?sound50)
CatchSound(51, ?sound51)
CatchSound(52, ?sound52)
CatchSound(53, ?sound53)


Gosub Menu


If FullScreen = #True
  If OpenScreen(screenX, screenY, 16, "Snakes")
  Else
    MessageRequester("Snakes","Unable To open DirectX 7.0 Or later!",#MB_ICONERROR)
  EndIf
  
Else 
  If OpenWindow(0, 200, 200, screenX, screenY, "Snakes", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget| #PB_Window_MaximizeGadget | #PB_Window_TitleBar | #PB_Window_SizeGadget)
    OpenWindowedScreen(WindowID(0),0,0,screenX,screenY,1,10,10)
  Else
    MessageRequester("Snakes","Unable To open DirectX 7.0 Or later!",#MB_ICONERROR)
  EndIf 
EndIf 



Structure head ; not really neccessary since theres only one head.. but maybe for multiplayer mode
  x.w
  y.w
  direction.b  ; 1 up 2 right 3 down 4 left
  length.w
EndStructure

Structure body
  x.w
  y.w
  age.w
EndStructure
NewList body.body()
NewList body2.body()

Structure food
  image.b          ; this is soley for the purpose of expanding the food variety
  x.w
  y.w
  life.w
EndStructure
NewList food.food()

;- NewGame
NewGame:

CatchSprite(0, ?body) 
CatchSprite(1, ?head1)
CatchSprite(2, ?head2)
CatchSprite(3, ?head3)
CatchSprite(4, ?head4) 
CatchSprite(5, ?body2) 
CatchSprite(6, ?head21)
CatchSprite(7, ?head22)
CatchSprite(8, ?head23)
CatchSprite(9, ?head24) 
CatchSprite(10, ?body3) 
CatchSprite(11, ?head31)
CatchSprite(12, ?head32)
CatchSprite(13, ?head33)
CatchSprite(14, ?head34) 
CatchSprite(15, ?body4) 
CatchSprite(16, ?head41)
CatchSprite(17, ?head42)
CatchSprite(18, ?head43)
CatchSprite(19, ?head44)  
CatchSprite(20, ?body5) 
CatchSprite(21, ?head51)
CatchSprite(22, ?head52)
CatchSprite(23, ?head53)
CatchSprite(24, ?head54) 
CatchSprite(25, ?body6) 
CatchSprite(26, ?head61)
CatchSprite(27, ?head62)
CatchSprite(28, ?head63)
CatchSprite(29, ?head64) 
CatchSprite(30, ?body7) 
CatchSprite(31, ?head71)
CatchSprite(32, ?head72)
CatchSprite(33, ?head73)
CatchSprite(34, ?head74) 
CatchSprite(35, ?body8) 
CatchSprite(36, ?head81)
CatchSprite(37, ?head82)
CatchSprite(38, ?head83)
CatchSprite(39, ?head84) 
CatchSprite(40, ?body9) 
CatchSprite(41, ?head91)
CatchSprite(42, ?head92)
CatchSprite(43, ?head93)
CatchSprite(44, ?head94)  
CatchSprite(50, ?food1)  
CatchSprite(51, ?food2)
CatchSprite(52, ?food3)
CatchSprite(53, ?food4)  
CatchSprite(54, ?food5)

If lvlSound > 49
  PlaySound(lvlsoundnew)
EndIf 
moved = 0
head.head\length = 3
head.head\x = 32*2
head.head\y = 32*4
head.head\direction = 2
headimage = 2


moved2 = 0
head2.head\length = 3
head2.head\x = 32*15
head2.head\y = 32*7
head2.head\direction = 4
headimage2 = 4


GameSpeed.f = 35 - StartSpeed
GameSpeed2.f = 35 - StartSpeed

delay = GameSpeed
Delay2 = GameSpeed2

score.l = 0
score2.l = 0


For k = 32 To head.head\length*32 Step 32
  AddElement(body())
  body()\x = head\x-k
  body()\y = head\y
  body()\age = k/32
Next 

For k = 1 To MaxFood 
  AddElement(food())
  food()\image = 50 + Random(FoodItems)
  food()\x = Random(19)*32
  food()\y = Random(14)*32
Next

;- Main Loop

Repeat 
  
  If FullScreen = #False
    If WindowID(0)
      Event = WindowEvent() 
      
      If Event    
        Delay(10)
      EndIf 
    EndIf 
  EndIf 
  
  
  ClearScreen(RGB(0,0,0))
  
  Gosub ExamineKeyboard 
  
  Gosub Food
  
  Delay - 1
  If Delay < 1 
    Delay = GameSpeed 
    Gosub MoveSnake
  EndIf 
  
  Delay2 - 1
  If Delay2 < 1 
    Delay2 = GameSpeed2   
    If player = 2
      Gosub MoveSnake2
    EndIf 
  EndIf 
  
  Gosub Draw
  ExamineKeyboard()
  
  If KeyboardPushed(#PB_Key_Escape)
    End
  ElseIf FullScreen = #False And event = #PB_Event_CloseWindow 
    End
  EndIf 
ForEver





;- ExamineKeyboard
ExamineKeyboard:
ExamineKeyboard()
If moved = 0                ; 1 up 2 right 3 down 4 left
  If KeyboardPushed(#PB_Key_Up) And head\direction <> 3
    moved = 1
    head\direction = 1
    headimage = 1
  ElseIf KeyboardPushed(#PB_Key_Right) And head\direction <> 4
    moved = 1
    head\direction = 2
    headimage = 2
  ElseIf KeyboardPushed(#PB_Key_Down) And head\direction <> 1
    moved = 1
    head\direction = 3
    headimage = 3
  ElseIf KeyboardPushed(#PB_Key_Left) And head\direction <> 2
    moved = 1
    head\direction = 4
    headimage = 4
  ElseIf joystick = 1 And playerjoystick = 1
    ExamineJoystick(0)
    If JoystickAxisY(0)=-1 And head\direction <> 3
      moved = 1
      head\direction = 1
      headimage = 1
    ElseIf JoystickAxisX(0)=1 And head\direction <> 4
      moved = 1
      head\direction = 2
      headimage = 2
    ElseIf JoystickAxisY(0)=1 And head\direction <> 1
      moved = 1
      head\direction = 3
      headimage = 3
    ElseIf JoystickAxisX(0)=-1 And head\direction <> 2
      moved = 1
      head\direction = 4
      headimage = 4
    EndIf
  EndIf 
EndIf 

If player = 2                               ; 1 up 2 right 3 down 4 left
  If   moved2 = 0
    If KeyboardPushed(#PB_Key_W) And head2\direction <> 3
      moved2 = 1
      head2\direction = 1
      headimage2 = 1
    ElseIf KeyboardPushed(#PB_Key_D) And head2\direction <> 4
      moved2 = 1
      head2\direction = 2
      headimage2 = 2
    ElseIf KeyboardPushed(#PB_Key_S) And head2\direction <> 1
      moved2 = 1
      head2\direction = 3
      headimage2 = 3
    ElseIf KeyboardPushed(#PB_Key_A) And head2\direction <> 2
      moved2 = 1
      head2\direction = 4
      headimage2 = 4
    ElseIf joystick = 1 And playerjoystick = 2
      ExamineJoystick(0)
      If JoystickAxisY(0)=-1 And head2\direction <> 3
        moved2 = 1
        head2\direction = 1
        headimage2 = 1
      ElseIf JoystickAxisX(0)=1 And head2\direction <> 4
        moved2 = 1
        head2\direction = 2
        headimage2 = 2
      ElseIf JoystickAxisY(0)=1 And head2\direction <> 1
        moved2 = 1
        head2\direction = 3
        headimage2 = 3
      ElseIf JoystickAxisX(0)=-1 And head2\direction <> 2
        moved2 = 1
        head2\direction = 4
        headimage2 = 4
      EndIf
    EndIf 
  EndIf 
EndIf 

Repeat     ; may "little" pause procedure
  ExamineKeyboard()
  
  If KeyboardReleased(#PB_Key_Space) ;pause
    If Paused = 0
      Gosub Draw
      DrawTextXY("PAUSE",ScreenX/2-50,ScreenY/2)
      FlipBuffers()
      Paused = 1
    Else 
      Paused = 0
    EndIf 
  EndIf 
  
Until paused = 0

If joystick = 1
  If JoystickButton(0,10)
    paused = 1
    pausecounter = 20
    Gosub Draw
    DrawTextXY("PAUSE",ScreenX/2-50,ScreenY/2)
    FlipBuffers()
  EndIf
  
  Repeat
    ExamineJoystick(0)
    If pausecounter < 0 
      If joystick = 1
        If JoystickButton(0,1) Or JoystickButton(0,2) Or JoystickButton(0,3) Or JoystickButton(0,4) Or JoystickButton(0,5) Or JoystickButton(0,6) Or JoystickButton(0,7) Or JoystickButton(0,8)
          paused = 0
          pausecounter = 20
        EndIf
      EndIf 
    Else
      pausecounter - 1
    EndIf 
    
  Until paused = 0
  
EndIf   
DisplayTransparentSprite(headimage,head\x,head\y)
Return 

;- Food
Food:

If ListSize(food()) < MaxFood
  AddElement(food())
  food()\image = 50 + Random(FoodItems) 
  food()\life = 500 + Random(100)
  If player =1
    food()\image = 50
  Else 
    k = Random(33)
    If k < 11
      food()\image = 50
    ElseIf k >= 11 And k < 17
      food()\image = 51
    ElseIf k >= 17 And k < 23
      food()\image = 52
    ElseIf k >= 23 And k < 27
      food()\image = 53
    ElseIf k >= 27
      food()\image = 54
    EndIf 
  EndIf 
  food()\x = Random((screenX-32)/32)*32
  food()\y = Random((screenY-32)/32)*32
EndIf
ResetList(food())
While NextElement(food())
  If head\x = food()\x And head\y = food()\y
    If food()\image = 50
      head\length + 1
      Score + 10
      If player = 1
        GameSpeed -(1/4) 
        If gameSpeed < 3
          GameSpeed = 3
        EndIf
      EndIf 
      PlaySound(0, 0)
    ElseIf food()\image = 51
      head2\length - (Random(1)+1)
      Score + 10
      If head2\length < 1
        playerWin = 1
        Gosub GameOver
      EndIf 
      PlaySound(1, 0)
    ElseIf food()\image = 52
      If player = 1
        GameSpeed - 1
      Else 
        gameSpeed - 3
      EndIf 
      If GameSpeed < 3
        GameSpeed = 3
      EndIf 
      Score + 10
      PlaySound(2, 0)
    ElseIf food()\image = 53
      head\length - (Random(1)+1)
      Score - 10
      If head\length <1
        playerWin = 1
        Gosub GameOver
      EndIf 
      PlaySound(0, 0)
    ElseIf food()\image = 54
      GameSpeed + 3
      If GameSpeed > 40 
        GameSpeed = 40
      EndIf 
      Score + 10
      PlaySound(2, 0)
    EndIf  
    DeleteElement(food())
  EndIf 
Wend

If player = 2
  ResetList(food())
  While NextElement(food())
    If head2\x = food()\x And head2\y = food()\y
      If food()\image = 50
        head2\length + 1
        Score2 + 10 
        PlaySound(0, 0)         
      ElseIf food()\image = 51
        Score2 + 10
        head\length - (Random(1)+1)
        If head\length < 1
          playerWin = 2
          Gosub GameOver
        EndIf 
        PlaySound(1, 0)
      ElseIf food()\image = 52
        GameSpeed2 - 3
        If GameSpeed2 < 3
          GameSpeed2 = 3
        EndIf 
        Score2 + 10
        PlaySound(2, 0)
      ElseIf food()\image = 53
        head2\length - (Random(1)+1)
        Score2 - 10
        If head2\length <1
          playerWin = 2
          Gosub GameOver
        EndIf        
        PlaySound(0, 0)   
      ElseIf food()\image = 54
        GameSpeed2 + 3
        If GameSpeed2 > 40 
          GameSpeed2 = 40
        EndIf 
        Score2 + 10
        PlaySound(2, 0)
      EndIf 
      DeleteElement(food())
    EndIf
  Wend
EndIf 
Return 

;- MoveSnake 1
MoveSnake:
playerWin = 1 ; if it goes to gameover in this routine player 1 had to of won
AddElement(body())
body()\x = head\x
body()\y = head\y
body()\age = 1

If player = 2
  If head\x = head2\x And head\y = head2\y
    playerWin = 0
    Gosub GameOver
  EndIf 
EndIf


If head\direction = 1
  head\y - 32
ElseIf head\direction = 2
  head\x + 32
ElseIf head\direction = 3
  head\y + 32
ElseIf head\direction = 4
  head\x - 32
EndIf 

If head\x > ScreenX-32
  head\x = 0
ElseIf head\x < 0
  head\x = ScreenX-32
ElseIf head\y > ScreenY-32
  head\y = 0
ElseIf head\y < 0
  head\y = ScreenY-32
EndIf 

moved = 0

ResetList(body())
While NextElement(body())
  If player = 2
    If body()\x = head2\x And body()\y = head2\y
      Gosub GameOver
    EndIf
    ResetList(body2())
    While NextElement(body2())
      If body()\x = body2()\x And body()\y = body2()\y
        Gosub GameOver 
      EndIf        
    Wend 
  EndIf 
  If body()\x = head\x And body()\y = head\y
    playerWin = 2
    Gosub GameOver
  EndIf
Wend 

ResetList(body())
While NextElement(body())
  body()\age + 1
  If body()\age > head\length
    DeleteElement(body())
  EndIf
Wend 

Return 



;- MoveSnake 2
MoveSnake2:
playerWin = 2
AddElement(body2())
body2()\x = head2\x
body2()\y = head2\y
body2()\age = 1

If head2\direction = 1
  head2\y - 32
ElseIf head2\direction = 2
  head2\x + 32
ElseIf head2\direction = 3
  head2\y + 32
ElseIf head2\direction = 4
  head2\x - 32
EndIf 

If head2\x > ScreenX-32
  head2\x = 0
ElseIf head2\x < 0
  head2\x = ScreenX-32
ElseIf head2\y > ScreenY-32
  head2\y = 0
ElseIf head2\y < 0
  head2\y = ScreenY-32
EndIf 

moved2 = 0

ResetList(body2())
While NextElement(body2())
  If body2()\x = head\x And body2()\y = head\y
    Gosub GameOver
  EndIf
  If body2()\x = head2\x And body2()\y = head2\y
    playerWin = 1
    Gosub GameOver
  EndIf
  ResetList(body())
  While NextElement(body())
    If body2()\x = body()\x And body2()\y = body()\y
      Gosub GameOver 
    EndIf        
  Wend 
Wend 

ResetList(body2())
While NextElement(body2())
  body2()\age + 1
  If body2()\age > head2\length
    DeleteElement(body2())
  EndIf
Wend 

Return 


;- Draw
Draw:
ClearScreen(RGB(0,0,0))

ResetList(food())
While NextElement(food())
  DisplayTransparentSprite(food()\image, food()\x, food()\y)
  food()\life - 1
  If food()\life = 0
    DeleteElement(food())
  EndIf 
Wend

ResetList(body())
While NextElement(body())
  DisplayTransparentSprite(Color, body()\x, body()\y)
Wend

If player = 2
  ResetList(body2())
  While NextElement(body2())
    DisplayTransparentSprite(Color2, body2()\x, body2()\y)
  Wend
EndIf 

Select head\direction
  Case 1
    DisplayTransparentSprite(Color+1, head\x, head\y)
  Case 2 
    DisplayTransparentSprite(Color+2, head\x, head\y) 
  Case 3 
    DisplayTransparentSprite(Color+3, head\x, head\y)
  Case 4
    DisplayTransparentSprite(Color+4, head\x, head\y)
EndSelect

If player = 2
  Select head2\direction
    Case 1
      DisplayTransparentSprite(Color2+1, head2\x, head2\y)
    Case 2 
      DisplayTransparentSprite(Color2+2, head2\x, head2\y) 
    Case 3 
      DisplayTransparentSprite(Color2+3, head2\x, head2\y)
    Case 4
      DisplayTransparentSprite(Color2+4, head2\x, head2\y)
  EndSelect
  DrawTextXY("P2Score: "+Str(Score2),400,0)
EndIf 


If Score > HiScore
  HiScore = Score
EndIf  
DrawTextXY("P1Score: "+Str(Score),200,0)
DrawTextXY("Hi Score: "+Str(HiScore),0,0)
FlipBuffers()
Return 

;- GameOver
GameOver:

If player = 2
  If Playerwin = 1
    DrawTextXY("Player 1 Wins!",ScreenX/2-50,ScreenY/2-15)
    DrawTextXY("Score: "+Str(Score),ScreenX/2-50,ScreenY/2)
  ElseIf PlayerWin = 2
    DrawTextXY("Player 2 Wins!",ScreenX/2-50,ScreenY/2-15)
    DrawTextXY("Score: "+Str(Score2),ScreenX/2-50,ScreenY/2)
  Else
    DrawTextXY("Draw!",ScreenX/2-50,ScreenY/2-15)
    DrawTextXY("Score: "+Str(Score),ScreenX/2-50,ScreenY/2)
  EndIf 
ElseIf player = 1
  DrawTextXY("You Lose!",ScreenX/2-50,ScreenY/2-15)
  DrawTextXY("Score: "+Str(Score),ScreenX/2-50,ScreenY/2)
EndIf

FlipBuffers()
Delay(2000)

If lvlsound > 49
  StopSound(lvlsound)
EndIf 

If player = 1
  If Score > HiScore
    DrawTextXY("A New HighScore!",ScreenX/2-50,ScreenY/2+20)
    FlipBuffers()
    Delay(1400)
    HiScore = Score
  EndIf 
EndIf 
If player = 2
  NumberVersus + 1
EndIf 
If OpenFile(0, "HS.snake")
  WriteLong(0,HiScore-1234567890) ; a small encryption, nothing special tho
  WriteLong(0,NumberVersus - 1234567890)
  CloseFile(0)
EndIf 





ResetList(body())
While NextElement(body())
  DeleteElement(body())
Wend 
If player = 2
  ResetList(body2())
  While NextElement(body2())
    DeleteElement(body2())
  Wend 
EndIf 
ResetList(food())
While NextElement(food())
  DeleteElement(food())
Wend 
Goto NewGame

;- Menu 
Menu:
#MenuWindow               = 1
#GADGET_FullScreen        = 1
#GADGET_Players           = 2
#GADGET_Launch            = 4
#GADGET_Cancel            = 5
#GADGET_Controller        = 6 
#GADGET_MaxFood           = 7
#GADGET_ColorSelect       = 13
#GADGET_Sound             = 9
#GADGET_Image             = 60
#GADGET_Speed             = 12
#GADGET_Text1             = 20


If OpenWindow(#MenuWindow, 0, 0, 292, 320, "Snakes: by Kenny Cason", #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_Invisible)
  CatchImage(0, ?head3)  ; will be overwrote later
  CatchImage(1, ?head23)
  CatchImage(2, ?head33)
  CatchImage(3, ?head43)
  CatchImage(4, ?head53)
  CatchImage(5, ?head63)
  CatchImage(6, ?head73)
  CatchImage(7, ?head83)  
  CatchImage(8, ?head93)
  
  CatchImage(20,?misc1)
  
  
  If ReadFile(0, "HS.snake")
    HiScore =  ReadLong(0)+1234567890
    NumberVersus = ReadLong(0)+1234567890
    If NumberVersus < 0 
      NumberVersus = 0
    EndIf 
    If HiScore < 0 
      HiScore = 0
    EndIf 
    CloseFile(0)
  EndIf 
  
  
  Top = 6
  ImageGadget(#GADGET_Image  ,0  ,10,40,40,ImageID(0),#PB_Image_Border)  
  ImageGadget(#GADGET_Image+1,32 ,10,40,40,ImageID(1),#PB_Image_Border)  
  ImageGadget(#GADGET_Image+2,64 ,10,40,40,ImageID(2),#PB_Image_Border)
  If HiScore > 300  
    ImageGadget(#GADGET_Image+3,96 ,10,40,40,ImageID(3),#PB_Image_Border)
  Else 
    ImageGadget(#GADGET_Image+3,96 ,10,40,40,ImageID(20),#PB_Image_Border)
  EndIf 
  If HiScore > 500
    ImageGadget(#GADGET_Image+4,128,10,40,40,ImageID(4),#PB_Image_Border) 
  Else 
    ImageGadget(#GADGET_Image+4,128 ,10,40,40,ImageID(20),#PB_Image_Border)
  EndIf 
  If HiScore > 700
    ImageGadget(#GADGET_Image+5,160,10,40,40,ImageID(5),#PB_Image_Border)
  Else 
    ImageGadget(#GADGET_Image+5,160 ,10,40,40,ImageID(20),#PB_Image_Border)
  EndIf 
  If HiScore > 800
    ImageGadget(#GADGET_Image+6,192,10,40,40,ImageID(6),#PB_Image_Border)
  Else
    ImageGadget(#GADGET_Image+6,192 ,10,40,40,ImageID(20),#PB_Image_Border)
  EndIf 
  If HiScore > 900
    ImageGadget(#GADGET_Image+7,224,10,40,40,ImageID(7),#PB_Image_Border)
  Else
    ImageGadget(#GADGET_Image+7,224 ,10,40,40,ImageID(20),#PB_Image_Border)
  EndIf 
  If HiScore > 1000
    ImageGadget(#GADGET_Image+8,256,10,40,40,ImageID(8),#PB_Image_Border)
  Else
    ImageGadget(#GADGET_Image+8,256 ,10,40,40,ImageID(20),#PB_Image_Border)
  EndIf
  Top+40
  
  TextGadget(#GADGET_Text1+10,120,Top+2,90,20,"Hi Score")
  TextGadget(#GADGET_Text1+11,120,Top+17,90,120,Str(HiScore))
  TextGadget(#GADGET_Text1+12,200,Top+2,90,20,"Versus Matches")
  TextGadget(#GADGET_Text1+13,200,Top+17,90,120,Str(NumberVersus))
  
  CheckBoxGadget(#GADGET_FullScreen, 20, Top, 75, 20, "Full Screen") :Top + 20
  
  CheckBoxGadget(#GADGET_Players, 20, Top, 75, 20, "2 Player") :Top + 20
  
  TextGadget(#GADGET_Text1+14,20,Top,180,20,"Mult. Player Settings") : Top + 15
  
  TextGadget(#GADGET_Text1,20,Top+2,90,20,"Player Speed")
  TextGadget(#GADGET_Text1+1,105,Top+0,10,10,"-")
  TextGadget(#GADGET_Text1+2,190,Top+0,10,10,"+")
  TrackBarGadget(#GADGET_Speed, 110, Top, 80, 20, 0, 35) : Top+30
  SetGadgetState(#GADGET_Speed, 10) 
  
  TextGadget(#GADGET_Text1+6,20,Top+2,90,20,"Max Food")
  TextGadget(#GADGET_Text1+7,105,Top+0,10,10,"-")
  TextGadget(#GADGET_Text1+8,190,Top+0,10,10,"+")   
  TrackBarGadget(#GADGET_MaxFood, 110, Top, 80, 20, 0, 50) : Top+35
  SetGadgetState(#GADGET_MaxFood, 7)
  
  
  TextGadget(#GADGET_Text1+3,10,Top,80,15,"Player 1")
  ComboBoxGadget(#GADGET_ColorSelect,10,Top+15,80,20) 
  AddGadgetItem(#GADGET_ColorSelect,-1,"Green") 
  AddGadgetItem(#GADGET_ColorSelect,-1,"Yellow") 
  AddGadgetItem(#GADGET_ColorSelect,-1,"Orange") 
  If HiScore > 300
    AddGadgetItem(#GADGET_ColorSelect,-1,"Blue") 
  EndIf 
  If HiScore > 500
    AddGadgetItem(#GADGET_ColorSelect,-1,"Teal") 
  EndIf 
  If HiScore > 700
    AddGadgetItem(#GADGET_ColorSelect,-1,"Red") 
  EndIf  
  If HiScore > 800
    AddGadgetItem(#GADGET_ColorSelect,-1,"Purple")
  EndIf 
  If HiScore > 900
    AddGadgetItem(#GADGET_ColorSelect,-1,"Chost") 
  EndIf
  If HiScore > 1000  
    AddGadgetItem(#GADGET_ColorSelect,-1,"Hippy") 
  EndIf 
  SetGadgetState(#GADGET_ColorSelect,0)  
  
  TextGadget(#GADGET_Text1+4,120,Top,80,15,"Player 2")
  ComboBoxGadget(#GADGET_ColorSelect+1,120,Top+15,80,20) :Top + 45
  AddGadgetItem(#GADGET_ColorSelect+1,-1,"Green") 
  AddGadgetItem(#GADGET_ColorSelect+1,-1,"Yellow") 
  AddGadgetItem(#GADGET_ColorSelect+1,-1,"Orange") 
  If HiScore > 300
    AddGadgetItem(#GADGET_ColorSelect+1,-1,"Blue") 
  EndIf 
  If HiScore > 500
    AddGadgetItem(#GADGET_ColorSelect+1,-1,"Teal") 
  EndIf 
  If HiScore > 700
    AddGadgetItem(#GADGET_ColorSelect+1,-1,"Red") 
  EndIf  
  If HiScore > 800
    AddGadgetItem(#GADGET_ColorSelect+1,-1,"Purple")
  EndIf 
  If HiScore > 900
    AddGadgetItem(#GADGET_ColorSelect+1,-1,"Ghost") 
  EndIf
  If HiScore > 1000  
    AddGadgetItem(#GADGET_ColorSelect+1,-1,"Hippy") 
  EndIf 
  SetGadgetState(#GADGET_ColorSelect+1,1)    ; set (beginning with 1) the 1st item as active one
  
  TextGadget(#GADGET_Text1+5,10,Top,80,15,"Controller") 
  ComboBoxGadget(#GADGET_Controller,70,Top,80,20) :Top+40
  AddGadgetItem(#GADGET_Controller,-1,"Disabled") 
  AddGadgetItem(#GADGET_Controller,-1,"Player 1") 
  AddGadgetItem(#GADGET_Controller,-1,"Player 2") 
  If joystick = 0
    SetGadgetState(#GADGET_Controller,0) 
  Else
    SetGadgetState(#GADGET_Controller,1)
  EndIf 
  
  TextGadget(#GADGET_Text1+9,10,Top-15,80,60,"Music")
  ComboBoxGadget(#GADGET_Sound,10,Top,100,20) :Top+30
  AddGadgetItem(#GADGET_Sound,-1,"None") 
  AddGadgetItem(#GADGET_Sound,-1,"Music A") 
  AddGadgetItem(#GADGET_Sound,-1,"Music B")
  AddGadgetItem(#GADGET_Sound,-1,"Music C") 
  AddGadgetItem(#GADGET_Sound,-1,"Music D")         
  SetGadgetState(#GADGET_Sound,0)  
  
  ButtonGadget(#GADGET_Launch,   6, Top, 95, 28, "Play", #PB_Button_Default)
  ButtonGadget(#GADGET_Cancel, 111, Top, 95, 28, "Exit")
  
  HideWindow(#MenuWindow,0)
  lvlsoundold = GetGadgetState(#GADGET_Sound) + 49
  lvlsoundnew = lvlsoundold
  If lvlsoundnew > 49
    PlaySound(lvlsoundnew,1)
  EndIf 
  Repeat
    Event = WaitWindowEvent()
    Select Event
      Case #PB_Event_Gadget
        Select EventGadget()
          Case #GADGET_Sound
            lvlsoundnew = GetGadgetState(#GADGET_Sound) + 49
            If lvlsoundnew > 49
              If lvlsoundnew <> lvlsoundold
                If lvlsoundold > 49
                  StopSound(lvlsoundold)
                EndIf 
                lvlsoundold = lvlsoundnew
                PlaySound(lvlsoundnew,1)
              EndIf
            Else
              If lvlsoundold > 49
                StopSound(lvlsoundold)
              EndIf 
            EndIf 
          Case #GADGET_Launch
            Quitr = 1
          Case #GADGET_Cancel
            Quitr = 2
        EndSelect
      Case #PB_Event_CloseWindow
        Quitr = 2
    EndSelect
  Until Quitr > 0
  
  FullScreen = GetGadgetState(#GADGET_FullScreen)
  StartSpeed = GetGadgetState(#GADGET_Speed)     
  Players = GetGadgetState(#GADGET_Players)
  color = GetGadgetState(#GADGET_ColorSelect) * 5
  color2 = GetGadgetState(#GADGET_ColorSelect+1) * 5
  playerjoystick = GetGadgetState(#GADGET_Controller) 
  MaxFood = GetGadgetState(#GADGET_MaxFood)
  
  If players = #False
    Player = 1
  Else
    Player = 2
  EndIf 
  
  CloseWindow(#MenuWindow)
EndIf



screenx =  640;1280;  800;  640
screeny =  480;1024;  600;  480

If player = 1 
  StartSpeed = 5
  MaxFood = 5
EndIf 



If Quitr = 2
  End
Else
  Return
EndIf 




; ExecutableFormat=Windows
; UseIcon=C:\Documents and Settings\kenmister\Desktop\purebasic\Projects\snakes\sprites\head_3.ico
; Executable=C:\Documents and Settings\kenmister\Desktop\purebasic\Projects\snakes\Snakes.exe
; EOF
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Input en Drawing 2D

Message par blendman »

PCPixMusic a écrit :Bonjour,

Es qu'il existe une fonction qui permet de faire de la saisie de texte uniquement en mode graphique avec Input en Drawing 2D ?
Donc d'un équivalent de StringGadget

Une question que je me pose pour réaliser un jeu par exemple 100% graphique sans aucun gadget.
Mais aussi est surtout par curiosité.

Merci d'avance pour vos réponses.

Passez une bonne journée.
salut

si je comprends bien ta question, c'est par exemple pour réaliser un tchat ?
Tu devras le faire toi-même, il n'y a pas, à ma connaissance de GUI pour les jeux 2D.

Sur un de mes jeux (3arks, version online (test) de mon jeu arkeos), j'avais ajouté un tchat.
Voici comment j'avais procédé :

Code : Tout sélectionner

; basé sur l'exemple purebasic "KeyboardInkey()

Enumeration ; sprite
  #sprite_PourEcrireTexte
  #sprite_ZoneDeTexte
EndEnumeration


If InitSprite() = 0
  MessageRequester("Erreur", "Impossible d'ouvrir l'écran & l'environnement nécessaire aux sprites !", 0)
  End
EndIf
If InitKeyboard() = 0
  MessageRequester("Erreur", "Impossible d'ouvrir le clavier, hou pinaise tu n'as pas de clavier ?? !", 0)
  End
EndIf


; dimension fenêtre et screen
winW = 500
winH = 400
; couleur du tchat
col1 = 100
col2= 150

; un tableau pour afficher les lignes du tchat.
Dim zonetext$(0)
; POur le tchat (pas nécessaire ^^)
PoliceTchat = LoadFont(0, "Arial", 12) 


If OpenWindow(0, 0, 0, winW, winH, "Zone de tchat", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  
  If OpenWindowedScreen(WindowID(0), 0, 0, winW, winH)
    
    ; on crée le sprite pour écrire
    CreateSprite(#sprite_PourEcrireTexte, winW, 20)
    If StartDrawing(SpriteOutput(#sprite_PourEcrireTexte))
      Box(0, 0, OutputWidth(), OutputHeight(), RGB(Col1, col1, Col1))
      StopDrawing()
    EndIf
    
     ; on crée le sprite pour écrire
    CreateSprite(#sprite_ZoneDeTexte, winW, 150)
    If StartDrawing(SpriteOutput(#sprite_ZoneDeTexte))
      Box(0, 0, OutputWidth(), OutputHeight(), RGB(col2, col2, col2))
      StopDrawing()
    EndIf
    
    
  Else
    MessageRequester("Erreur", "Impossible d'ouvrir un écran dans la fenêtre!", 0)
    End
  EndIf
EndIf

direction = 2
Repeat
  ; Il est très important de traiter tous les évènements restants dans la file d'attente à chaque tour
  ;
  Repeat
    Event = WindowEvent()
    
    Select Event 
        
      
      
      Case #PB_Event_LeftClick
        ; on vérifie si on a cliqué sur le sprite pour écrire
        If WindowMouseY(0)>= winh-20
          ; on peut écrire sur le tchat
          clicEcrire = 1
          
        Else 
          clicEcrire = 0  
        EndIf
        
      Case #PB_Event_CloseWindow
        End 
    EndSelect
  Until Event = 0
  
  
  ; les actions qu'on fait sur le jeu
  
  
  FlipBuffers() 
  ClearScreen(RGB(0, 0, 0))
  
  ; on vérifie les actions ici
  If clicEcrire = 1
    ; on vérifie le keyboard
    If ExamineKeyboard()
      
    
      If KeyboardReleased(#PB_Key_Return) 
        
        ; on a appuyé sur entrée, on valide le texte
        ; ClicEcrire = 0
        
        zonetext$(ligneTchat) = fulltext$ ; on ajoute un char de fin de chaine.
        
        ; on a ajouté une ligne à notre tableau de ligne de tchat, on incrémente.
        ligneTchat +1
        ReDim zonetext$(ligneTchat)
        
        ; on peut effacer le texte de zone de saisie.
        fulltext$ = ""
        
        ; on met à jour le sprite pour le texte
        If StartDrawing(SpriteOutput(#sprite_PourEcrireTexte))
          Box(0, 0, OutputWidth(), OutputHeight(), RGB(col1, col1, col1))
          DrawingMode(#PB_2DDrawing_Transparent)
          
          StopDrawing()
        EndIf
          
        ; on met le text dans la zone à afficher
        If StartDrawing(SpriteOutput(#sprite_ZoneDeTexte))
          
          Box(0, 0, OutputWidth(), OutputHeight(), RGB(Col2, col2, Col2))
          DrawingMode(#PB_2DDrawing_Transparent)
          DrawingFont(PoliceTchat)

          ; on dessine chaque ligne du tchat
          For i = 0 To ArraySize(zonetext$())
            ; pour connaitre la taille de la police en pixel
            If i = i
              Htext = TextHeight(zonetext$(i))
            EndIf
            ; ensuite, on dessine
            DrawText(0,i*Htext,zonetext$(i))
          Next i
          
          StopDrawing()
        EndIf
        
      Else
        
        If KeyboardReleased(#PB_Key_Back) 
          FullText$ = Left(FullText$, Len(FullText$)-1)
        Else
          char$ = KeyboardInkey()
          ; on veirife qu'on a appuyé
          If FindString("1234567890 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzéèçàù.,;:/?!&é(-_)=+#{[|`\^@]}$%", char$) 
            
            FullText$ + char$
          EndIf
        EndIf
          ; on met à jour le sprite pour le texte
          If StartDrawing(SpriteOutput(#sprite_PourEcrireTexte))
            Box(0, 0, OutputWidth(), OutputHeight(), RGB(col1, col1, col1))
            DrawingMode(#PB_2DDrawing_Transparent)
            DrawText(0,0,FullText$)
            StopDrawing()
          EndIf
          
        EndIf
        
      EndIf
      
    
  EndIf
  
  ; on affiche
  DisplaySprite(#sprite_ZoneDeTexte, 0, winh-20-SpriteHeight(#sprite_ZoneDeTexte))
  DisplaySprite(#sprite_PourEcrireTexte, 0, winh-20)
  Delay(1)
  
ForEver

En espérant que ça puisse t'aider ;)
Avatar de l’utilisateur
grendizer
Messages : 59
Inscription : mer. 29/mai/2019 6:29

Re: Input en Drawing 2D

Message par grendizer »

Merci kernadec
PCPixMusic
Messages : 106
Inscription : ven. 06/janv./2017 9:50

Re: Input en Drawing 2D

Message par PCPixMusic »

TazNormand a écrit :@PCPixMusic : J'ai fusionné tes messages ; si possible postes un message avec plusieurs questions au lieu de mettre x messages, surtout si ça concerne un sujet unique.

Autre chose, le UP, c'est bien, mais faut le faire sur un de tes messages, et comme tu le dis si bien : "Passez un bon Week-End" !

On est tous en week-end, voire en vacances pour plusieurs d'entre nous, tu comprendras que les réponses ne vont pas tomber comme ça en 5 minutes.

"Patience est mère de toutes les vertus" dit le dicton 8)
Bonjour TazNormand,

Merci pour ta réponse, je comprends pour les postes.

j'ai fait un up, car pas de réponse au bout de deux jours et je pensais que les week-end sont là où les gens ont plus de temps, car pas au travail.

#########################################################################################################
grendizer a écrit :bonjour PCPixMusic

c'est pour un HighScore d'un jeu?

sinon regarde ça : https://github.com/kennycason/snakes

c'est une version 3.94 de PB mais le gars a codé un setting pour son jeu snake .

si cela peux t'aider .

Bon dimanche
Bonjour grendizer,

Pas du tout, c'est pour continué la création d'une grille graphique ou seul un gadget string serait afficher au moment où la souris active une cellule.

Merci puor ta réponse

Bonjour et merci beaucoup kernadec

J'ai bien créer et ouvert le fichoer .pb à partir du dossier du jeux snack télécharger,
pourtant le compilateur s'obstine à se rendre dans son dossier :

"Ligne 25: Included file not found: /home/fred/Opt/purebasic/snakes-master\/sprites\body.bmp."

Bonjour blendman,

Non c'est pour créer une grille façon tableur en mode graphique.
grendizer a écrit :bonjour PCPixMusic

c'est pour un HighScore d'un jeu?

sinon regarde ça : https://github.com/kennycason/snakes

c'est une version 3.94 de PB mais le gars a codé un setting pour son jeu snake .

si cela peux t'aider .

Bon dimanche
Bonjour grendizer,

Pas du tout, c'est pour continué la création d'une grille graphique ou seul un gadget string serait afficher au moment où la souris active une cellule.

Merci puor ta réponse

Bonjour et merci beaucoup kernadec

J'ai bien créer et ouvert le fichoer .pb à partir du dossier du jeux snack télécharger,
pourtant le compilateur s'obstine à se rendre dans son dossier :

"Ligne 25: Included file not found: /home/fred/Opt/purebasic/snakes-master\/sprites\body.bmp."
Dernière modification par PCPixMusic le lun. 08/mars/2021 10:42, modifié 2 fois.
PCPixMusic
Messages : 106
Inscription : ven. 06/janv./2017 9:50

Re: Input en Drawing 2D

Message par PCPixMusic »

Voici pour le moment le code de ma grille.
Il me manque donc le fait de puovoir afficher une zone de saisie quand je clic sur une cellule.

Donc je peux aussi afficher un StringGadget, mais je ne sais pas comment faire pour que lsoit détecté la sortie de la souris de ce Gadget,
afin de le masqué.

Code : Tout sélectionner

Enumeration
  #Fenetre_Saya
  
  #Label_igne_01
  #Label_igne_02
  #Label_igne_03
  #Label_igne_04
  #Label_igne_05
  #Label_igne_06
  #Label_igne_07
  #Label_igne_08
  #Label_igne_09
  #Label_igne_10
  
  #Label_igne_11
  #Label_igne_12
  #Label_igne_13
  #Label_igne_14
  #Label_igne_15
  #Label_igne_16
  #Label_igne_17
  #Label_igne_18
  #Label_igne_19
  #Label_igne_20
  #Label_igne_21
  #Label_igne_22
  #Label_igne_23
  #Label_igne_24
  #Label_igne_25
  
  #Label_Colonne_01
  #Label_Colonne_02
  #Label_Colonne_03
  #Label_Colonne_04
  #Label_Colonne_05
  #Label_Colonne_06
  #Label_Colonne_07
  #Label_Colonne_08
  #Label_Colonne_09
  #Label_Colonne_10
  
  #Select_All
  
  #ScrollBar
  
  #Menu_SQlite3_Nouvelle_BDD
  #Menu_SQlite3_Ouvrir_BDD
  #Menu_SQlite3_Nouvelle_Fiche_BDD
  #Menu_SQlite3_MAJ_BDD
  #Menu_SQlite3_Quitter
  
  #Menu_Edition_Couper
  #Menu_Edition_Copier
  #Menu_Edition_Coller
  #Menu_Edition_Import_Blob
  
  #Menu_Rechercher
  #Menu_Rechercher_Suivant
  
  #Menu_Aide
  #Menu_A_Propos
  
  #ID_Bouton_close_a_propos
  
  ;==========================================
  #Image_Nouvelle
  #Image_Open
  #Image_Nouvelle_Fiche
  #Image_MAJ_BDD
  #Image_Quitter
  
  #Image_Couper
  #Image_Copier
  #Image_Coller
  #Image_Import_Blob
  
  #Image_Rechercher
  #Image_Rechercher_Suivant
  
  #Image_Aide
  #Image_A_Propos
  ;==========================================
  
  #Fenetre_a_propos
  #TextAPropos1
  #TextAPropos2
  #TextAPropos3
  #TextAPropos4
  
  #Select_Key_Cellule
  #Font_Saya  
  
  #Entree_Cellule
EndEnumeration

Global.s  Label_Colonne_01
Global.s  Label_Colonne_02
Global.s  Label_Colonne_03
Global.s  Label_Colonne_04
Global.s  Label_Colonne_05
Global.s  Label_Colonne_06
Global.s  Label_Colonne_07
Global.s  Label_Colonne_08
Global.s  Label_Colonne_09
Global.s  Label_Colonne_10

;=========================== Largeur des Colonne ===========================

Global.i Largeur_Colonne_01 = 180
Global.i Largeur_Colonne_02 = 180
Global.i Largeur_Colonne_03 = 180
Global.i Largeur_Colonne_04 = 180
Global.i Largeur_Colonne_05 = 180
Global.i Largeur_Colonne_06 = 180
Global.i Largeur_Colonne_07 = 180
Global.i Largeur_Colonne_08 = 180
Global.i Largeur_Colonne_09 = 180
Global.i Largeur_Colonne_10 = 180

;===========================================================================
Global.i ligne_01 = 1
Global.i ligne_02 = 2
Global.i ligne_03 = 3
Global.i ligne_04 = 4
Global.i ligne_05 = 5
Global.i ligne_06 = 6
Global.i ligne_07 = 7
Global.i ligne_08 = 8
Global.i ligne_09 = 9
Global.i ligne_10 = 10
Global.i ligne_11 = 11
Global.i ligne_12 = 12
Global.i ligne_13 = 13
Global.i ligne_14 = 14
Global.i ligne_15 = 15
Global.i ligne_16 = 16
Global.i ligne_17 = 17
Global.i ligne_18 = 18
Global.i ligne_19 = 19
Global.i ligne_20 = 20
Global.i ligne_21 = 21
Global.i ligne_22 = 22
Global.i ligne_23 = 23
Global.i ligne_24 = 24
Global.i ligne_25 = 25

Global.i glEvent, glGadget, glType, Quitter = 0

Global Separateur.s
Global IndexSeparateur.i

Global.i SourisX,SourisY,SourisX_Save,SourisY_Save

;Global Separateur.s = "\" ;Windows
Global Separateur.s = "/" ;Linux

UseOGGSoundDecoder()  ; Utilisation des fichiers Ogg
UseFLACSoundDecoder() ; Utilisation des fichiers Flac

UseJPEG2000ImageDecoder()
UseJPEG2000ImageEncoder()
UseJPEGImageDecoder()
UseJPEGImageEncoder()

UsePNGImageDecoder()
UsePNGImageEncoder()

UseTIFFImageDecoder()
UseTGAImageDecoder()

UseGIFImageDecoder()

InitMouse()

Procedure PosClic(MouseX.i,MouseY.i, x0.i,y0.i,x1.i,y1.i)  
  If MouseX >= x0 And MouseX <= x1 And MouseY >= y0 And MouseY <= y1
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf
EndProcedure

Procedure PosClicFac(MouseX.i,MouseY.i, x0.i,y0.i,x1.i,y1.i)     
  If MouseX >= x0 And MouseX <= x0+x1 And MouseY >= y0 And MouseY <= y0+y1
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf  
EndProcedure

Procedure PosClicCercle(MouseX.i,MouseY.i,x.i,y.i,Radius.i)      
  
  If MouseX >= x And MouseX <= x*Radius And MouseX >= x And MouseX <= x/Radius And      
     MouseY >= y And MouseY <= y*Radius And MouseY >= y And MouseY <= y/Radius 
    
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf  
  
EndProcedure

Procedure PixCadreColor(X1.i,Y1.i,X2.i,Y2.i,Color.i)
  LineXY(X1,Y1,X2,Y1,Color)    
  LineXY(X1,Y1,X1,Y2,Color)  
  LineXY(X2,Y1,X2,Y2,Color)  
  LineXY(X1,Y2,X2,Y2,Color)       
EndProcedure

Procedure CadreCel(X1.i,Y1.i,FacX.i,FacY.i,Color.i)
  LineXY(X1,Y1,X1+FacX,Y1,Color) ;Ligne Horizontale Haut 1
  LineXY(X1,Y1,X1,Y1+FacY,Color) ;Ligne Verticale Gauche 1
  
  LineXY(X1,Y1+1,X1+FacX,Y1+1,Color) ;Ligne Horizontale Haut 2
  LineXY(X1+1,Y1,X1+1,Y1+FacY,Color) ;Ligne Verticale Gauche 2
  
  
  LineXY(X1+FacX-1,Y1,X1+FacX-1,Y1+FacY,Color) ;Ligne Verticale Droite 1
  LineXY(X1,Y1+FacY-1,X1+FacX,Y1+FacY-1,Color) ;Ligne Horizontale Bas 1
  
  LineXY(X1+FacX,Y1,X1+FacX,Y1+FacY,Color) ;Ligne Verticale Droite 2 
  LineXY(X1,Y1+FacY,X1+FacX,Y1+FacY,Color) ;Ligne Horizontale Bas 1
EndProcedure

Procedure TextCadre(X1.i,Y1.i,Texte.s,Color.i)
  Protected X2.i,Y2.i  
  
  X1 = X1 - 20  
  Y1 = Y1 + 17
  
  X2 = X1+100
  Y2 = Y1+25
  
  ;LineXY(X1,Y1,X2,Y1,#Black)    
  ;LineXY(X1,Y1,X1,Y2,#Black)  
  ;LineXY(X2,Y1,X2,Y2,#Black)  
  ;LineXY(X1,Y2,X2,Y2,#Black)       
  DrawingMode(#PB_2DDrawing_Transparent)
  DrawText(X1-40,Y2-45,Texte,Color,#PB_2DDrawing_Transparent)
  
EndProcedure

;============================================================================================================================================================
Procedure Labels_Ligne_Grid(X.i,                                                   
                            Y.i,                     
                            Largeur_Colonne_01.i,
                            Largeur_Colonne_02.i,
                            Largeur_Colonne_03.i,
                            Largeur_Colonne_04.i,
                            Largeur_Colonne_05.i,
                            Largeur_Colonne_06.i,
                            Largeur_Colonne_07.i,
                            Largeur_Colonne_08.i,
                            Largeur_Colonne_09.i,
                            Largeur_Colonne_10.i,                     
                            Hauteur_Cellule.i,
                            Titre_Colone_01.s,
                            Titre_Colone_02.s,
                            Titre_Colone_03.s,
                            Titre_Colone_04.s,
                            Titre_Colone_05.s,
                            Titre_Colone_06.s,
                            Titre_Colone_07.s,
                            Titre_Colone_08.s,
                            Titre_Colone_09.s,
                            Titre_Colone_10.s)
  
  ButtonGadget(#Label_Colonne_01,X,l+Y, Largeur_Colonne_01,Hauteur_Cellule,Titre_Colone_01,#PB_Button_Toggle)
  ButtonGadget(#Label_Colonne_02,X+Largeur_Colonne_01,l+Y_Cellule,Largeur_Colonne_02,Hauteur_Cellule,Titre_Colone_02,#PB_Button_Toggle)
  ButtonGadget(#Label_Colonne_03,X+Largeur_Colonne_01+Largeur_Colonne_02,l+Y,Largeur_Colonne_03,Hauteur_Cellule,Titre_Colone_03,#PB_Button_Toggle)
  ButtonGadget(#Label_Colonne_04,X+Largeur_Colonne_01+Largeur_Colonne_02+Largeur_Colonne_03,l+Y,Largeur_Colonne_04,Hauteur_Cellule,Titre_Colone_04,#PB_Button_Toggle)
  ButtonGadget(#Label_Colonne_05,X+Largeur_Colonne_01+Largeur_Colonne_02+Largeur_Colonne_03+Largeur_Colonne_04,l+Y_Cellule,Largeur_Colonne_05,Hauteur_Cellule,Titre_Colone_05,#PB_Button_Toggle)
  ButtonGadget(#Label_Colonne_06,X+Largeur_Colonne_01+Largeur_Colonne_02+Largeur_Colonne_03+Largeur_Colonne_04+Largeur_Colonne_05,l+Y_Cellule,Largeur_Colonne_06,Hauteur_Cellule,Titre_Colone_06,#PB_Button_Toggle)
  ButtonGadget(#Label_Colonne_07,X+Largeur_Colonne_01+Largeur_Colonne_02+Largeur_Colonne_03+Largeur_Colonne_04+Largeur_Colonne_05+Largeur_Colonne_06,l+Y_Cellule,Largeur_Colonne_07,Hauteur_Cellule,Titre_Colone_07,#PB_Button_Toggle)
  ButtonGadget(#Label_Colonne_08,X+Largeur_Colonne_01+Largeur_Colonne_02+Largeur_Colonne_03+Largeur_Colonne_04+Largeur_Colonne_05+Largeur_Colonne_06+Largeur_Colonne_07,l+Y,Largeur_Colonne_08,Hauteur_Cellule,Titre_Colone_08,#PB_Button_Toggle)
  ButtonGadget(#Label_Colonne_09,X+Largeur_Colonne_01+Largeur_Colonne_02+Largeur_Colonne_03+Largeur_Colonne_04+Largeur_Colonne_05+Largeur_Colonne_06+Largeur_Colonne_07+Largeur_Colonne_08,l+Y,Largeur_Colonne_09,Hauteur_Cellule,Titre_Colone_09,#PB_Button_Toggle)
  ButtonGadget(#Label_Colonne_10,X+Largeur_Colonne_01+Largeur_Colonne_02+Largeur_Colonne_03+Largeur_Colonne_04+Largeur_Colonne_05+Largeur_Colonne_06+Largeur_Colonne_07+Largeur_Colonne_08+Largeur_Colonne_09,l+Y,Largeur_Colonne_10,Hauteur_Cellule,Titre_Colone_10,#PB_Button_Toggle)
EndProcedure

Procedure Affiche_Numeros(index.i)
  Protected.i num
  index = index -1  
  
  SetGadgetText(#Label_igne_01,Str(Index+1))
  SetGadgetText(#Label_igne_02,Str(Index+2))
  SetGadgetText(#Label_igne_03,Str(Index+3))
  SetGadgetText(#Label_igne_04,Str(Index+4))
  SetGadgetText(#Label_igne_05,Str(Index+5))
  SetGadgetText(#Label_igne_06,Str(Index+6))
  SetGadgetText(#Label_igne_07,Str(Index+7))
  SetGadgetText(#Label_igne_08,Str(Index+8))
  SetGadgetText(#Label_igne_09,Str(Index+9))
  SetGadgetText(#Label_igne_10,Str(Index+10))  
  
  SetGadgetText(#Label_igne_11,Str(Index+11))
  SetGadgetText(#Label_igne_12,Str(Index+12))
  SetGadgetText(#Label_igne_13,Str(Index+13))
  SetGadgetText(#Label_igne_14,Str(Index+14))
  SetGadgetText(#Label_igne_15,Str(Index+15))
  SetGadgetText(#Label_igne_16,Str(Index+16))
  SetGadgetText(#Label_igne_17,Str(Index+17))
  SetGadgetText(#Label_igne_18,Str(Index+18))
  SetGadgetText(#Label_igne_19,Str(Index+19))
  SetGadgetText(#Label_igne_20,Str(Index+20))
  
  SetGadgetText(#Label_igne_21,Str(Index+21))
  SetGadgetText(#Label_igne_22,Str(Index+22))
  SetGadgetText(#Label_igne_23,Str(Index+23))
  SetGadgetText(#Label_igne_24,Str(Index+24))
  SetGadgetText(#Label_igne_25,Str(Index+25))
  
EndProcedure

Procedure Grid()  
  Protected.i Largeur_Label = 60
  Protected.i Hauteur_Cellule = 20
  Protected.i j = 0   
  Protected.i X = 0
  Protected.i Y = 0    
  
  Protected.i Largeur_Colonne_01 = 180
  Protected.i Largeur_Colonne_02 = 180
  Protected.i Largeur_Colonne_03 = 180
  Protected.i Largeur_Colonne_04 = 180
  Protected.i Largeur_Colonne_05 = 180
  Protected.i Largeur_Colonne_06 = 180
  Protected.i Largeur_Colonne_07 = 180
  Protected.i Largeur_Colonne_08 = 180
  Protected.i Largeur_Colonne_09 = 180
  Protected.i Largeur_Colonne_10 = 180
  
  ButtonGadget(#Select_All,0,0,60,50,"",#PB_Button_Toggle)
  
  Labels_Ligne_Grid(X+Largeur_Label,                             
                    Y,                     
                    Largeur_Colonne_01,
                    Largeur_Colonne_02,
                    Largeur_Colonne_03,
                    Largeur_Colonne_04,
                    Largeur_Colonne_05,
                    Largeur_Colonne_06,
                    Largeur_Colonne_07,
                    Largeur_Colonne_08,
                    Largeur_Colonne_09,
                    Largeur_Colonne_10,                     
                    Hauteur_Cellule,
                    "Prenom",
                    "Nom",
                    "Enteprise",
                    "Adresse",
                    "Code postal",
                    "Ville",
                    "Pays",
                    "Téléphone",
                    "E-Mail",
                    "Site")
  
  ;=========== Labels de la colonne 0 ===========
  ButtonGadget(#Label_igne_01, X,Y+33 ,Largeur_Label,20,Str(ligne_01),#PB_Button_Toggle)
  ButtonGadget(#Label_igne_02, X,Y+66 ,Largeur_Label,20,Str(ligne_02),#PB_Button_Toggle)
  ButtonGadget(#Label_igne_03, X,Y+99 ,Largeur_Label,20,Str(ligne_03),#PB_Button_Toggle)
  ButtonGadget(#Label_igne_04, X,Y+132,Largeur_Label,20,Str(ligne_04),#PB_Button_Toggle)
  ButtonGadget(#Label_igne_05, X,Y+165,Largeur_Label,20,Str(ligne_05),#PB_Button_Toggle)
  ButtonGadget(#Label_igne_06, X,Y+198,Largeur_Label,20,Str(ligne_06),#PB_Button_Toggle)
  ButtonGadget(#Label_igne_07, X,Y+231,Largeur_Label,20,Str(ligne_07),#PB_Button_Toggle)
  ButtonGadget(#Label_igne_08, X,Y+264,Largeur_Label,20,Str(ligne_08),#PB_Button_Toggle)
  ButtonGadget(#Label_igne_09, X,Y+297,Largeur_Label,20,Str(ligne_09),#PB_Button_Toggle)
  ButtonGadget(#Label_igne_10, X,Y+330,Largeur_Label,20,Str(ligne_10),#PB_Button_Toggle)
  ButtonGadget(#Label_igne_11, X,Y+363,Largeur_Label,20,Str(ligne_11),#PB_Button_Toggle)
  ButtonGadget(#Label_igne_12, X,Y+396,Largeur_Label,20,Str(ligne_12),#PB_Button_Toggle)
  ButtonGadget(#Label_igne_13, X,Y+429,Largeur_Label,20,Str(ligne_13),#PB_Button_Toggle)
  ButtonGadget(#Label_igne_14, X,Y+462,Largeur_Label,20,Str(ligne_14),#PB_Button_Toggle)
  ButtonGadget(#Label_igne_15, X,Y+495,Largeur_Label,20,Str(ligne_15),#PB_Button_Toggle)
  ButtonGadget(#Label_igne_16, X,Y+528,Largeur_Label,20,Str(ligne_16),#PB_Button_Toggle)
  ButtonGadget(#Label_igne_17, X,Y+561,Largeur_Label,20,Str(ligne_17),#PB_Button_Toggle)
  ButtonGadget(#Label_igne_18, X,Y+594,Largeur_Label,20,Str(ligne_18),#PB_Button_Toggle)
  ButtonGadget(#Label_igne_19, X,Y+627,Largeur_Label,20,Str(ligne_19),#PB_Button_Toggle)
  ButtonGadget(#Label_igne_20, X,Y+660,Largeur_Label,20,Str(ligne_20),#PB_Button_Toggle)
  ButtonGadget(#Label_igne_21, X,Y+693,Largeur_Label,20,Str(ligne_21),#PB_Button_Toggle)
  ButtonGadget(#Label_igne_22, X,Y+726,Largeur_Label,20,Str(ligne_22),#PB_Button_Toggle)
  ButtonGadget(#Label_igne_23, X,Y+759,Largeur_Label,20,Str(ligne_23),#PB_Button_Toggle)
  ButtonGadget(#Label_igne_24, X,Y+792,Largeur_Label,20,Str(ligne_24),#PB_Button_Toggle)
  ButtonGadget(#Label_igne_25, X,Y+825,Largeur_Label,20,Str(ligne_25),#PB_Button_Toggle)
  
  ;=========== Nombres de Lignes 
  If StartDrawing(CanvasOutput(#Fenetre_Saya))      
    
    BackColor(RGB(255,255,255)) 
    FrontColor(RGB(0, 0, 0))
    
    Box(0,0,1867,900,RGB(255,255,255))  
    
    For x = 60 To 1880 Step 180
      LineXY(x,0,x,860)
    Next  
    
    For y = 33 To 900 Step 33
      LineXY(60,y,1860,y)
    Next
    
    StopDrawing()
  EndIf
  
EndProcedure

Procedure Menu()
  If LoadImage(#Image_Nouvelle,"Icons/Flou.png")  
    ResizeImage(#Image_Nouvelle,16,16)    
  EndIf
  
  If LoadImage(#Image_Open,"Icons/Open.png")  
    ResizeImage(#Image_Open,16,16)    
  EndIf
  
  If LoadImage(#Image_Nouvelle_Fiche,"Icons/Flou.png")  
    ResizeImage(#Image_Nouvelle_Fiche,16,16)    
  EndIf
  
  If LoadImage(#Image_MAJ_BDD,"Icons/Pal.png")  
    ResizeImage(#Image_MAJ_BDD,16,16)    
  EndIf
  
  If LoadImage(#Image_Quitter,"Icons/Flou_Gris.png")  
    ResizeImage(#Image_Quitter,16,16)    
  EndIf
  
  ;=============================================================================================
  
  If LoadImage(#Image_Couper,"Icons/Open_Blob.png")  
    ResizeImage(#Image_Couper,16,16)    
  EndIf
  
  If LoadImage(#Image_Copier,"Icons/Open_Blob.png")  
    ResizeImage(#Image_Copier,16,16)    
  EndIf
  
  If LoadImage(#Image_Coller,"Icons/Open_Blob.png")  
    ResizeImage(#Image_Coller,16,16)    
  EndIf
  
  If LoadImage(#Image_Import_Blob,"Icons/Open_Blob.png")  
    ResizeImage(#Image_Import_Blob,16,16)    
  EndIf
  
  ;=============================================================================================
  
  If LoadImage(#Image_Rechercher,"Icons/Open_Blob.png")  
    ResizeImage(#Image_Rechercher,16,16)    
  EndIf
  
  If LoadImage(#Image_Rechercher_Suivant,"Icons/Open_Blob.png")  
    ResizeImage(#Image_Rechercher_Suivant,16,16)    
  EndIf
  ;=============================================================================================
  
  If LoadImage(#Image_Aide,"Icons/Open_Blob.png")  
    ResizeImage(#Image_Aide,16,16)    
  EndIf
  
  If LoadImage(#Image_A_Propos,"Icons/A_Propos.png")  
    ResizeImage(#Image_A_Propos,16,16)    
  EndIf
  
  ;=============================================================================================
  
  If CreateImageMenu(#Fenetre_Saya,WindowID(#Fenetre_Saya), #PB_Menu_ModernLook) 
    MenuTitle("SQlite3")
    MenuItem(#Menu_SQlite3_Nouvelle_BDD,"Nouvelle BDD"+Chr(9)+"Ctrl+N",ImageID(#Image_Nouvelle))
    MenuItem(#Menu_SQlite3_Ouvrir_BDD,"Ouvrir"+Chr(9)+"Ctrl+O",ImageID(#Image_Open))      
    MenuItem(#Menu_SQlite3_Nouvelle_Fiche_BDD,"Nouvelle fiche BDD"+Chr(9)+"Ctrl+F",ImageID(#Image_Nouvelle_Fiche))
    MenuItem(#Menu_SQlite3_MAJ_BDD,"Mise a jour d'une BDD"+Chr(9)+"Ctrl+M",ImageID(#Image_MAJ_BDD))
    MenuBar()  ;la barre de séparation sera insérée ici
    MenuItem(#Menu_SQlite3_Quitter,"Quitter Saya"+Chr(9)+"Ctrl+Q",ImageID(#Image_Quitter))      
    ;===============================================================================================
    MenuTitle("Edition")
    MenuItem(#Menu_Edition_Couper,"Couper"+Chr(9)+"Ctrl+X",ImageID(#Image_Couper))      
    MenuItem(#Menu_Edition_Copier,"Copier"+Chr(9)+"Ctrl+C",ImageID(#Image_Copier))      
    MenuItem(#Menu_Edition_Coller,"Coller"+Chr(9)+"Ctrl+V",ImageID(#Image_Coller))            
    MenuBar()  ;la barre de séparation sera insérée ici
    MenuItem(#Menu_Edition_Import_Blob,"Importer une image blob ..."+Chr(9)+"Ctrl+I",ImageID(#Image_Import_Blob))
    ;===============================================================================================
    MenuTitle("Rechercher")
    MenuItem(#Menu_Rechercher,"Couper"+Chr(9)+"Ctrl+R",ImageID(#Image_Rechercher))      
    MenuItem(#Menu_Rechercher_Suivant,"Copier"+Chr(9)+"F3",ImageID(#Image_Rechercher_Suivant))      
    ;===============================================================================================
    MenuTitle("Aide")
    MenuItem(#Menu_Aide,"Ade"+Chr(9)+"F1",ImageID(#Image_Aide))      
    MenuItem(#Menu_A_Propos,"A Propos"+Chr(9)+"Ctrl+A",ImageID(#Image_A_Propos))      
    ;===============================================================================================
    
  EndIf
  
EndProcedure

;==============================================================================================================

Procedure Fenetre_Saya()
  Protected.i ajuste_bar_linux = 60
  Protected.i taille_linux = 47
  
  If OpenWindow(#Fenetre_Saya, 0,0,1874,910, "Notysoft Saya - Gestion de Contacts - 2016 - 2021",  #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered )              
    CanvasGadget(#Fenetre_Saya,0,0,1874,859, #PB_Canvas_Container)
    
    Menu()
    Grid()     
    
    ScrollBarGadget(#ScrollBar, 1861, 1, 12, 860 ,0, 1450, 50, #PB_ScrollBar_Vertical) 
    
    AddKeyboardShortcut(#Fenetre_Saya,#PB_Shortcut_Return,#Select_Key_Cellule)
    
    ;StringGadget(#Entree_Cellule,62,35,177,30,"",#PB_String_BorderLess)
    
    ;Debug GetGadgetState(#ScrollBar)  
    
  EndIf
  
EndProcedure


Procedure Main()
  Repeat         
    
    If StartDrawing(CanvasOutput(#Fenetre_Saya))                  
      BackColor(RGB(255,255,255)) 
      FrontColor(RGB(0, 0, 0))
      
      If GetGadgetState(#ScrollBar) < 35      
        Affiche_Numeros(1)
      EndIf
      
      ;========================================================
      
      If GetGadgetState(#ScrollBar) > 70      
        Affiche_Numeros(26)
      EndIf
      
      If GetGadgetState(#ScrollBar) > 105
        Affiche_Numeros(51)
      EndIf
      
      If GetGadgetState(#ScrollBar) > 140     
        Affiche_Numeros(76)
      EndIf
      
      If GetGadgetState(#ScrollBar) > 175      
        Affiche_Numeros(101)
      EndIf
      
      ;========================================================
      If GetGadgetState(#ScrollBar) > 210      
        Affiche_Numeros(126)
      EndIf        
      
      If GetGadgetState(#ScrollBar) > 245
        Affiche_Numeros(151)
      EndIf
      
      If GetGadgetState(#ScrollBar) > 280
        Affiche_Numeros(176)
      EndIf
      
      If GetGadgetState(#ScrollBar) > 315      
        Affiche_Numeros(201)
      EndIf
      
      ;========================================================
      
      If GetGadgetState(#ScrollBar) > 350  
        Affiche_Numeros(226)
      EndIf        
      
      If GetGadgetState(#ScrollBar) > 385
        Affiche_Numeros(251)
      EndIf
      
      If GetGadgetState(#ScrollBar) > 420
        Affiche_Numeros(276)
      EndIf
      
      If GetGadgetState(#ScrollBar) > 455      
        Affiche_Numeros(301)
      EndIf
      
      ;========================================================
      
      If GetGadgetState(#ScrollBar) > 490      
        Affiche_Numeros(326)
      EndIf
      
      If GetGadgetState(#ScrollBar) > 525      
        Affiche_Numeros(351)
      EndIf        
      
      If GetGadgetState(#ScrollBar) > 560      
        Affiche_Numeros(376)
      EndIf
      
      If GetGadgetState(#ScrollBar) > 595
        Affiche_Numeros(401)
      EndIf
      
      ;========================================================
      
      If GetGadgetState(#ScrollBar) > 630      
        Affiche_Numeros(426)
      EndIf
      
      If GetGadgetState(#ScrollBar) > 665      
        Affiche_Numeros(451)
      EndIf
      
      If GetGadgetState(#ScrollBar) > 700
        Affiche_Numeros(476)
      EndIf        
      
      If GetGadgetState(#ScrollBar) > 735
        Affiche_Numeros(501)
      EndIf
      
      ;========================================================
      
      If GetGadgetState(#ScrollBar) > 770
        Affiche_Numeros(526)
      EndIf
      
      If GetGadgetState(#ScrollBar) > 805      
        Affiche_Numeros(551)
      EndIf
      
      If GetGadgetState(#ScrollBar) > 840      
        Affiche_Numeros(576)
      EndIf
      
      If GetGadgetState(#ScrollBar) > 875      
        Affiche_Numeros(601)
      EndIf
      
      ;========================================================
      
      If GetGadgetState(#ScrollBar) > 910
        Affiche_Numeros(626)
      EndIf
      
      If GetGadgetState(#ScrollBar) > 945      
        Affiche_Numeros(651)
      EndIf
      
      If GetGadgetState(#ScrollBar) > 980      
        Affiche_Numeros(676)
      EndIf
      
      If GetGadgetState(#ScrollBar) > 1015      
        Affiche_Numeros(601)
      EndIf
      
      ;========================================================
      
      If GetGadgetState(#ScrollBar) > 1050
        Affiche_Numeros(726)
      EndIf
      
      If GetGadgetState(#ScrollBar) > 1085      
        Affiche_Numeros(751)
      EndIf
      
      If GetGadgetState(#ScrollBar) > 1120     
        Affiche_Numeros(776)
      EndIf
      
      If GetGadgetState(#ScrollBar) > 1155      
        Affiche_Numeros(801)
      EndIf
      
      ;========================================================
      
      If GetGadgetState(#ScrollBar) > 1190
        Affiche_Numeros(826)
      EndIf
      
      If GetGadgetState(#ScrollBar) > 1225      
        Affiche_Numeros(851)
      EndIf
      
      If GetGadgetState(#ScrollBar) > 1260     
        Affiche_Numeros(876)
      EndIf        
      
      ;========================================================
      
      If GetGadgetState(#ScrollBar) > 1295
        Affiche_Numeros(901)
      EndIf
      
      If GetGadgetState(#ScrollBar) > 1330
        Affiche_Numeros(926)
      EndIf
      
      If GetGadgetState(#ScrollBar) > 1365      
        Affiche_Numeros(951)
      EndIf
      
      If GetGadgetState(#ScrollBar) > 1400    
        Affiche_Numeros(976)
      EndIf        
      
      ;========================================================
      
      StopDrawing()
    EndIf    
    
    
    Select WaitWindowEvent()
        
        ;Case  #PB_EventType_MouseWheel
        ;  MessageRequester("",Str(#PB_Canvas_WheelDelta))      
        
      Case #PB_Event_Gadget    
        Select EventGadget()                   
            
          Case #Fenetre_Saya          
            
            SourisX = GetGadgetAttribute(#Fenetre_Saya, #PB_Canvas_MouseX)
            SourisY = GetGadgetAttribute(#Fenetre_Saya, #PB_Canvas_MouseY)            
            
        EndSelect
        
        Select EventType()
          Case #PB_EventType_MouseMove                
            
            LoadFont(#Font_Saya, "Arial", 14)
            
            If StartDrawing(CanvasOutput(#Fenetre_Saya))      
              DrawingFont(FontID(#Font_Saya))
              BackColor(RGB(255,255,255)) 
              FrontColor(RGB(0, 0, 0))
              SourisX_Save = SourisX
              SourisY_Save = SourisY
              DrawText(70,40,""+SourisX_Save+" "+SourisY_Save) 
              StopDrawing()            
            EndIf            
            
          Case #PB_EventType_LeftButtonDown
            
            For j = 0 To 1867 Step 180      
              For i = 0 To 800 Step 33             
                
                If PosClicFac(SourisX,SourisY,60+j,34+i,180,33)            
                  If StartDrawing(CanvasOutput(#Fenetre_Saya))      
                    BackColor(RGB(255,255,255)) 
                    FrontColor(RGB(0, 0, 0))
                    
                    Box(0,0,1867,900,RGB(255,255,255))  
                    For x = 60 To 1880 Step 180
                      LineXY(x,0,x,860)
                    Next  
                    
                    For y = 33 To 900 Step 33
                      LineXY(60,y,1860,y)
                    Next      
                    
                    CadreCel(60+j,34+i,179,31,#Black)
                    
                    StopDrawing()            
                  EndIf 
                EndIf 
              Next  
            Next      
            
          Case #PB_EventType_RightButtonDown          
            
            If PosClicFac(SourisX,SourisY,70,30,1874,910) 
              If StartDrawing(CanvasOutput(#Fenetre_Saya))           
                BackColor(RGB(255,255,255)) 
                FrontColor(RGB(0, 0, 0))
                Box(0,0,1867,900,RGB(255,255,255))  
                For x = 60 To 1880 Step 180
                  LineXY(x,0,x,860)
                Next  
                
                For y = 33 To 900 Step 33
                  LineXY(60,y,1860,y)
                Next      
                StopDrawing()
              EndIf 
            EndIf                
            
        EndSelect            
        
      Case #PB_Event_Menu      ; Un élément du menu a été sélectionné
        Select EventMenu()     ; On recupère le numéro de cet élement...
                               ;Case #Menu_SQlite3_Ouvrir_BDD = 1002
                               ;Case #Menu_SQlite3_Nouvelle_Fiche_BDD = 1003
                               ;Case #Menu_SQlite3_MAJ_BDD = 1004                
          Case #Menu_SQlite3_Quitter : End
          Case #Menu_A_Propos : MessageRequester("A Propos",#CRLF$+"Notysoft Saya - 2019 - 2021 - v1.00"+#CRLF$+"Gestionnaire de contacts SQLite3.")                
            
            Case #Select_Key_Cellule
                StringGadget(#Entree_Cellule,62,35,177,30,"",#PB_String_BorderLess)
            ;CadreCel(60+j,34+i,179,31,#Black)
            ;MessageRequester("Position de la souris","Je suis la touche entrée en ("+SourisX_Save+":"+SourisY_Save+")")
            
        EndSelect          
        
      Case #PB_Event_CloseWindow
        Select EventWindow()             
          Case #Fenetre_Saya : End
        EndSelect
        
    EndSelect          
  Until Event = #PB_Event_CloseWindow  
EndProcedure

Fenetre_Saya()

Main()
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: Input en Drawing 2D

Message par Shadow »

Salut, ya pas les images, fait un zip.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
kernadec
Messages : 1594
Inscription : ven. 25/avr./2008 11:14

Re: Input en Drawing 2D

Message par kernadec »

salut PCPixMusic
Envoye tes images sur ce site
https://www.zupimages.net/
ensuite il faut utiliser 3ème lien et l'image s'affichera dans ton message
cordialement
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Input en Drawing 2D

Message par blendman »

SAlut

dans ton code, tu as beaucoup de ligne qui se répète, tu devrais utiliser des boucles next -for, ça allégerait ton code.

exemple, au lieu de ça :

Code : Tout sélectionner

SetGadgetText(#Label_igne_01,Str(Index+1))
  SetGadgetText(#Label_igne_02,Str(Index+2))
  SetGadgetText(#Label_igne_03,Str(Index+3))
  SetGadgetText(#Label_igne_04,Str(Index+4))
  SetGadgetText(#Label_igne_05,Str(Index+5))
  SetGadgetText(#Label_igne_06,Str(Index+6))
  SetGadgetText(#Label_igne_07,Str(Index+7))
  SetGadgetText(#Label_igne_08,Str(Index+8))
  SetGadgetText(#Label_igne_09,Str(Index+9))
  SetGadgetText(#Label_igne_10,Str(Index+10)) 
 
  SetGadgetText(#Label_igne_11,Str(Index+11))
  SetGadgetText(#Label_igne_12,Str(Index+12))
  SetGadgetText(#Label_igne_13,Str(Index+13))
  SetGadgetText(#Label_igne_14,Str(Index+14))
  SetGadgetText(#Label_igne_15,Str(Index+15))
  SetGadgetText(#Label_igne_16,Str(Index+16))
  SetGadgetText(#Label_igne_17,Str(Index+17))
  SetGadgetText(#Label_igne_18,Str(Index+18))
  SetGadgetText(#Label_igne_19,Str(Index+19))
  SetGadgetText(#Label_igne_20,Str(Index+20))
 
  SetGadgetText(#Label_igne_21,Str(Index+21))
  SetGadgetText(#Label_igne_22,Str(Index+22))
  SetGadgetText(#Label_igne_23,Str(Index+23))
  SetGadgetText(#Label_igne_24,Str(Index+24))
  SetGadgetText(#Label_igne_25,Str(Index+25))
Tu pourrais faire ça :

Code : Tout sélectionner

For i= 1 to 25
     SetGadgetText(#Label_igne_01+i,Str(Index+i))
Next i
D'ailleurs, au lieu d'utiliser plusieurs Global.s Label_Colonne_0x
tu pourrais aussi utiliser un tableau :

AU lieu de ça :

Code : Tout sélectionner

Global.s  Label_Colonne_01
Global.s  Label_Colonne_02
Global.s  Label_Colonne_03
Global.s  Label_Colonne_04
Global.s  Label_Colonne_05
Global.s  Label_Colonne_06
Global.s  Label_Colonne_07
Global.s  Label_Colonne_08
Global.s  Label_Colonne_09
Global.s  Label_Colonne_10

;=========================== Largeur des Colonne ===========================

Global.i Largeur_Colonne_01 = 180
Global.i Largeur_Colonne_02 = 180
Global.i Largeur_Colonne_03 = 180
Global.i Largeur_Colonne_04 = 180
Global.i Largeur_Colonne_05 = 180
Global.i Largeur_Colonne_06 = 180
Global.i Largeur_Colonne_07 = 180
Global.i Largeur_Colonne_08 = 180
Global.i Largeur_Colonne_09 = 180
Global.i Largeur_Colonne_10 = 180
Tu aurais ça :

Code : Tout sélectionner

Global.s  dim Label_Colonne(10)

For i=1 to 10
    Label_Colonne(i) = 180
Next
Au lieu de ça :

Code : Tout sélectionner

Global.i ligne_01 = 1
Global.i ligne_02 = 2
Global.i ligne_03 = 3
Global.i ligne_04 = 4
Global.i ligne_05 = 5
Global.i ligne_06 = 6
Global.i ligne_07 = 7
Global.i ligne_08 = 8
Global.i ligne_09 = 9
Global.i ligne_10 = 10
Global.i ligne_11 = 11
Global.i ligne_12 = 12
Global.i ligne_13 = 13
Global.i ligne_14 = 14
Global.i ligne_15 = 15
Global.i ligne_16 = 16
Global.i ligne_17 = 17
Global.i ligne_18 = 18
Global.i ligne_19 = 19
Global.i ligne_20 = 20
Global.i ligne_21 = 21
Global.i ligne_22 = 22
Global.i ligne_23 = 23
Global.i ligne_24 = 24
Global.i ligne_25 = 25
Tu pourrais faire ça aussi :

Code : Tout sélectionner

Global.i dim ligne_(25)

For i=1 to 25
    ligne_(i) = i
Next 
ça te permet d'avoir un code plus compact, plus facile à modifier, à comprendre, etc ;).
PCPixMusic
Messages : 106
Inscription : ven. 06/janv./2017 9:50

Re: Input en Drawing 2D

Message par PCPixMusic »

kernadec a écrit :salut PCPixMusic
Envoye tes images sur ce site
https://www.zupimages.net/
ensuite il faut utiliser 3ème lien et l'image s'affichera dans ton message
cordialement
Merci, pour faire un screen du programme exécuté ?

Il ne manque plus que de pouvoir saisir une donnée dans la case sélectionné, et en améliorant et simplifiant le tout,
Il reste tout à faire encore, mais ça fera une grille simple puor créer des base de données, tableur ou autre. ^^

Une fois que les fonctions de base de cette grilles sont opérationnelles, je pourrais mettre en place la gestion d ela base de données SQlite.

Image
Dernière modification par PCPixMusic le lun. 08/mars/2021 20:29, modifié 5 fois.
Répondre