StringGadget sur image

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Bmld76
Messages : 116
Inscription : dim. 09/janv./2022 12:47

StringGadget sur image

Message par Bmld76 »

Bonjour,

J'ai crée une grille de saisie avec des cases de saisie de texte en mettent des StringGadget sur une image. Le fonctionnement est correct sous MacOs mais sur windows impossible d'activer la saisie, le curseur de saisie ne s'affiche. Si vous avez une idée, soit pour solutionner mon programme ou pour le traiter de manière différente.

Image

Voici le code simplifié de mon programme

Code : Tout sélectionner


Procedure grille()
  
  imageID = 10
  Taillecase = 30 
  
  If  CreateImage(imageID, 301, 301,32,RGB(255,255,255)) And StartDrawing(ImageOutput(ImageID))
    BackColor(RGB(Random(255), Random(255), Random(255)))
    FrontColor(RGB(Random(255), Random(255), Random(255)))
    For c = 0 To 11
      Line(c*Taillecase, 0,1,300,$0)
    Next
    
    For l = 0 To 11
      Line(0,l*Taillecase+esp,300,1,$000000)
    Next
    ; cases noires
    StopDrawing() 
    ImageGadget(11, 50 , 50 , 301, 301, ImageID(imageID))
  EndIf
EndProcedure

Procedure CaseString()
  id = 100
  For c = 0 To 9
    For l = 0 To 9
      StringGadget(id, 54 +c*30,  54+l*30, 20, 20, "X")
      id +1
    Next
  Next
  
EndProcedure  

If OpenWindow(0, 0, 0, 600, 400, "Grlle", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    
  grille()
  CaseString()

  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf


Merci beaucoup.
_____________________________________________________________
IMAC 21.5 2012 Core I5 - 2.70 Ghz. 16 GB NVIDIA GeForce GT 640M 512 Mo. MacOs OCPL Sonoma 14.3
MacBook Air M1 - 8Go - Sonoma 14.5

PureBasic 6.11 MacOS
Marc56
Messages : 2197
Inscription : sam. 08/févr./2014 15:19

Re: StringGadget sur image

Message par Marc56 »

Bonjour,

Tu peux forcer l'affichage du curseur sur un des gadgets avec SetActiveGadget()

Code : Tout sélectionner

...
Procedure CaseString()
  id = 100
  For c = 0 To 9
    For l = 0 To 9
      StringGadget(id, 54 +c*30,  54+l*30, 20, 20, "X")
      id +1
    Next
  Next
  SetActiveGadget(100) ; <-- Rendre actif l'un des gadgets
EndProcedure  
...
:wink:
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: StringGadget sur image

Message par microdevweb »

Bonjour,

Le problème vient du fait qu'une image n'est pas un container, mais en ustilisant un canvas cela devrait fonctionner

Cordialement

Code : Tout sélectionner


Procedure CaseString()
  id = 100
  For c = 0 To 9
    For l = 0 To 9
      StringGadget(id, 4 +c*30,  4+l*30, 20, 20, "X")
      id +1
    Next
  Next
  
EndProcedure  


Procedure grille()
  
  imageID = 10
  Taillecase = 30 
  
  CanvasGadget(imageID,50,50,301,301,#PB_Canvas_Container)
  StartDrawing(CanvasOutput(imageID))
  FillArea(0,0,RGB(255,255,255),RGB(255,255,255))
  BackColor(RGB(Random(255), Random(255), Random(255)))
  FrontColor(RGB(Random(255), Random(255), Random(255)))
  For c = 0 To 11
    Line(c*Taillecase, 0,1,300,$0)
  Next
  
  For l = 0 To 11
    Line(0,l*Taillecase+esp,300,1,$000000)
  Next
  StopDrawing()
EndProcedure


If OpenWindow(0, 0, 0, 600, 400, "Grlle", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    
  grille()
  CaseString()
  CloseGadgetList()

  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: StringGadget sur image

Message par Ar-S »

Code : Tout sélectionner

If OpenWindow(0, 0, 0, 600, 400, "Grlle", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    grille()
    DisableGadget(11,1) ; <--- Tu disable ton imagegadget, tout simplement
  CaseString()

  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
~~~~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
Bmld76
Messages : 116
Inscription : dim. 09/janv./2022 12:47

Re: StringGadget sur image - résolu

Message par Bmld76 »

j'avais testé Canvas mais pas avec le paramètre 'contener'. La solution avec DisableGadget(11,1) est en plus très simple. Ça fonctionne correctement.

Merci pour ces excellentes réponses si rapidement, je vais pouvoir continuer le portage de mon logiciel sur windows.
_____________________________________________________________
IMAC 21.5 2012 Core I5 - 2.70 Ghz. 16 GB NVIDIA GeForce GT 640M 512 Mo. MacOs OCPL Sonoma 14.3
MacBook Air M1 - 8Go - Sonoma 14.5

PureBasic 6.11 MacOS
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: StringGadget sur image

Message par microdevweb »

Libre à toi de choisir la solution qui te convient le mieux. Juste une petite remarque, en utilisant un canvas comme container, les éléments à placer seront placés depuis le bord du container et non pas le bord de la fenêtre.

Tu peux aussi éventuelement disposer ton image et tes string dans un container
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Marc56
Messages : 2197
Inscription : sam. 08/févr./2014 15:19

Re: StringGadget sur image

Message par Marc56 »

Étrange, sur mon Windows, quand j'utilise la solution DisableGadget(11,1) je suis obligé d'appuyer sur TAB pour activer la première case, alors qu'avec ma solution (SetActiveGadget(100)) le curseur est déjà sur la première case (ID 100) dès l'ouverture du programme et on peut écrire sans avoir à pointer la case.
Ce n'est pas ce que tu veux ?

(Amélioration: Je mets maintenant SetActiveGadget() juste avant Repeat pour ne l'activer qu'une seule fois)
C'est la manière standard de conception d'une GUI: Activer un gadget par défaut à l'ouverture d'un programme.

(Testé avec PB 6.00 B10 C Backend, mais aussi 5.73 LTS et 5.46 LTS. Windows x64)
Bmld76
Messages : 116
Inscription : dim. 09/janv./2022 12:47

Re: StringGadget sur image

Message par Bmld76 »

Bonjour,

C'est effectivement ce que je désire, la première case est activée mais je vous ai mis un extrait simplifié de mon programme ( 16000 lignes), la gestion de la saisi est plus complexe. Le portage windows est terminé. Merci.

Cordialement
_____________________________________________________________
IMAC 21.5 2012 Core I5 - 2.70 Ghz. 16 GB NVIDIA GeForce GT 640M 512 Mo. MacOs OCPL Sonoma 14.3
MacBook Air M1 - 8Go - Sonoma 14.5

PureBasic 6.11 MacOS
Répondre