PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV (précédentes versions) → [WD20] reproduire un champ disposition
[WD20] reproduire un champ disposition
Débuté par zzebulon, 22 jan. 2025 13:36 - 4 réponses
Membre enregistré
16 messages
Posté le 22 janvier 2025 - 13:36
Bonjour,

Le champs disposition est apparu avec WD23. Il permet de "dessiner" les champs dans la fenêtre selon - par exemple - les valeurs saisies.

J'essaie d'obtenir le comportement suivant avec WD20 (qui ne dispose pas du champs disposition) :

Ma fenêtre comporte 3 champs superposés les uns au dessus des autres.
l'ancrage des champs 1 et 2 est "En haut à gauche - sans extension"
l'ancrage du troisième champs est "A gauche avec extension verticale)

Je souhaite que le deuxième champ puisse être masqué (visible = faux) et que en ce cas le troisième champs "remonte" pour récupérer la place laissée par le champ 2... le fait de mettre le champ 2 non visible ne produit pas cet effet.

Auriez-vous une bonne idée ? Merci d'avance.
Cordialement.
Posté le 22 janvier 2025 - 15:48
Bonjour

Je vois votre problème, vous souhaiter avoir un programme comme un champ disposition fait maison, j'ai une solution pour vous

1. Vous devrez faire un programme sur les coordonnées des champs et sur la visibilité aussi

Pour ce cas, vous devrez programmer ce code et vous pouvez utiliser
// EDD (01/25) : créer trois superchamp intitulé "SPC_A" SPC_B" "SPC_C"
// EDD (01/25) : créer un champ de saisie, lorsque vous insérer les superchamps invisible, la spération est " ", 1 2 par exemple, SSI_Numero_Champ
// EDD (01/25) : créer un bouton de lancement avec le programme suivant
LOCAL
cChamp_Activation is ClChamp_Activation
cChamp_Activation:Initialisation()
TableauAjouteLigne(cChamp_Activation:m_tbNuméro_Champ, ExtraitChaîne(SSI_Numero_Champ, 1, " "))
TableauAjouteLigne(cChamp_Activation:m_tbNuméro_Champ, ExtraitChaîne(SSI_Numero_Champ, 2, " "))
cChamp_Activation:Validation()
cChamp_Activation:Lancement()

// EDD (01/25) : créer une nouvelle classe ClChamp_Disposition
ClChamp_Disposition est une Classe
m_sChamp_Disposition is string
FIN

// EDD (01/25) : créer une nouvelle classe ClChamp_Activation
ClChamp_Activation est une Classe
m_tbNuméro_Champ is tableau of entier
FIN

// EDD (01/25) : créer trois méthode dans la classe ClChamp_Activation
PROCÉDURE Validation()
LOCAL
ctbChamp_Dispo is tableau of ClChamp_Disposition = :Initialisation()
FOR i = 1 _TO_ TableauOccurrence(ctbChamp_Dispo)
IF ChampExiste(ctbChamp_Dispo[i]:m_sChamp_Disposition) = False THEN
Info("Merci de vérifier le champ introuvable suivant " + RC + ctbChamp_Dispo[i]:m_sChamp_Disposition)
EndProgram()
END
END
IF TableauOccurrence(:m_tbNuméro_Champ) = 0 THEN
Info("Merci de vérifier le numéro du champ visible.")
EndProgram()
END

PROCÉDURE Lancement()
LOCAL
ctbChamp_Dispo is tableau of ClChamp_Disposition = :Initialisation()
eEntier, eX, eY is entier
sString is string
FOR i = 1 _TO_ TableauOccurrence(:m_tbNuméro_Champ)
eEntier = :m_tbNuméro_Champ[i]
sString = ctbChamp_Dispo[eEntier]:m_sChamp_Disposition
{sString, indChamp}..Visible = False
eX = {sString, indChamp}..X
eY = {sString, indChamp}..Y
IF eEntier <> TableauOccurrence(ctbChamp_Dispo) THEN
FOR j = 1 _TO_ TableauOccurrence(ctbChamp_Dispo) - 1
IF eEntier < TableauOccurrence(ctbChamp_Dispo) THEN
eEntier += 1
sString = ctbChamp_Dispo[eEntier]:m_sChamp_Disposition
{sString, indChamp}..X = eX
{sString, indChamp}..Y = eY
eX = {sString, indChamp}..X
eY = {sString, indChamp}..Y + {sString, indChamp}..Hauteur
END
END
END
END

PROCÉDURE Initialisation()
LOCAL
ctbChamp_Dispo is tableau of ClChamp_Disposition
eEntier is entier
eEntier = TableauAjouteLigne(ctbChamp_Dispo)
ctbChamp_Dispo[eEntier]:m_sChamp_Disposition = "SPC_A"
eEntier = TableauAjouteLigne(ctbChamp_Dispo)
ctbChamp_Dispo[eEntier]:m_sChamp_Disposition = "SPC_B"
eEntier = TableauAjouteLigne(ctbChamp_Dispo)
ctbChamp_Dispo[eEntier]:m_sChamp_Disposition = "SPC_C"
RENVOYER ctbChamp_Dispo

NB : Attention, dans la méthode initialisation, il est obligatoire que les champs existent dans la fenêtre

Cordialement
Mr.RATSIMANDRESY
Niry Aina Eddy
Membre enregistré
16 messages
Posté le 22 janvier 2025 - 17:24
Merci pour cette solution.
Premiers tests concluants. Je vais regarder comment l'adapter à mon besoin.
Cordialement


RATSIMANDRESY Niry Aina Eddy a écrit :
Bonjour

Je vois votre problème, vous souhaiter avoir un programme comme un champ disposition fait maison, j'ai une solution pour vous

1. Vous devrez faire un programme sur les coordonnées des champs et sur la visibilité aussi

Pour ce cas, vous devrez programmer ce code et vous pouvez utiliser
// EDD (01/25) : créer trois superchamp intitulé "SPC_A" SPC_B" "SPC_C"
// EDD (01/25) : créer un champ de saisie, lorsque vous insérer les superchamps invisible, la spération est " ", 1 2 par exemple, SSI_Numero_Champ
// EDD (01/25) : créer un bouton de lancement avec le programme suivant
LOCAL
cChamp_Activation is ClChamp_Activation
cChamp_Activation:Initialisation()
TableauAjouteLigne(cChamp_Activation:m_tbNuméro_Champ, ExtraitChaîne(SSI_Numero_Champ, 1, " "))
TableauAjouteLigne(cChamp_Activation:m_tbNuméro_Champ, ExtraitChaîne(SSI_Numero_Champ, 2, " "))
cChamp_Activation:Validation()
cChamp_Activation:Lancement()

// EDD (01/25) : créer une nouvelle classe ClChamp_Disposition
ClChamp_Disposition est une Classe
m_sChamp_Disposition is string
FIN

// EDD (01/25) : créer une nouvelle classe ClChamp_Activation
ClChamp_Activation est une Classe
m_tbNuméro_Champ is tableau of entier
FIN

// EDD (01/25) : créer trois méthode dans la classe ClChamp_Activation
PROCÉDURE Validation()
LOCAL
ctbChamp_Dispo is tableau of ClChamp_Disposition = :Initialisation()
FOR i = 1 _TO_ TableauOccurrence(ctbChamp_Dispo)
IF ChampExiste(ctbChamp_Dispo[i]:m_sChamp_Disposition) = False THEN
Info("Merci de vérifier le champ introuvable suivant " + RC + ctbChamp_Dispo[i]:m_sChamp_Disposition)
EndProgram()
END
END
IF TableauOccurrence(:m_tbNuméro_Champ) = 0 THEN
Info("Merci de vérifier le numéro du champ visible.")
EndProgram()
END

PROCÉDURE Lancement()
LOCAL
ctbChamp_Dispo is tableau of ClChamp_Disposition = :Initialisation()
eEntier, eX, eY is entier
sString is string
FOR i = 1 _TO_ TableauOccurrence(:m_tbNuméro_Champ)
eEntier = :m_tbNuméro_Champ[i]
sString = ctbChamp_Dispo[eEntier]:m_sChamp_Disposition
{sString, indChamp}..Visible = False
eX = {sString, indChamp}..X
eY = {sString, indChamp}..Y
IF eEntier <> TableauOccurrence(ctbChamp_Dispo) THEN
FOR j = 1 _TO_ TableauOccurrence(ctbChamp_Dispo) - 1
IF eEntier < TableauOccurrence(ctbChamp_Dispo) THEN
eEntier += 1
sString = ctbChamp_Dispo[eEntier]:m_sChamp_Disposition
{sString, indChamp}..X = eX
{sString, indChamp}..Y = eY
eX = {sString, indChamp}..X
eY = {sString, indChamp}..Y + {sString, indChamp}..Hauteur
END
END
END
END

PROCÉDURE Initialisation()
LOCAL
ctbChamp_Dispo is tableau of ClChamp_Disposition
eEntier is entier
eEntier = TableauAjouteLigne(ctbChamp_Dispo)
ctbChamp_Dispo[eEntier]:m_sChamp_Disposition = "SPC_A"
eEntier = TableauAjouteLigne(ctbChamp_Dispo)
ctbChamp_Dispo[eEntier]:m_sChamp_Disposition = "SPC_B"
eEntier = TableauAjouteLigne(ctbChamp_Dispo)
ctbChamp_Dispo[eEntier]:m_sChamp_Disposition = "SPC_C"
RENVOYER ctbChamp_Dispo

NB : Attention, dans la méthode initialisation, il est obligatoire que les champs existent dans la fenêtre

Cordialement
Mr.RATSIMANDRESY
Niry Aina Eddy
Posté le 23 janvier 2025 - 11:57
Bonjour,
Pourquoi ne pas mettre tes 2 champs dans 2 plans différents.
Membre enregistré
16 messages
Posté le 23 janvier 2025 - 17:43
Bonjour Voroltinquo,

Merci pour votre réponse.

Je n'utilise pas les plans mais il me semble que cela ne répond pas au besoin :

"Les champs peuvent être placés sur différents plans. Un seul plan peut être affiché à la fois aussi bien dans l'éditeur de fenêtres que lors de l'exécution du programme."

Or je désire que les champs placés SOUS les champs que l'on rend invisibles "remontent" pour récupérer la place libérée...

Mais si vous avez un exemple, je suis preneur.

Cordialement