Page 1 sur 1

Déplacer le curseur en mode graphique

Publié : mer. 26/mars/2014 18:54
par Micoute
Bonjour à tous,

J'aimerais faire une application en mode graphique genre : OpenWindowedScreen(WindowID(0), 0, 0, WindowWidth(0), WindowHeight(0)) et j'aimerais savoir s'il est possible de placer le curseur à une coordonnée X, Y donnée de façon à placer un texte juste en faisant par exemple SetCurseur(X,Y) : DrawText(X, Y, Texte$), vous me demanderez pourquoi placer le curseur d'abord, alors qu'avec DrawText(), on peut indiquer ces valeurs ? C'est parce que je veux créer des procédures pour que le curseur se place à la fin d'une phrase ou passe à la ligne suivante comme le fait Print() et PrintN() en mode console pour pour avoir en quelque sorte une console en plein écran avec une police de caractères choisie.

Je ne demande à personne de me fournir un code prêt à l'emploi, mais seulement si c'est possible et même occasionnellement la façon de m'y prendre.

Je vous remercie tous énormément.

Re: Déplacer le curseur en mode graphique

Publié : mer. 26/mars/2014 22:34
par graph100
Tu confond le curseur de la souris avec le carret. Un genre de curseur de texte.
Ce que tu décris est bien possible, mais tu dois réaliser toi-même tout le système d'écriture, retour à la ligne, mise en forme (si tu veux vraiment le faire sous forme graphique.

j'ai programmé un texteditorgadget() graphique qui fait ce que tu dis, mais c'est ultra complexe, long et pas du tout nécessaire !

Re: Déplacer le curseur en mode graphique

Publié : jeu. 27/mars/2014 9:50
par Micoute
Bonjour graph100 et merci beaucoup pour ta réponse, déjà, savoir qu'on peut le faire me permet de me lancer dans l'entreprise de trouver une méthode, oui effectivement, j'ai utilisé le terme générique curseur pour dire emplacement du prochain caractère, mais maintenant, je sais qu'on dit caret, ce qui va me permettre d'approfondir ma recherche !

Merci encore et bonne journée à tous.

Re: Déplacer le curseur en mode graphique

Publié : jeu. 27/mars/2014 10:19
par Backup
pour info

le mot "curseur" est valable pour indiquer le petit repere clignotant dans un editeur
d'ailleurs , il l'a toujours été ....

http://fr.wikipedia.org/wiki/Curseur_%28interface%29

par contre , ne pas confondre "Curseur"... avec "pointeur" pour la souris ...
meme si les 2 termes sont aussi employés ....

le mot "Caret" .. est beaucoup plus recent .... surement tiré de l'anglais ... et beaucoup moins employé ....

il n'y a qu'a faire une recherche google entre "Caret"(un seul R ) , et "Curseur" ...
pour voir qu'en france , l'utilisation plus courrante est : "Curseur" ... ;)

toutefois , il est bien de connaitre le terme "Caret" , car la librairie Scintilla , utilise ce terme
pour les fonctions concernant le "Cursor" ...
ex :
SCI_GETCARETSTYLE

le tout c'est de le savoir ...

Re: Déplacer le curseur en mode graphique

Publié : jeu. 27/mars/2014 16:33
par Micoute
Bonjour Dobro et merci beaucoup pour tous ces renseignements, Je savais déjà que mon AVC m'avait effacer pas mal de souvenirs de mon passé, mais caret, ça ne me disait absolument rien et comme les vieux ça a des habitudes, j'étais rester sur curseur qui pour moi veut dire plein de choses concernant la position des caractères ou du pointeur de la souris, mais grâce à ce nouveau mot que j'ai appris aujourd'hui, j'ai réussi à faire ma petite routine :

Code : Tout sélectionner

Procedure GConsoleLocate(x, y)
  XX = X : YY = Y
  SetCaretPos_(XX, YY)
EndProcedure
entre autres et ça me convient très bien !

Re: Déplacer le curseur en mode graphique

Publié : jeu. 27/mars/2014 18:09
par graph100
Oui mais ça ne correspond vraiment pas à ton premier post, dans lequel tu ne mentionnent pas que tu veux utiliser une console, mais un écran graphique

Re: Déplacer le curseur en mode graphique

Publié : ven. 28/mars/2014 9:31
par Micoute
Bonjour graph100,

C'est exactement ce que je fais, j'ouvre une fenêtre graphique dans une fenêtre normale, pour t'en persuader je te poste mon code

Code : Tout sélectionner

;CouleurConsole.pbi

Structure Couleur
  CouleurTexte.i
  CouleurFond.i
EndStructure

Global.Couleur CouleurConsole
Global.i Dim Couleur(15,1)


Procedure Init()
  Couleur(0,0) = 0        : Couleur(0,1) = 0
  Couleur(1,0) = $800000  : Couleur(1,1) = 1
  Couleur(2,0) = $008000  : Couleur(2,1) = 2
  Couleur(3,0) = $808000  : Couleur(3,1) = 3
  Couleur(4,0) = $0000FF  : Couleur(4,1) = 4
  Couleur(5,0) = $800080  : Couleur(5,1) = 5
  Couleur(6,0) = $000080  : Couleur(6,1) = 6
  Couleur(7,0) = $F0F0F0  : Couleur(7,1) = 7
  Couleur(8,0) = $808080  : Couleur(8,1) = 8
  Couleur(9,0) = $FF8080  : Couleur(9,1) = 9
  Couleur(10,0) = $80FF80 : Couleur(10,1) = 10
  Couleur(11,0) = $FFFF80 : Couleur(11,1) = 11
  Couleur(12,0) = $8080FF : Couleur(12,1) = 12
  Couleur(13,0) = $FF80FF : Couleur(13,1) = 13
  Couleur(14,0) = $80FFFF : Couleur(14,1) = 14
  Couleur(15,0) = $FFFFFF : Couleur(15,1) = 15
EndProcedure

Init()


Procedure DefinirCouleurFond(CoulFond)
  If CoulFond >= 0 And CoulFond <= 15
    Select CoulFond
      Case 0
        CouleurConsole\CouleurFond = Couleur(0,1)
      Case 1
        CouleurConsole\CouleurFond = Couleur(1,1)
      Case 2
        CouleurConsole\CouleurFond = Couleur(2,1)
      Case 3
        CouleurConsole\CouleurFond = Couleur(3,1)
      Case 4
        CouleurConsole\CouleurFond = Couleur(4,1)
      Case 5
        CouleurConsole\CouleurFond = Couleur(5,1)
      Case 6
        CouleurConsole\CouleurFond = Couleur(6,1)
      Case 7
        CouleurConsole\CouleurFond = Couleur(7,1)
      Case 8
        CouleurConsole\CouleurFond = Couleur(8,1)
      Case 9
        CouleurConsole\CouleurFond = Couleur(9,1)
      Case 10
        CouleurConsole\CouleurFond = Couleur(10,1)
      Case 11
        CouleurConsole\CouleurFond = Couleur(11,1)
      Case 12
        CouleurConsole\CouleurFond = Couleur(12,1)
      Case 13
        CouleurConsole\CouleurFond = Couleur(13,1)
      Case 14
        CouleurConsole\CouleurFond = Couleur(14,1)
      Case 15
        CouleurConsole\CouleurFond = Couleur(15,1)
    EndSelect
    ;Debug CouleurConsole\CouleurFond  
    ProcedureReturn CouleurConsole\CouleurFond
  Else
    MessageRequester("ATTENTION !", "La couleur de fond doit être entre 0 et 15", #MB_ICONEXCLAMATION)
  EndIf  
EndProcedure

Procedure DefinirCouleurTexte(CoulTexte)
  If CoulTexte >= 0 And CoulTexte <= 15
    Select CoulTexte
      Case 0
        CouleurConsole\CouleurTexte = Couleur(0,1)
      Case 1
        CouleurConsole\CouleurTexte = Couleur(1,1)
      Case 2
        CouleurConsole\CouleurTexte = Couleur(2,1)
      Case 3
        CouleurConsole\CouleurTexte = Couleur(3,1)
      Case 4
        CouleurConsole\CouleurTexte = Couleur(4,1)
      Case 5
        CouleurConsole\CouleurTexte = Couleur(5,1)
      Case 6
        CouleurConsole\CouleurTexte = Couleur(6,1)
      Case 7
        CouleurConsole\CouleurTexte = Couleur(7,1)
      Case 8
        CouleurConsole\CouleurTexte = Couleur(8,1)
      Case 9
        CouleurConsole\CouleurTexte = Couleur(9,1)
      Case 10
        CouleurConsole\CouleurTexte = Couleur(10,1)
      Case 11
        CouleurConsole\CouleurTexte = Couleur(11,1)
      Case 12
        CouleurConsole\CouleurTexte = Couleur(12,1)
      Case 13
        CouleurConsole\CouleurTexte = Couleur(13,1)
      Case 14
        CouleurConsole\CouleurTexte = Couleur(14,1)
      Case 15
        CouleurConsole\CouleurTexte = Couleur(15,1)
    EndSelect  
    
    ;Debug CouleurConsole\CouleurTexte
    ProcedureReturn CouleurConsole\CouleurTexte
  Else
    MessageRequester("ATTENTION !", "La couleur du texte doit être entre 0 et 15", #MB_ICONEXCLAMATION)
  EndIf
EndProcedure

Procedure ObtenirCouleurConsole()
  MessageRequester("Couleurs de la console","Couleur du texte " + CouleurConsole\CouleurTexte + #LF$ + 
                                            "Couleur du fond " + CouleurConsole\CouleurFond, #MB_ICONINFORMATION)
EndProcedure


;***TEST***
CompilerIf #PB_Compiler_IsMainFile
  
  OpenWindow(0,0,0,800,600,"Test",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  InitSprite()
  OpenWindowedScreen(WindowID(0), 0, 0, WindowWidth(0), WindowHeight(0))
  
  StartDrawing(WindowOutput(0))
  DefinirCouleurFond(1)
  DefinirCouleurTexte(15) 
  BackColor(CouleurConsole\CouleurFond)
  FrontColor(CouleurConsole\CouleurTexte)
  StopDrawing()
  
  ObtenirCouleurConsole()
  
  StartDrawing(WindowOutput(0))
  DrawText(10, 10, "Ceci est un texte de test")
  StopDrawing()
  
  Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow
  
CompilerEndIf  

Code : Tout sélectionner

;FonctionsConsole.pbi
XIncludeFile "CouleurConsole.pbi"

Global X, Y, XX, YY

Declare GClearConsole()
Declare GCloseConsole()
Declare GConsoleColor(CouleurTexte, CouleurFond)
Declare GConsoleLocate(x, y)
Declare GConsoleTitle(Titre$)
Declare.s GInkey() ; sort le dernier caractère frappé
Declare.s GInput() ; sort une chaîne de caractères
Declare GOpenConsole(X.i, Y.i, Largeur.i, Hauteur.i, Titre.s)
Declare GPrint(Texte$)
Declare GPrintN(Texte$)


Procedure GClearConsole()
  ClearScreen(Couleur(CouleurConsole\CouleurFond,0))
EndProcedure

Procedure GCloseConsole()
  Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow
EndProcedure

Procedure GConsoleColor(CouleurTexte, CouleurFond)
  DefinirCouleurTexte(CouleurTexte)
  DefinirCouleurFond(CouleurFond)
  
  StartDrawing(WindowOutput(0))
  BackColor(Couleur(CouleurConsole\CouleurFond,0))
  FrontColor(Couleur(CouleurConsole\CouleurTexte,0))
  StopDrawing()
EndProcedure

Procedure GConsoleLocate(x, y)
  XX = X : YY = Y
  SetCaretPos_(XX, YY)
EndProcedure

Procedure GConsoleTitle(Titre$)
  SetWindowTitle(0,Titre$)
EndProcedure

Procedure.s GInkey() ; sort le dernier caractère frappé
  resultat$=KeyboardInkey()
  ProcedureReturn resultat$
EndProcedure

Procedure.s GInput() ; sort une chaîne de caractères
  Repeat
    
    ExamineKeyboard()  
    ; Efface le dernier caractère si la touche 'Back' est appuyée
    ;
    If KeyboardReleased(#PB_Key_Back)  
      Texte$ = Left(Texte$, Len(Texte$)-1)
    Else
      resultat$=KeyboardInkey()
      
      If FindString("1234567890 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzéèçàù", resultat$) ; Ajouter vos propres caractères valides ici
        Texte$ + resultat$
      EndIf ; Ajouter le nouveau texte à l'actuel (le cas échéant)
      
    EndIf
    
  Until KeyboardPushed(#PB_Key_Return)
  
  ProcedureReturn Texte$
EndProcedure

Procedure GOpenConsole(X.i, Y.i, Largeur.i, Hauteur.i, Titre.s)
  OpenWindow(0,X,Y,Largeur,Hauteur,Titre,#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  InitSprite()
  OpenWindowedScreen(WindowID(0), 0, 0, WindowWidth(0), WindowHeight(0))
  InitKeyboard()
EndProcedure

Procedure GPrint(Texte$)
  StartDrawing(WindowOutput(0))
  DrawText(XX, YY, Texte$, Couleur(CouleurConsole\CouleurTexte,0), Couleur(CouleurConsole\CouleurFond,0))
  XX + TextWidth(Texte$)
  StopDrawing()
EndProcedure

Procedure GPrintN(Texte$)
  StartDrawing(WindowOutput(0))
  DrawText(XX, YY, Texte$, Couleur(CouleurConsole\CouleurTexte,0), Couleur(CouleurConsole\CouleurFond,0))
  YY + TextHeight(Texte$)
  StopDrawing()
EndProcedure


;-***TEST***
CompilerIf #PB_Compiler_IsMainFile
  GopenConsole(0,0,1360,730,"Test")
  
  GConsoleColor(14, 1)
  GConsoleTitle("Essai console graphique")
  GClearConsole()
  ObtenirCouleurConsole()
  
  
  GConsoleLocate(10, 10)
  GPrint("Essai de texte 1 ")
  GPrint("Essai de texte 2 ")
  GPrintN("Essai de texte 3 ")
  GConsoleLocate(10, YY)
  GPrint("Essai de texte 4 ")
  GPrint("Essai de texte 5 ")
  
  GConsoleLocate(50,60)
  GPrint("Essai GconsoleLocate(50,60)")
  GConsoleLocate(10, 75)
  GPrint("Etranger, quel est ton nom ? (Entrée) ")
  Reponse.s = GInput()
  GPrint(Reponse)
  GCloseConsole()
CompilerEndIf  
Evidemment, c'est encore en chantier, car j'avance très lentement !

Re: Déplacer le curseur en mode graphique

Publié : ven. 28/mars/2014 18:48
par Ar-S
Pourquoi n'utilises tu pas un Canvas ? Tu peux même remplacer ton curseur par le #PB_Cursor_IBeam

Re: Déplacer le curseur en mode graphique

Publié : ven. 28/mars/2014 19:14
par graph100
Tu mélange TOUT !! !!! ! !

Code : Tout sélectionner

Procedure GConsoleLocate(x, y)
	XX = X : YY = Y
	;SetCaretPos_(XX, YY) ; Sert absolument à RIEN.
EndProcedure
Si tu te fais ton propre système d'affichage de texte, c'est à toi de tout contrôler. Ne rajoute pas des choses qui n'ont rien à voir comme la commande SetCaretPos_()

Re: Déplacer le curseur en mode graphique

Publié : sam. 29/mars/2014 14:15
par Micoute
graph100 a écrit :Tu mélange TOUT !! !!! ! !
Eh Bien pourtant, ça fonctionne !
Ar-S a écrit :Pourquoi n'utilises tu pas un Canvas ?
C'est pas idiot ton idée et en plus, le canvas est le gadget le mieux géré !

Re: Déplacer le curseur en mode graphique

Publié : dim. 30/mars/2014 2:37
par graph100
bien sur que ça fonctionne, puisque la commande setcaretpos_() est inutile...
Bref, c'est pas grave, simplement que c'étais impossible de répondre correctement à ta question avec les infos de base que tu nous a filé.

Bref. Bonne continuation dans ton projet.