OVH Cloud OVH Cloud

Création dynamique

5 réponses
Avatar
Jacques
Bonjour tout le monde,


Je crée dynamiquement des formulaires. À partir d'une table, j'ajoute des
textebox, des boutons, des étiquettes, etc.
Mais, par exemple, est-il possible d'écrire dynamiquement du code dans
l'évènement click d'un bouton ?
Le formulaire écrit dynamiquement n'est en fait que l'ossature de mon
interface. Il seraitr plus intéressant de pouvoir y ajouter du code de
validation ou du code sur les évènements des contrôles.

Merci de vos réponses

5 réponses

Avatar
LE TROLL
Salut,

Tu dis :
"est-il possible d'écrire dynamiquement du code dans l'évènement click d'un
bouton ?"

Oui, c'est possible, voici l'exemple à partir d'un objet de base(0), une des
méthodes...

' OBJETS = 4
' 1 form = form1
' 3 CommandButton = Command1(0) + Command2 + Command3
' nb le bouton 1 est indicé à 0
'
Sub Form_Activate()
Command1(0).Visible = False
End Sub

Sub Command1_Click(Index As Integer) ' <<<------
If Index = 1 Then MsgBox "bouton 1(2) dynamique" ' <<<-------
End Sub

Sub Command2_Click() ' chargé
On Error Resume Next '360
Load Command1(1)
Command1(1).Top = 1440
Command1(1).Caption = "1(1)"
Command1(1).Visible = True
End Sub

Sub Command3_Click() 'efface
On Error Resume Next ' 340 déchargé
Unload Command1(1)
End Sub
----------fin code------

Cependant, j'ai déjà eu des embrouilles avec les objets dynamiques, je ne fais
plus! En effet, il y a de facto un problème de focus, si on mélange des objets
statiques et des objets dynamiques. Les objets dynamique piquent un index de
focus qui appartenait au préalable aux statiques, et ces nouveaux index peuvent
être supérieurs à ceux des objets statiques; il s'ensuit un gros bordel dans les
objets et d'ordonnancement des numéros d'index... Et le temps gagné en création
dynamique, tu le reperds en gestion des focus qu'il faut se retaper à la main...

Exemple (s = statique, d = dynamique)
avant le lancement
s1 s2 s3
donc les séquence de focus sont s1->s2->s3

après le lancement
s1 s2 d1 s3
d1 prend le focus 3, alors que s3 avait avant le focus 2, soit la séquence:
s1->s2->s3->d1
ce qui implique qu'il faut corrige et filer le focus n°3 à d1 pour que les tab
conservent les ordre... Etc...
-------------------FIN----------------


"Jacques" a écrit dans le message de news:

Bonjour tout le monde,


Je crée dynamiquement des formulaires. À partir d'une table, j'ajoute des
textebox, des boutons, des étiquettes, etc.
Mais, par exemple, est-il possible d'écrire dynamiquement du code dans
l'évènement click d'un bouton ?
Le formulaire écrit dynamiquement n'est en fait que l'ossature de mon
interface. Il seraitr plus intéressant de pouvoir y ajouter du code de
validation ou du code sur les évènements des contrôles.

Merci de vos réponses




Avatar
Jean-Marc
"Jacques" a écrit dans le message de
news:
Bonjour tout le monde,


Je crée dynamiquement des formulaires. À partir d'une table, j'ajoute des
textebox, des boutons, des étiquettes, etc.
Mais, par exemple, est-il possible d'écrire dynamiquement du code dans
l'évènement click d'un bouton ?
Le formulaire écrit dynamiquement n'est en fait que l'ossature de mon
interface. Il seraitr plus intéressant de pouvoir y ajouter du code de
validation ou du code sur les évènements des contrôles.



Hello,

on ne peut pas le faire aussi dynamiquement que tu veux.
Notamment, on ne sait pas créer du code à la volée :-(

En revanche, mais c'est sans doute différent de ce que tu souhaites,
on peut générer des .frm et des .bas ou .cls, sous forme de fichiers
texte.
Il ne reste plus qu'à les compiler ensuite. J'ai fait ça "pour le fun"
il y a quelques années: une application qui générait d'autres
applications, essentiellement des applis assez simples qui étaient en
fait des formulaires de saisie.

Je créais les formulaires dans une bdd, mon code de validation était en SQL
ou dans un mini langage de mon cru, puis l'appli générait les forms VB et
le code derrière. Ca marchait très bien avec pas mal d'avantages:
- tous les formulaires avaient la même "tête", puisque générés
automatiquement
- très très peu de bugs, pour les mêmes raisons
- une énorme productivité, puisque toute la partie pénible (positionnement
des
labels, écriture de code de validation répétitive, etc.) se faisait toute
seule.

Un de mes utilisateur (une boite d'assurance) a généré plusieurs centaines
d'écrans de saisie avec ce soft.

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
Fred
Dans : news:43189eee$0$6567$,
Jean-Marc disait :
"Jacques" a écrit dans le message de
news:
Bonjour tout le monde,

Je crée dynamiquement des formulaires. À partir d'une table,
j'ajoute des textebox, des boutons, des étiquettes, etc.
Mais, par exemple, est-il possible d'écrire dynamiquement du code



Hello,



Bonsoir Jacques et Jean-Marc,

on ne peut pas le faire aussi dynamiquement que tu veux.
Notamment, on ne sait pas créer du code à la volée :-(



Pour le cas où cela s'avère vraiment indispensable, c'est une
possibilité offerte par le .net framework. Le code étant compilé en deux
fois. En langage intermédiaire tout d'abord puis en langage machine à
l'exécution (lors de son premier appel). On peut donc générer du code
intermédiaire à l'exécution.


--
Fred
http://www.cerbermail.com/?3kA6ftaCvT
Avatar
Jacques
Pour Fred ...

Oui, j'ai vu de la documentation et même un exemple mais je suis enVB6. Cela
sera utile lorsque nous passerons en .NET, peut-être fin d'année mais je
n'ai pas de pouvoir décisionnel :-(


Pour Jean-Marc ...

Je me doutai un pei qu'il n'était pas possible d'écrire du code à la volée à
moins comme tu l'explique de créer des fichiers texte.

Merci à vous deux pour ces explications

Jacques



"Fred" a écrit dans le message de
news:%23mO0oK$
Dans : news:43189eee$0$6567$,
Jean-Marc disait :
> "Jacques" a écrit dans le message de
> news:
>> Bonjour tout le monde,
>>
>> Je crée dynamiquement des formulaires. À partir d'une table,
>> j'ajoute des textebox, des boutons, des étiquettes, etc.
>> Mais, par exemple, est-il possible d'écrire dynamiquement du code
>
> Hello,

Bonsoir Jacques et Jean-Marc,

> on ne peut pas le faire aussi dynamiquement que tu veux.
> Notamment, on ne sait pas créer du code à la volée :-(

Pour le cas où cela s'avère vraiment indispensable, c'est une
possibilité offerte par le .net framework. Le code étant compilé en deux
fois. En langage intermédiaire tout d'abord puis en langage machine à
l'exécution (lors de son premier appel). On peut donc générer du code
intermédiaire à l'exécution.


--
Fred
http://www.cerbermail.com/?3kA6ftaCvT



Avatar
Picalausa François
Hello,

En fonction du contexte, il peut être possible d'écrire et appeler du script
à la volée en employant le contrôle Microsoft Script Control (aux
limitations d'antivirus près, si elles s'appliquent à ce contrôle?) pour
écrire du code. Il me semble toutefois que cette méthode peut être assez
longue à l'exécution. Elle peut par contre être très aisée si l'appelant du
script fournit de bonnes classes de support de l'action à effectuer.

Il existe aussi la possibilité d'utiliser EbExecuteLine (cfr. google) mais a
des fins de debugage uniquement (vba6.dll n'étant pas redistribuable).

Si les actions sont très semblables, il peut être imaginé d'avoir un pool de
quelques fonctions fixes appelées en fonctions de l'action à produire (un
langage de script réduit à sa plus simple expression).

Sinon, à coup d'assembleur injecté directement en mémoire. Pour celà, il
faudra copier le code préalablement assemblé directement dans un tableau de
byte. Au respect des conventions d'appels près, tu pourra appeler le
pointeur vers le premier octet du tableau comme décrit ici:
http://www.fawcette.com/archives/premier/mgznarch/vbpj/2000/02feb00/mc0200/mc0200.asp

--
Picalausa François

"Jacques" a écrit dans le message de news:

Je me doutai un pei qu'il n'était pas possible d'écrire du code à la volée
à
moins comme tu l'explique de créer des fichiers texte.