Gambas France BETA


Pas de compte ? Incription

RadioButton

1
AuteurMessages
Fly06#1 Posté le 9/12/2017 à 17:59:42
Bonjour,
Quelqu'un sait comment contourner l'absence de propriété ReadOnly sur les RadioButton ?
Flachy Joe#2 Posté le 10/12/2017 à 00:18:26
Iguane : Il Gambas Uniquement pour Activer ses NEuronesSalut,
tu peux les désactivés
1
RadioButton1.Enabled = FALSE

pour que le texte reste bien visible, redonne lui sa couleur activé :
1
RadioButton1.Foreground = Color.Foreground

Il n'y a plus que la puce qui est grisée...
;) Flachy Joe ;)
Fly06#3 Posté le 10/12/2017 à 10:57:13
Merci Flachy Joe pour ta réponse mais la propriété Foreground ne semble être prise en compte uniquement lorsque le RadioButton est enabled :tongue:

Sinon j'ai bien essayé de stopper l'événement click mais il est levé après le changement de valeur.
didier18#4 Posté le 10/12/2017 à 14:13:47
Bonjour

Plusieurs méthodes, mais pourquoi laisser "visible" un contrôle qui n'est pas accessible ?
La 1ère méthode serait d'attribuer à tes RadioButton la propriété visible = False.
Qui dit pas visible ne veut pas dire pas modifiable, surtout si tu récupère ou attribue à ton contrôle une valeur booléenne.
2ème méthode (si tu tiens absolument à voir tes RadioButtons) les mettre dans un Panel et c'est sur ce Panel que tu agis.
1
2
3
4
5
6
7
PUBLIC bpanel AS BOOLEAN

PUBLIC SUB Button1_Click()
bpanel = NOT bpanel
Panel1.Enabled = bpanel
PRINT bpanel
END


La variable "bpanel" contrôle ton Panel1
Sur un formulaire créé un Panel1 et mettre dans le Panel1 tes RadioButton. Créé un Button1 pour inverser la variable bpanel.
Lorsque tu clique sur le Button1 tu inverse la valeur de la variable bpanel.
Puis tu attribue à la propriété Panel1.Enabled la valeur de bpanel.
Print bpanel ne sert qu'à afficher l'état de bpanel dans la console.
De cette façon tes RadioButtons restent visible...

Bonne journée.
Fly06#5 Posté le 12/12/2017 à 08:43:08
Bonjour didier,

Mes réponses ci-dessous :

Plusieurs méthodes, mais pourquoi laisser "visible" un contrôle qui n'est pas accessible ?


Bonne remarque. L'idéal serait d'afficher les infos dans des Labels lorsque l'éditeur est en mode readonly mais c'est lourd à gérer.

La 1ère méthode serait d'attribuer à tes RadioButton la propriété visible = False.


Le but est que le contrôle soit visible pour que l'information le soit également donc non.

2ème méthode (si tu tiens absolument à voir tes RadioButtons) les mettre dans un Panel et c'est sur ce Panel que tu agis.


J'y ait cru un instant mais concernant la propriété Enabled, les contrôles semblent hériter de leur conteneurs.
didier18#6 Posté le 12/12/2017 à 11:30:51
Bonjour

Fly06, je pense que j'ai mal compris ta question.
Peut être serait il bon que tu précise plus en détail ce que tu veux obtenir au final.
Par exemple si les contrôles héritent de leur conteneurs, le fait qu'ils soient Enabled n’empêche pas leur visibilité, n'est-ce pas ce que tu veux obtenir ?
A mon sens, a partir du moment ou le RadioButton serait ReadOnly, tu ne peux plus modifier sa Value.
Mais par ReadOnly tu sous entend peut d'autres propriétés, dans ce cas lesquelles ?

Bonne journée.
Fly06#7 Posté le 12/12/2017 à 13:16:42
En fait, j'ai un éditeur qui permet de faire du CRUD sur une table d'une DB MySql à la façon du programme Agenda :
http://www.gambasforge.org/code-16-agenda.html

Le contrôle TextBox a une propriété ReadOnly qui permet de locker (Read) et de de unlocker (Create/Update). C'est simple à gérer et ça marche très bien.

Mais d'autres contrôles n'ont pas cette propriété ReadOnly (RadioButton ou SpinBar par exemple) et là je ne vois pas comment obtenir le même résultat que pour une TextBox simplement.
didier18#8 Posté le 13/12/2017 à 11:10:36
Bonjour Fly06

Dans ce cas "le plus simple" serait d'ajouter la propriété ReadOnly au RadioButton (tu noteras les guillemets sur le plus simple)...
Mais je pense que si Benoît et son équipe n'ont pas inclus cette propriété dès le départ sur ce composant, il devait y avoir une bonne raison.
J'avoue mon incompétence à ce sujet.
Tu auras certainement une réponse en posant la question directement sur la mailing list.

Je suis peut être le seul à me poser la question, mais c'est quoi du CRUD ?

Bonne journée.
Flachy Joe#9 Posté le 13/12/2017 à 21:00:44
Iguane : Il Gambas Uniquement pour Activer ses NEurones"Chez moi ça marche" en suivant mon premier message.

Une solution bidouille est de poser un label sans texte sur le contrôle que tu veux verrouiller, c'est le contrôle le plus haut (dans l'ordre zorder) qui reçoit les événements. Il faut aussi activer la propriété NoTabFocus pour pas qu'il soit accessible au clavier.
;) Flachy Joe ;)
Fly06#10 Posté le 14/12/2017 à 08:23:34
@Didier:
CRUD est l'acronyme de Create/Read/Update/Delete, les quatre opérations de base sur les enregistrements d'une table d'une base de données.

@Joe: Chez moi, ça ne marche pas.


[System]
Gambas=3.10
OperatingSystem=Linux
Kernel=4.10.0-42-generic
Architecture=x86_64
Distribution=Ubuntu 16.04.3 LTS
Desktop=XFCE
Theme=Gtk
Language=fr_FR.UTF-8
Memory=7865M

[Libraries]
Cairo=libcairo.so.2.11400.6
Curl=libcurl.so.4.4.0
DBus=libdbus-1.so.3.14.6
GStreamer=libgstreamer-1.0.so.0.803.0
GTK+2=libgtk-x11-2.0.so.0.2400.30
GTK+3=libgtk-3.so.0.1800.9
OpenGL=libGL.so.1.2.0
Poppler=libpoppler.so.58.0.0
QT4=libQtCore.so.4.8.7
QT5=libQt5Core.so.5.5.1
SDL=libSDL-1.2.so.0.11.4
SQLite=libsqlite3.so.0.8.6

[Environment]
CLUTTER_BACKEND=x11
CLUTTER_IM_MODULE=
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-t3jNRImmKS
DEFAULTS_PATH=/usr/share/gconf/xubuntu.default.path
DESKTOP_SESSION=xubuntu
DISPLAY=:0.0
GB_GUI=gb.qt4
GDMSESSION=xubuntu
GDM_LANG=fr_FR
GLADE_CATALOG_PATH=:
GLADE_MODULE_PATH=:
GLADE_PIXMAP_PATH=:
GNOME_KEYRING_CONTROL=
GNOME_KEYRING_PID=
GPG_AGENT_INFO=<home>/.gnupg/S.gpg-agent:0:1
GTK_IM_MODULE=
GTK_OVERLAY_SCROLLING=0
HOME=<home>
IM_CONFIG_PHASE=1
INSTANCE=
JOB=dbus
LANG=fr_FR.UTF-8
LANGUAGE=fr_FR
LOGNAME=<user>
MANDATORY_PATH=/usr/share/gconf/xubuntu.mandatory.path
PATH=<home>/bin:<home>/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
PWD=<home>
QT4_IM_MODULE=
QT_ACCESSIBILITY=1
QT_IM_MODULE=
QT_LINUX_ACCESSIBILITY_ALWAYS_ON=1
QT_STYLE_OVERRIDE=gtk
SESSION=xubuntu
SESSIONTYPE=
SESSION_MANAGER=local/<hostname>:@/tmp/.ICE-unix/1565,unix/<hostname>:/tmp/.ICE-unix/1565
SHELL=/bin/bash
SHLVL=0
SSH_AUTH_SOCK=/run/user/1000/keyring/ssh
TZ=:/etc/localtime
UPSTART_EVENTS=started xsession
UPSTART_INSTANCE=
UPSTART_JOB=startxfce4
UPSTART_SESSION=unix:abstract=/com/ubuntu/upstart-session/1000/1361
USER=<user>
XAUTHORITY=<home>/.Xauthority
XDG_CONFIG_DIRS=/etc/xdg/xdg-xubuntu:/usr/share/upstart/xdg:/etc/xdg:/etc/xdg
XDG_CURRENT_DESKTOP=XFCE
XDG_DATA_DIRS=/usr/share/xubuntu:/usr/share/xfce4:/usr/local/share:/usr/share:/var/lib/snapd/desktop:/var/lib/snapd/desktop:/usr/share
XDG_GREETER_DATA_DIR=/var/lib/lightdm-data/<user>
XDG_MENU_PREFIX=xfce-
XDG_RUNTIME_DIR=/run/user/1000
XDG_SEAT=seat0
XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0
XDG_SESSION_DESKTOP=xubuntu
XDG_SESSION_ID=c2
XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0
XDG_SESSION_TYPE=x11
XDG_VTNR=7
XMODIFIERS=


Idéalement il faudrait que tout les contrôles de type Form aient une propriété ReadOnly.


didier18#11 Posté le 14/12/2017 à 12:51:17
Bonjour

Merci pour l'info sur CRUD, au moins je mourrai moins bête comme dit le proverbe.
Ici aussi la solution de Flachy Joe ;) fonctionne.
Est-ce que le problème ne viendrait pas tout simplement de l'utilisation des composants (gb.gui ou gb.qt4)? Ce qui ferait que ça fonctionne pour Flachy Joe (s'il utilise gb.gui) et pas chez toi puisque tu semble utiliser (gb.qt4) au vu de la capture écran...
Voici ce que ça donne en gb.gui chez moi



Et en gb.qt4



Le code modifié...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
' Gambas class file
PUBLIC bpanel AS BOOLEAN = TRUE

PUBLIC SUB Button1_Click()
bpanel = NOT bpanel
Panel1.Enabled = bpanel
PRINT bpanel
END

PUBLIC SUB RadioButton0_Click()
Label1.Caption = "RadioButton0 séléctionné"
Label2.Caption = "RadioButton0 séléctionné"
END
PUBLIC SUB RadioButton1_Click()
Label1.Caption = "RadioButton1 séléctionné"
Label2.Caption = "RadioButton1 séléctionné"
END




Peut être un début d'explication, même si cela ne résous pas le problème des composants en ReadOnly...

Bonne journée.
Fly06#12 Posté le 16/12/2017 à 09:35:39
Bonjour Didier,

Merci pour ton retour mais ça ne marche ni avec gb.gui (par défaut) ni avec gb.qt4.

Peut-être est-ce lié à mon environnement de bureau XFCE ?

Mais peu importe, si l'idée d'une propriété ReadOnly pour tout les contrôles de type Form fait sens je la soumettrai sur le site officiel Gambas.

Bonne journée.
1