Déplacer le curseur en mode graphique

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Déplacer le curseur en mode graphique

Message 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.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Déplacer le curseur en mode graphique

Message 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 !
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Déplacer le curseur en mode graphique

Message 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.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Déplacer le curseur en mode graphique

Message 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 ...
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Déplacer le curseur en mode graphique

Message 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 !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Déplacer le curseur en mode graphique

Message 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
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Déplacer le curseur en mode graphique

Message 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 !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Déplacer le curseur en mode graphique

Message par Ar-S »

Pourquoi n'utilises tu pas un Canvas ? Tu peux même remplacer ton curseur par le #PB_Cursor_IBeam
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Déplacer le curseur en mode graphique

Message 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_()
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Déplacer le curseur en mode graphique

Message 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é !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Déplacer le curseur en mode graphique

Message 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.
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Répondre