Suis pas venue depuis un moment.
Je travail actuellement sur un projet.
J'aimerais faire un Rad Maker.
Je travail avec une personne du forum pour tenté d'y parvenir.
Il ne fais pas à ma place, c'est moi qui fais, lui il m'aide juste à améliorer, me dire comment faire, me filer un coup de main.
Ya beaucoup de travail mais je suis motivé grâce à cette personne justement qui sans lui je ne ferais pas
Il saura se reconnaitre j'en suis certain.
Je vous propose pour commencer, un code avec une fenêtre ainsi qu'une grille et tout ça paramétrable.
A partir de la ligne 139, ces paramètres actuels peuvent être changés:
Code : Tout sélectionner
\Int_CouleurArrierePlant = RGB(255, 255, 255) ; La couleur d'arrière plan du Canvas.
\Int_AfficherGrille = #True ; #True pour afficher la grille.
\Int_TypeFormes = 1 ; Type de Forme voulue: Type de Forme voulue: 1 = Carré plein, 2 = Carré arrondi plein, 3 = Rond plein, 4 = Carré vide, 5 = Carré arrondi vide, 6 = Rond vide.
\Int_EspaceFormes = 5 ; L'espace entre les Formes.
\Int_TailleFormes = 1 ; La taille des Formes.
\Int_CouleurFormes = RGB(0, 0, 255) ; La couleur des Formes.
\Int_ArrondissementFormes = 1 ; Le degré d'arrondissement des Formes si le type est égale à 2 ou 5.
de la taille indiqué en prenant en compte la taille des forme de la grille pour que ce soit homogène.
Testez différente possibilités.
Dites-moi se que vous en pensez, si vous avez des idées etc.
Ceci n'est qu'une prémisse (Avant gout) de mon Rad Maker.
Mais qu'est se que Rad Maker ?
Rapide Application Développement Création
Rad Maker vous permettra facilement de concevoir une application ayant besoin de certain outils.
Par exemple tous se qui est création, redimensionnement, déplacement, copie, coupage, collage, suppression d'objet.
A la manière d'un éditeur visuel.
Il est fastidieux de créer se genre de chose, Rad Maker servira entre autre à ça mais pas que.
Je ne sais pas trop ou tous ça va me mener mais j'y travail !
J'aurais aimer également faire des "Fenêtre aiment able"
Mais cella semble ardus...
En gros ont as X fenêtre au choix qu'on choisie dans son programme
et celle-ci aurait la faculté de pouvoir s’aimanter...
Elle prendrait en compte non seulement leur taille mais aussi celle des autres.
Ainsi, il serait facile de prendre une fenêtre et la "Clipsé" si je puis dire, sur une autre.
Bref compliqué à expliquer comme ça.
Code : Tout sélectionner
; Code créé Monsieur Dieppedalle David le 25/04/2016.
; Orthographe corrigé par Monsieur Michel Lye.
; Canvas avec une grille personnalisable.
EnableExplicit
;{ Enumérations
Enumeration Windows
#FenetrePrincipale
#Canvas
EndEnumeration
;}
;{ Structures
Structure FenetrePrincipaleProprietes
Int_Numero.i ; Le numéro de la fenêtre (Enumération).
Int_ID.i ; Le numéro d'identifiant de la fenêtre.
Titre.s ; Le titre (Texte) de la fenêtre.
Int_X.i ; La position X de la fenêtre.
Int_Y.i ; La position Y de la fenêtre.
Int_Largeur.i ; La Largeur de la fenêtre.
Int_Hauteur.i ; La Largeur de la fenêtre.
Int_LargeurMinimum.i ; La Largeur Minimum que doit faire la fenêtre.
Int_HauteurMinimum.i ; La Hauteur Minimum que doit faire la fenêtre.
Int_LargeurMaximum.i ; La Largeur Maximum que doit faire la fenêtre.
Int_HauteurMaximum.i ; La Hauteur Maximum que doit faire la fenêtre.
Int_Option.i ; Les options de la fenêtre.
EndStructure
Structure CanvasProprietes
Int_Numero.i ; Le numéro de la fenêtre (Enumération).
Int_ID.i ; Le numéro d'identifiant de la fenêtre.
Int_X.i ; La position X du Canvas.
Int_Y.i ; La position Y du Canvas.
Int_Largeur.i ; La Largeur du Canvas.
Int_Hauteur.i ; La Hauteur du Canvas.
Int_Image.i ; Le numéro de l'image du Canvas qui sert pour dessiner la grille, la sélection et les objets.
Int_CouleurArrierePlant.i ; La couleur d'arrière plan du Canvas.
Int_AfficherGrille.b ; #True pour afficher la grille.
IntAimenterGrille.b ; #True pour aimanter la grille.
Int_TypeFormes.i ; Type de Forme voulue: Type de Forme voulue: 1 = Carré plein, 2 = Carré arrondi plein, 3 = Rond plein, 4 = Carré vide, 5 = Carré arrondi vide, 6 = Rond vide.
Int_EspaceFormes.i ; L'espace entre les Formes.
Int_TailleFormes.i ; La taille des Formes.
Int_CouleurFormes.i; La couleur des Formes.
Int_ArrondissementFormes.i ; Le degré d'arrondissement des Formes si le type est égal à 2 ou 5.
Int_Xsouris.i ; La position X de la souris sur le Canvas.
Int_Ysouris.i ; La position Y de la souris sur le Canvas.
Int_CliqueXsouris.i ; La position X du clic de la souris sur le Canvas.
Int_CliqueYsouris.i ; La position Y du clic de la souris sur le Canvas.
EndStructure
Structure SelectionProprietes
Int_TypeSelection.i ; Type de sélection voulue: 1 = Points, 2 = Carrés, 3 = Tirets.
Int_EspaceSelection.i ; L'espace entre les Points / Carrés / Tirets de la sélection.
Int_TailleSelection.i ; L'épaisseur des Points / Carrés / Tirets de la sélection.
Int_CouleurSelection.i; La couleur de la sélection.
Int_SelectionXsouris.i ; La position X de la sélection.
Int_SelectionYsouris.i ; La position Y de la sélection.
Int_SelectionLargeur.i ; La Largeur de la sélection.
Int_SelectionHauteur.i ; La Hauteur de la sélection.
EndStructure
;}
;{ Variables globales, Listes, Tableaux, Maps
Global StructureFenetrePrincipale.FenetrePrincipaleProprietes
Global StructureCanvas.CanvasProprietes
Global StructureSelection.SelectionProprietes
;}
;{ Initialisations et Réglages du programme
With StructureFenetrePrincipale
\Int_Numero = #FenetrePrincipale ; Le numéro de la fenêtre (Enumération).
\Int_ID = 0 ; Le numéro d'identifiant de la fenêtre.
\Titre = "Fenêtre avec Grille personnalisé." ; Le titre (Texte) de la fenêtre.
\Int_X = 0 ; La position X de la fenêtre.
\Int_Y = 0 ; La position Y de la fenêtre.
\Int_LargeurMinimum.i = 200 ; La Largeur Minimum que doit faire la fenêtre.
\Int_HauteurMinimum.i = 150 ; La Hauteur Minimum que doit faire la fenêtre.
\Int_LargeurMaximum.i = #PB_Default ; La Largeur Maximum que doit faire la fenêtre.
\Int_HauteurMaximum.i = #PB_Default ; La Hauteur Maximum que doit faire la fenêtre.
\Int_Largeur = 800 ; La Largeur de la fenêtre.
\Int_Hauteur = 600 ; La Hauteur de la fenêtre.
\Int_Option = #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_ScreenCentered ; Les options de la fenêtre.
EndWith
With StructureCanvas
\Int_Numero = #Canvas ; Le numéro du Canvas (Enumération).
\Int_ID = 0 ; Le numéro d'identifiant du Canvas.
\Int_X = 0 ; La position X du Canvas.
\Int_Y = 0 ; La position Y du Canvas.
\Int_Largeur = 800 ; La Largeur du Canvas.
\Int_Hauteur = 600 ; La Hauteur du Canvas.
\Int_Image = 1 ; Le numéro de l'image du Canvas qui sert pour dessiner la grille, la sélection et les objets.
\Int_CouleurArrierePlant = RGB(255, 255, 255) ; La couleur d'arrière plan du Canvas.
\Int_AfficherGrille = #True ; #True pour afficher la grille.
\IntAimenterGrille = #True ; #True pour aimenter la grille.
\Int_TypeFormes = 1 ; Type de Forme voulue: Type de Forme voulue: 1 = Carré plein, 2 = Carré arrondi plein, 3 = Rond plein, 4 = Carré vide, 5 = Carré arrondi vide, 6 = Rond vide.
\Int_EspaceFormes = 5 ; L'espace entre les Formes.
\Int_TailleFormes = 1 ; La taille des Formes.
\Int_CouleurFormes = RGB(0, 0, 255) ; La couleur des Formes.
\Int_ArrondissementFormes = 1 ; Le degré d'arrondissement des Formes si le type est égale à 2 ou 5.
\Int_Xsouris = 0 ; La position X de la souris sur le Canvas.
\Int_Ysouris = 0 ; La position Y de la souris sur le Canvas.
\Int_CliqueXsouris = 0 ; La position X du clic de la souris sur le Canvas.
\Int_CliqueYsouris = 0 ; La position Y du clic de la souris sur le Canvas.
EndWith
With StructureSelection
\Int_TypeSelection = 1 ; Type de sélection voulue: 1 = Points, 2 = Carrés, 3 = Tirets.
\Int_EspaceSelection = 10 ; L'espace entre les Points / Carrés / Tirets de la sélection.
\Int_TailleSelection = 1 ; L'épaisseur des Points / Carrés / Tirets de la sélection.
\Int_CouleurSelection = RGB(0, 0, 255) ; La couleur de la sélection.
\Int_SelectionXsouris = 0 ; La position X de la sélection.
\Int_SelectionYsouris = 0 ; La position Y de la sélection.
\Int_SelectionLargeur = 0 ; La Largeur de la sélection.
\Int_SelectionHauteur = 0 ; La Hauteur de la sélection.
EndWith
;}
;{ Les procédures
Procedure.q ConvertionNombrePositif(Nombre.q)
If Nombre.q < 0
ProcedureReturn -Nombre.q
EndIf
ProcedureReturn Nombre.q
EndProcedure
Procedure FenetrePrincipale()
; Ouverture et réglage de la fenêtre.
With StructureFenetrePrincipale
; Ouvre la fenêtre avec les réglages enregistrés.
OpenWindow(\Int_Numero, \Int_X, \Int_Y, \Int_Largeur, \Int_Hauteur, \Titre, \Int_Option)
; Règle la taille minimum et Maximum de la fenêtre.
WindowBounds(\Int_Numero, \Int_LargeurMinimum, \Int_HauteurMinimum, \Int_LargeurMaximum, \Int_HauteurMaximum)
; Enregistre le numéro d'identifiant de la fenêtre.
\Int_ID = WindowID(\Int_Numero)
; Enregistre la position de la fenêtre.
\Int_X = WindowX(\Int_Numero)
\Int_Y = WindowY(\Int_Numero)
EndWith
; Création et réglage du Canvas.
With StructureCanvas
; Crée le Canvas avec les réglages enregistrés.
CanvasGadget(\Int_Numero, \Int_X, \Int_Y, \Int_Largeur, \Int_Hauteur)
; Enregistre le numéro d'identifiant du Canvas.
\Int_ID = GadgetID(\Int_Numero)
; Création de l'image temporaire du Canvas qui sert pour dessiner la grille, la sélection et les objets.
CreateImage(\Int_Image, \Int_Largeur, \Int_Hauteur)
EndWith
EndProcedure
Procedure DrawFormes(TypePoint.i, X.i, Y.i, Largeur.i, Hauteur.i, CanvasRoundPoint.i, Couleur.i)
; On dessine les Formes voulue sur le Canvas.
Select TypePoint.i
Case 1
Box(X.i, Y.i, Largeur.i, Hauteur.i, Couleur.i) ; dessine un Carré rempli sur l'image du Canvas.
Case 2
RoundBox(X.i, Y.i, Largeur.i, Hauteur.i, CanvasRoundPoint.i, CanvasRoundPoint.i, Couleur.i) ; dessine un Carré rempli arrondi sur l'image du Canvas.
Case 3
Circle(X.i + Largeur.i / 2, Y.i + Largeur.i / 2, Largeur.i / 2, Couleur.i) ; dessine un cercle rempli sur l'image du Canvas.
Case 4
DrawingMode(#PB_2DDrawing_Outlined)
Box(X.i, Y.i, Largeur.i, Hauteur.i, Couleur.i) ; dessine un Carré vide sur l'image du Canvas.
Case 5
DrawingMode(#PB_2DDrawing_Outlined)
RoundBox(X.i, Y.i, Largeur.i, Hauteur.i, CanvasRoundPoint.i, CanvasRoundPoint.i, Couleur.i) ; dessine un Carré vide arrondi sur l'image du Canvas.
Case 6
DrawingMode(#PB_2DDrawing_Outlined)
Circle(X.i + Largeur.i / 2, Y.i + Largeur.i / 2, Largeur.i / 2, Couleur.i) ; dessine un cercle vide sur l'image du Canvas.
Default
Box(X.i, Y.i, Largeur.i, Hauteur.i, Couleur.i) ; dessine un Carré rempli sur l'image du Canvas.
EndSelect
EndProcedure
Procedure DrawGrid()
; On dessine la grille.
Protected X.i = 0, Y.i = 0
With StructureCanvas
; Boucle tant que X est plus petit que la Largeur du Canvas.
While X.i < \Int_Largeur - (\Int_TailleFormes - \Int_EspaceFormes)
; Boucle tant que Y est plus petit que la Hauteur du Canvas.
While Y.i < GadgetHeight(\Int_Numero) - (\Int_TailleFormes - \Int_EspaceFormes)
If X.i > 0
If Y.i > 0
DrawFormes(\Int_TypeFormes, X.i + \Int_TailleFormes + \Int_EspaceFormes, Y.i + \Int_TailleFormes + \Int_EspaceFormes, \Int_TailleFormes, \Int_TailleFormes, \Int_ArrondissementFormes, \Int_CouleurFormes)
Y.i + \Int_TailleFormes + \Int_EspaceFormes
ElseIf Y.i = 0
DrawFormes(\Int_TypeFormes, X.i + \Int_TailleFormes + \Int_EspaceFormes, Y.i + \Int_EspaceFormes, \Int_TailleFormes, \Int_TailleFormes, \Int_ArrondissementFormes, \Int_CouleurFormes)
Y.i + \Int_EspaceFormes
EndIf
ElseIf X.i = 0
If Y.i > 0
DrawFormes(\Int_TypeFormes, X.i + \Int_EspaceFormes, Y.i + \Int_TailleFormes + \Int_EspaceFormes, \Int_TailleFormes, \Int_TailleFormes, \Int_ArrondissementFormes, \Int_CouleurFormes)
Y.i + \Int_TailleFormes + \Int_EspaceFormes
ElseIf Y.i = 0
DrawFormes(\Int_TypeFormes, X.i + \Int_EspaceFormes, Y.i + \Int_EspaceFormes, \Int_TailleFormes, \Int_TailleFormes, \Int_ArrondissementFormes, \Int_CouleurFormes)
Y.i + \Int_EspaceFormes
EndIf
EndIf
Wend
If X.i > 0
X.i + \Int_TailleFormes + \Int_EspaceFormes ; On déplace le pointeur de la position de X.
ElseIf X.i = 0
X.i + \Int_EspaceFormes ; On déplace le pointeur la position de X.
EndIf
Y.i = 0 ; On revient à la position Y du début.
Wend
EndWith
EndProcedure
Procedure DrawImageTemporaire()
With StructureCanvas
; On dessine sur l'image temporaire.
StartDrawing(ImageOutput(\Int_Image))
DrawingMode(#PB_2DDrawing_Default)
; Efface l'image avec la couleur d'arriere plan du Canvas.
Box(0 ,0 , \Int_Largeur, \Int_Hauteur, \Int_CouleurArrierePlant)
If StructureCanvas\Int_AfficherGrille = #True
; Dessinne la grille sur l'image.
DrawGrid()
EndIf
StopDrawing()
EndWith
EndProcedure
Procedure DrawCanvas()
With StructureCanvas
; On dessine l'image temporaire.
DrawImageTemporaire()
StartDrawing(CanvasOutput(\Int_Numero))
DrawingMode(#PB_2DDrawing_Default)
; Dessin de l'image temporaire sur le Canvas.
DrawImage(ImageID(\Int_Image), 0, 0)
StopDrawing()
EndWith
EndProcedure
Procedure SizeWindows()
With StructureFenetrePrincipale
If StructureCanvas\Int_AfficherGrille = #True
; Calcule et enregistre la taille que doit faire la fenêtre suivant la grille et ses paramètres.
\Int_Largeur = ((WindowWidth(\Int_Numero) / (StructureCanvas\Int_EspaceFormes + StructureCanvas\Int_TailleFormes)) * (StructureCanvas\Int_EspaceFormes + StructureCanvas\Int_TailleFormes)) + StructureCanvas\Int_EspaceFormes
\Int_Hauteur = ((WindowHeight(\Int_Numero) / (StructureCanvas\Int_EspaceFormes + StructureCanvas\Int_TailleFormes)) * (StructureCanvas\Int_EspaceFormes + StructureCanvas\Int_TailleFormes)) + StructureCanvas\Int_EspaceFormes
Else
; Enregistre la taille de la fenêtre.
\Int_Largeur = WindowWidth(\Int_Numero)
\Int_Hauteur = WindowHeight(\Int_Numero)
EndIf
; Si la fenêtre est en mode normale.
If GetWindowState(\Int_Numero) = #PB_Window_Normal
; Redimensionne la fenêtre avec les nouvelles dimensions.
ResizeWindow(\Int_Numero, #PB_Ignore, #PB_Ignore, \Int_Largeur, \Int_Hauteur)
EndIf
; Redimensionne le Canvas avec les nouvelles dimensions, ici les dimensions de la fenêtre.
ResizeGadget(StructureCanvas\Int_Numero, StructureCanvas\Int_X, StructureCanvas\Int_Y, \Int_Largeur, \Int_Hauteur)
EndWith
With StructureCanvas
; Enregistre la nouvelle taille du Canvas.
\Int_Largeur = GadgetWidth(\Int_Numero)
\Int_Hauteur = GadgetHeight(\Int_Numero)
; Suppression de l'image temporaire, si elle existe.
If IsImage(\Int_Image) > 0
FreeImage(\Int_Image)
EndIf
; Création d'une nouvelle image temporaire.
CreateImage(\Int_Numero, \Int_Largeur, \Int_Hauteur)
; Si l'image a bien été créée.
If IsImage(\Int_Image) > 0
; On Dessine le Canvas.
DrawCanvas()
EndIf
EndWith
EndProcedure
Procedure MoveWindow()
With StructureFenetrePrincipale
; Enregistre la nouvelle position de la fenêtre.
\Int_X = WindowX(\Int_Numero)
\Int_Y = WindowY(\Int_Numero)
EndWith
EndProcedure
Procedure EventCanvas(Int_EventType.i)
With StructureCanvas
; Quel type d'évènement est intervenu sur le Canvas.
Select Int_EventType
Case #PB_EventType_LeftButtonDown ; Le bouton gauche de la souris a été pressé.
; Obtient et Sauvegarde la position actuel du clique de la souris.
\Int_CliqueXsouris = GetGadgetAttribute(\Int_Numero, #PB_Canvas_MouseX)
\Int_CliqueYsouris = GetGadgetAttribute(\Int_Numero, #PB_Canvas_MouseY)
Case #PB_EventType_LeftButtonUp ; Le bouton gauche de la souris a été relâché.
; Efface la position actuel du clique de la souris.
\Int_CliqueXsouris = 0
\Int_CliqueYsouris = 0
; Efface la position ainsi que la taille de la séléction du drag de la souris.
StructureSelection\Int_SelectionXsouris = 0
StructureSelection\Int_SelectionYsouris = 0
StructureSelection\Int_SelectionLargeur = 0
StructureSelection\Int_SelectionHauteur = 0
Case #PB_EventType_MouseMove ; Le curseur de la souris a bougé.
; Sauvegarde de la position actuel de la souris.
\Int_Xsouris = GetGadgetAttribute(\Int_Numero, #PB_Canvas_MouseX)
\Int_Ysouris = GetGadgetAttribute(\Int_Numero, #PB_Canvas_MouseY)
; Si le bouton gauche de la souris est préssé.
If GetGadgetAttribute(\Int_Numero, #PB_Canvas_Buttons) = #PB_Canvas_LeftButton
; Calcule de la Largeur ainsi que la Hauteur de drag de la souris.
; Si la position X de la souris est inférieur ou égale à la position du clique de celle-ci.
If \Int_Xsouris <= \Int_CliqueXsouris
; La position X de départ du drag devient la position actuel de la souris.
StructureSelection\Int_SelectionXsouris = \Int_Xsouris
; La Largeur du drag devient la position du clique de celle-ci.
StructureSelection\Int_SelectionLargeur = \Int_CliqueXsouris - \Int_Xsouris
Else ; Sinon, la position de la souris est supérieur à la position du clique de celle-ci.
; La position X du drag de départ devient la position du clique de la souris.
StructureSelection\Int_SelectionXsouris = \Int_CliqueXsouris
; La Largeur du drag devient la position actuel de la souris.
StructureSelection\Int_SelectionLargeur = \Int_Xsouris - \Int_CliqueXsouris
EndIf
; Si la position Y de la souris est inférieur ou égale à la position du clique de celle-ci.
If \Int_Ysouris <= \Int_CliqueYsouris
; La position Y de départ du drag devient la position actuel de la souris.
StructureSelection\Int_SelectionYsouris = \Int_Ysouris
; La Hauteur du drag devient la position du clique de celle-ci.
StructureSelection\Int_SelectionHauteur = \Int_CliqueYsouris - \Int_Ysouris
Else ; Sinon, la position de la souris est supérieur à la position du clique de celle-ci.
; La position Y du drag de départ devient la position du clique de la souris.
StructureSelection\Int_SelectionYsouris = \Int_CliqueYsouris
; La Hauteur du drag devient la position actuel de la souris.
StructureSelection\Int_SelectionHauteur = \Int_Ysouris - \Int_CliqueYsouris
EndIf
EndIf
EndSelect
EndWith
EndProcedure
;}
; On ouvre la fenêtre.
FenetrePrincipale()
; On Dessine le Canvas.
DrawCanvas()
; Redimentionne la fenêtre suivant sa taille actuelle, aux proportions le plus proche possible du Canvas suivant ses paramètres.
SizeWindows()
;{ La boucle Principale du programme.
Define Int_WaitWindowEvent.i = 0
Define Int_EventWindow.i = 0
Define Int_EventGadget.i = 0
Define Int_EventType.i = 0
Repeat
Int_WaitWindowEvent = WaitWindowEvent() ; Evènement de la fenêtre.
Int_EventWindow = EventWindow() ; Sur quel fenêtre c'est produit l'évènement.
Int_EventGadget = EventGadget() ; Evènement d'un gadget.
Int_EventType = EventType() ; Type d'évènement d'un gadget.
Select Int_EventWindow
Case #FenetrePrincipale
Select Int_WaitWindowEvent
Case #PB_Event_Gadget
Select Int_EventGadget
Case #Canvas
EventCanvas(Int_EventType)
EndSelect
Case #PB_Event_SizeWindow ; La fenêtre à été redimensionnée.
SizeWindows()
Case #PB_Event_MoveWindow ; La fenêtre à été déplacée.
MoveWindow()
Case #PB_Event_CloseWindow ; La croix de la fenêtre à été cliquée.
End
EndSelect
EndSelect
ForEver
;}