begin process at 2010 03 17 06:06:16
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Visual Basic & VB.NET

 > 

Archives Visual Basic

 > 

Graphique

 > 

Frames et shapes


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Frames et shapes

mercredi 18 juin 2003 à 17:35:11 | Frames et shapes

machto


Bonsoir.

je voudrais faire un truc un peu compliqué et je ne sais pas comment m'y prendre. Vos suggestions ou solutions sont les bien venues:

soit:

- J'ai des images schématiques monochromes (bmp par exemple) que je veux charger sur ma Form autant de fois que je veux et placer ensuite où je veux. J'ai besoin, pour que mon programme soit explicite, de pouvoir faire varier la couleur de cette (ces) image(s). Est-ce possible et comment?

- J'ai des frames contenant chacune une shape et des lignes schématiques monochromes. Je sais faire varier les couleurs de la shape et des lignes mais comment faire pour dupliquer ces frames et leur contenu, pendant l'execution, d'un clic par exemple, pour en multiplier le nombre à loisir en les indexant. Mêmes questions.

En résumé, je veux disposer des "trucs" autour d'un cadre et en piloter les couleurs.

Merci par avance.

M@chto
jeudi 19 juin 2003 à 09:56:07 | Re : Frames et shapes

SibosisITS

Bonjour tout d'abord ;)

Pour la deuxième question, c'est assez simple : Je suppose que Frame est le nom de la Frame à l'écran, Shape est le nom de ta shape et Line1, Line2, ... sont les noms de tes lignes. Je suppose que tu as déjà créé un exemplaire de chaque au moment de la création. Pour pouvoir les duppliquer, tu dois créer des groupes de contrôles. Pour cela, tu dois modifier la propriété Index de chacun des composants en luii donnant la valeur '0'. Ensuite, pour duppliquer l'un des éléments, tu dois écrire le code suivant

Load Frame(i)
with Frame(i)
.visible= true 'affiche l'objet à l'écran (c pas automatique)
'Définition de la position et des dimensions de la frame
.top = ? 'Je te laisse le soin de remplacer les points d'interrogation ;)
.left = ?
.width = ?
.height = ?
'Insérer ici les autres propriétés de l'objet nécessaires
end with

Load Shape(i)
with Shape(i)
.visible = true
.parent = Frame(i) 'Indique l'objet devant contenir la shape
'Insérer ici les propriétés de dimensions, comme pour Frame (sauf qu'ici, les coordonnées fournies sont celles relatives coordonnées de la Frame
'Insérer les autres propriétés nécessaires (forme, couleur intérieure (.BackColor il me semble), couleur de la bordure, etc.)
end with

'Répéter le code suivant pour chaque ligne (en changeant le numéro)
Load Line(i)
with Line(i)
.visible = true
.parent = Frame(i)
'Insérer toutes les autres propriétés nécessaires...
end with

A la fin de la création, il ne reste plus qu'à incrémenter i

i = i + 1

et on est près pour une nouvelle dupplication.

La variable i représente une valeur d'index non utilisé. Plusieurs choix pour sa déclaration : si la dupplication se fait toujours dans la même fonction, tu peux la déclarer en 'static' dans cette fonction et l'initialiser à 1 :

Static i As Integer
if i=0 then i=1

Si tu possède dans ton programme plusieurs fonctions succeptibles de créer des éléments dans un des groupes, tu la déclares au niveau module et tu l'initialises en début de programme à 1 également

Il se peut que tu ais déjà créé un groupe de controles pour les lignes contenues dans la frame (Line(0), Line(1), etc...)
Qu'à cela ne tienne, il suffit de changer l'index 'i' pour les lignes par un autre index, indépendant, 'j' par exemple (original n'est-ce pas ? ;). Ceci a l'avantage de réduire la taille du code à écrire. Supposons que ta frame contient 'n' lignes : on a alors le code suivant (qui remplace celui concernant les lignes écrit plus haut) Je suppose déclarée la variable compteur 'a' , et 'j' initialisée à une valeur d'index non utilisé (les remarques pour 'i' plus haut sont aussi valables ici) :

For a=1 to n
Load Line(j)
with Line(j)
.visible = true
.parent = Frame(i) 'c'est bien un 'i' ici
'Autres propriétés...
end with
j = j + 1 'Ne pas oublier l'incrémentation
Next a

Ce procédé est très pratique : il permet par exemple de créer un nombre variable de lignes dans chaque frame (en faisant varier n d'un appel à l'autre).

Au moment de la création d'un objet dans un groupe, on ne peut pas être certain des valeurs prises par les propriétés de l'objet. Il est donc conseillé, lorqu'on charge un objet, de définir toutes les propriétés dont on a besoin explicitement.


VOILA pour la deuxième question.


Pour la première... ct quoi déjà ? ;) Ah oui...
La réponse : Ca dépend ce que tu veux en faire...
1) Si cette image est chargée au moment de la création dans un controle Image, pour le duppliquer, tu procèdes comme avec les objets Frame, Shape et Line.
2) Si cette image est chargée au moment de l'execution (ie par le code) dans un objet Picture (nommé par exemple MonoPic), grace à la fonction LoadPicture, et que tu veux l'afficher directement dans le contexte graphique de ton form, tu peux utiliser la méthode très utile 'PaintPicture' comme suit :

NomForm.PaintPicture MonoPic, x, y

où x et y sont les coordonnées du coin supérieur gauche de l'image. Bien sûr, cette méthode suppose que tu redessines les contrôles chaque fois que nécessaire (dans l'événement Paint de ton form), ce qui suppose de connaîtres la listes des coordonnées du coin supérieur gauche de chacune des images à afficher : Cela peut se faire en utilisant un tableau dynamique de structures PARAMPIC par exemple. Voici les déclarations nécessaires :

Type PARAMPIC
x As Single
y As Single
'Autres paramètres nécessaires à l'image
End Type

Dim PicTable() As POINT
Dim IndexPic As Integer 'Variable à initialiser à 0

Tu agrandis le tableau lorsque tu ajoutes une nouvelle image (pour des raisons pratiques, tu t'interdis l'utilisation de l'index 0 dans le tableau)

IndexPic = IndexPic + 1
Redim Preserve PicTable(IndexPic) 'Agrandit le tableau tout en préservant les valeurs déjà entrées

With PicTable(IndexPic)
.x = ?
.y = ?
'Initialiser les autres paramètres
End With

Pour afficher les images, tu utilises alors le code suivant (code qui doit être au moins dans l'événement Paint de ton form) :

For a=1 to IndexPic
'Insérer le code pour le traitement des paramètres...
NomForm.PaintPicture MonoPic, Pictable(a).x, PicTable(a).y
Next a

Pour ce qui est de la couleur, tu ne peux pas échapper à l'utilisation de l'API Windows qui donne toutes les fonctions nécessaires pour un traitement rapide. Mais je ne peux pas beaucoup t'aider dans ce sens pour le moment, vue que c'est précisément là-dessus que je réfléchis actuellement (je vois comment faire, mais je ne connaît pas toutes les instructions par coeurs... et ce serait très long... beaucoup plus que la longueur actuelle de ce message, qui est déjà importante ;)


Bien, j'espère avoir répondu à ta (tes) question(s).

S'il y a des points obscures, n'hésite surtout pas à demander : si je suis dans le coin, je me ferais un plaisir de t'éclairer...

(; Sibo ;)


-------------------------------
Réponse au message :
-------------------------------

>
> Bonsoir.
>
> je voudrais faire un truc un peu compliqué et je ne sais pas comment m'y prendre. Vos suggestions ou solutions sont les bien venues:
>
> soit:
>
> - J'ai des images schématiques monochromes (bmp par exemple) que je veux charger sur ma Form autant de fois que je veux et placer ensuite où je veux. J'ai besoin, pour que mon programme soit explicite, de pouvoir faire varier la couleur de cette (ces) image(s). Est-ce possible et comment?
>
> - J'ai des frames contenant chacune une shape et des lignes schématiques monochromes. Je sais faire varier les couleurs de la shape et des lignes mais comment faire pour dupliquer ces frames et leur contenu, pendant l'execution, d'un clic par exemple, pour en multiplier le nombre à loisir en les indexant. Mêmes questions.
>
> En résumé, je veux disposer des "trucs" autour d'un cadre et en piloter les couleurs.
>
> Merci par avance.
>
> M@chto
jeudi 19 juin 2003 à 11:47:53 | Re : Frames et shapes

machto


M@chto


-------------------------------
Réponse au message :
-------------------------------

> Bonjour tout d'abord ;)
>
> Pour la deuxième question, c'est assez simple : Je suppose que Frame est le nom de la Frame à l'écran, Shape est le nom de ta shape et Line1, Line2, ... sont les noms de tes lignes. Je suppose que tu as déjà créé un exemplaire de chaque au moment de la création. Pour pouvoir les duppliquer, tu dois créer des groupes de contrôles. Pour cela, tu dois modifier la propriété Index de chacun des composants en luii donnant la valeur '0'. Ensuite, pour duppliquer l'un des éléments, tu dois écrire le code suivant
>
> Load Frame(i)
> with Frame(i)
> .visible= true 'affiche l'objet à l'écran (c pas automatique)
> 'Définition de la position et des dimensions de la frame
> .top = ? 'Je te laisse le soin de remplacer les points d'interrogation ;)
> .left = ?
> .width = ?
> .height = ?
> 'Insérer ici les autres propriétés de l'objet nécessaires
> end with
>
> Load Shape(i)
> with Shape(i)
> .visible = true
> .parent = Frame(i) 'Indique l'objet devant contenir la shape
> 'Insérer ici les propriétés de dimensions, comme pour Frame (sauf qu'ici, les coordonnées fournies sont celles relatives coordonnées de la Frame
> 'Insérer les autres propriétés nécessaires (forme, couleur intérieure (.BackColor il me semble), couleur de la bordure, etc.)
> end with
>
> 'Répéter le code suivant pour chaque ligne (en changeant le numéro)
> Load Line(i)
> with Line(i)
> .visible = true
> .parent = Frame(i)
> 'Insérer toutes les autres propriétés nécessaires...
> end with
>
> A la fin de la création, il ne reste plus qu'à incrémenter i
>
> i = i + 1
>
> et on est près pour une nouvelle dupplication.
>
> La variable i représente une valeur d'index non utilisé. Plusieurs choix pour sa déclaration : si la dupplication se fait toujours dans la même fonction, tu peux la déclarer en 'static' dans cette fonction et l'initialiser à 1 :
>
> Static i As Integer
> if i=0 then i=1
>
> Si tu possède dans ton programme plusieurs fonctions succeptibles de créer des éléments dans un des groupes, tu la déclares au niveau module et tu l'initialises en début de programme à 1 également
>
> Il se peut que tu ais déjà créé un groupe de controles pour les lignes contenues dans la frame (Line(0), Line(1), etc...)
> Qu'à cela ne tienne, il suffit de changer l'index 'i' pour les lignes par un autre index, indépendant, 'j' par exemple (original n'est-ce pas ? ;). Ceci a l'avantage de réduire la taille du code à écrire. Supposons que ta frame contient 'n' lignes : on a alors le code suivant (qui remplace celui concernant les lignes écrit plus haut) Je suppose déclarée la variable compteur 'a' , et 'j' initialisée à une valeur d'index non utilisé (les remarques pour 'i' plus haut sont aussi valables ici) :
>
> For a=1 to n
> Load Line(j)
> with Line(j)
> .visible = true
> .parent = Frame(i) 'c'est bien un 'i' ici
> 'Autres propriétés...
> end with
> j = j + 1 'Ne pas oublier l'incrémentation
> Next a
>
> Ce procédé est très pratique : il permet par exemple de créer un nombre variable de lignes dans chaque frame (en faisant varier n d'un appel à l'autre).
>
> Au moment de la création d'un objet dans un groupe, on ne peut pas être certain des valeurs prises par les propriétés de l'objet. Il est donc conseillé, lorqu'on charge un objet, de définir toutes les propriétés dont on a besoin explicitement.
>
>
> VOILA pour la deuxième question.
>
>
> Pour la première... ct quoi déjà ? ;) Ah oui...
> La réponse : Ca dépend ce que tu veux en faire...
> 1) Si cette image est chargée au moment de la création dans un controle Image, pour le duppliquer, tu procèdes comme avec les objets Frame, Shape et Line.
> 2) Si cette image est chargée au moment de l'execution (ie par le code) dans un objet Picture (nommé par exemple MonoPic), grace à la fonction LoadPicture, et que tu veux l'afficher directement dans le contexte graphique de ton form, tu peux utiliser la méthode très utile 'PaintPicture' comme suit :
>
> NomForm.PaintPicture MonoPic, x, y
>
> où x et y sont les coordonnées du coin supérieur gauche de l'image. Bien sûr, cette méthode suppose que tu redessines les contrôles chaque fois que nécessaire (dans l'événement Paint de ton form), ce qui suppose de connaîtres la listes des coordonnées du coin supérieur gauche de chacune des images à afficher : Cela peut se faire en utilisant un tableau dynamique de structures PARAMPIC par exemple. Voici les déclarations nécessaires :
>
> Type PARAMPIC
> x As Single
> y As Single
> 'Autres paramètres nécessaires à l'image
> End Type
>
> Dim PicTable() As POINT
> Dim IndexPic As Integer 'Variable à initialiser à 0
>
> Tu agrandis le tableau lorsque tu ajoutes une nouvelle image (pour des raisons pratiques, tu t'interdis l'utilisation de l'index 0 dans le tableau)
>
> IndexPic = IndexPic + 1
> Redim Preserve PicTable(IndexPic) 'Agrandit le tableau tout en préservant les valeurs déjà entrées
>
> With PicTable(IndexPic)
> .x = ?
> .y = ?
> 'Initialiser les autres paramètres
> End With
>
> Pour afficher les images, tu utilises alors le code suivant (code qui doit être au moins dans l'événement Paint de ton form) :
>
> For a=1 to IndexPic
> 'Insérer le code pour le traitement des paramètres...
> NomForm.PaintPicture MonoPic, Pictable(a).x, PicTable(a).y
> Next a
>
> Pour ce qui est de la couleur, tu ne peux pas échapper à l'utilisation de l'API Windows qui donne toutes les fonctions nécessaires pour un traitement rapide. Mais je ne peux pas beaucoup t'aider dans ce sens pour le moment, vue que c'est précisément là-dessus que je réfléchis actuellement (je vois comment faire, mais je ne connaît pas toutes les instructions par coeurs... et ce serait très long... beaucoup plus que la longueur actuelle de ce message, qui est déjà importante ;)
>
>
> Bien, j'espère avoir répondu à ta (tes) question(s).
>
> S'il y a des points obscures, n'hésite surtout pas à demander : si je suis dans le coin, je me ferais un plaisir de t'éclairer...
>
> (; Sibo ;)
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> >
> > Bonsoir.
> >
> > je voudrais faire un truc un peu compliqué et je ne sais pas comment m'y prendre. Vos suggestions ou solutions sont les bien venues:
> >
> > soit:
> >
> > - J'ai des images schématiques monochromes (bmp par exemple) que je veux charger sur ma Form autant de fois que je veux et placer ensuite où je veux. J'ai besoin, pour que mon programme soit explicite, de pouvoir faire varier la couleur de cette (ces) image(s). Est-ce possible et comment?
> >
> > - J'ai des frames contenant chacune une shape et des lignes schématiques monochromes. Je sais faire varier les couleurs de la shape et des lignes mais comment faire pour dupliquer ces frames et leur contenu, pendant l'execution, d'un clic par exemple, pour en multiplier le nombre à loisir en les indexant. Mêmes questions.
> >
> > En résumé, je veux disposer des "trucs" autour d'un cadre et en piloter les couleurs.
> >
> > Merci par avance.
> >
> > M@chto
>
jeudi 19 juin 2003 à 11:51:59 | Re : Frames et shapes

machto

Bonjour.
Merci, tu as l'air d'être un pro, moi je débute et me suis lancé dans un prog un peu difficile pour moi, mais ça me permet de progresser.
Je n'ai pas tout compris pour l'instant, je reverrai ça à tête reposée. Ce qui m'oimporte, c'est que cela soit possible. En tout cas, merci d'avoir pris le temps.
A+

M@chto


-------------------------------
Réponse au message :
-------------------------------

> Bonjour tout d'abord ;)
>
> Pour la deuxième question, c'est assez simple : Je suppose que Frame est le nom de la Frame à l'écran, Shape est le nom de ta shape et Line1, Line2, ... sont les noms de tes lignes. Je suppose que tu as déjà créé un exemplaire de chaque au moment de la création. Pour pouvoir les duppliquer, tu dois créer des groupes de contrôles. Pour cela, tu dois modifier la propriété Index de chacun des composants en luii donnant la valeur '0'. Ensuite, pour duppliquer l'un des éléments, tu dois écrire le code suivant
>
> Load Frame(i)
> with Frame(i)
> .visible= true 'affiche l'objet à l'écran (c pas automatique)
> 'Définition de la position et des dimensions de la frame
> .top = ? 'Je te laisse le soin de remplacer les points d'interrogation ;)
> .left = ?
> .width = ?
> .height = ?
> 'Insérer ici les autres propriétés de l'objet nécessaires
> end with
>
> Load Shape(i)
> with Shape(i)
> .visible = true
> .parent = Frame(i) 'Indique l'objet devant contenir la shape
> 'Insérer ici les propriétés de dimensions, comme pour Frame (sauf qu'ici, les coordonnées fournies sont celles relatives coordonnées de la Frame
> 'Insérer les autres propriétés nécessaires (forme, couleur intérieure (.BackColor il me semble), couleur de la bordure, etc.)
> end with
>
> 'Répéter le code suivant pour chaque ligne (en changeant le numéro)
> Load Line(i)
> with Line(i)
> .visible = true
> .parent = Frame(i)
> 'Insérer toutes les autres propriétés nécessaires...
> end with
>
> A la fin de la création, il ne reste plus qu'à incrémenter i
>
> i = i + 1
>
> et on est près pour une nouvelle dupplication.
>
> La variable i représente une valeur d'index non utilisé. Plusieurs choix pour sa déclaration : si la dupplication se fait toujours dans la même fonction, tu peux la déclarer en 'static' dans cette fonction et l'initialiser à 1 :
>
> Static i As Integer
> if i=0 then i=1
>
> Si tu possède dans ton programme plusieurs fonctions succeptibles de créer des éléments dans un des groupes, tu la déclares au niveau module et tu l'initialises en début de programme à 1 également
>
> Il se peut que tu ais déjà créé un groupe de controles pour les lignes contenues dans la frame (Line(0), Line(1), etc...)
> Qu'à cela ne tienne, il suffit de changer l'index 'i' pour les lignes par un autre index, indépendant, 'j' par exemple (original n'est-ce pas ? ;). Ceci a l'avantage de réduire la taille du code à écrire. Supposons que ta frame contient 'n' lignes : on a alors le code suivant (qui remplace celui concernant les lignes écrit plus haut) Je suppose déclarée la variable compteur 'a' , et 'j' initialisée à une valeur d'index non utilisé (les remarques pour 'i' plus haut sont aussi valables ici) :
>
> For a=1 to n
> Load Line(j)
> with Line(j)
> .visible = true
> .parent = Frame(i) 'c'est bien un 'i' ici
> 'Autres propriétés...
> end with
> j = j + 1 'Ne pas oublier l'incrémentation
> Next a
>
> Ce procédé est très pratique : il permet par exemple de créer un nombre variable de lignes dans chaque frame (en faisant varier n d'un appel à l'autre).
>
> Au moment de la création d'un objet dans un groupe, on ne peut pas être certain des valeurs prises par les propriétés de l'objet. Il est donc conseillé, lorqu'on charge un objet, de définir toutes les propriétés dont on a besoin explicitement.
>
>
> VOILA pour la deuxième question.
>
>
> Pour la première... ct quoi déjà ? ;) Ah oui...
> La réponse : Ca dépend ce que tu veux en faire...
> 1) Si cette image est chargée au moment de la création dans un controle Image, pour le duppliquer, tu procèdes comme avec les objets Frame, Shape et Line.
> 2) Si cette image est chargée au moment de l'execution (ie par le code) dans un objet Picture (nommé par exemple MonoPic), grace à la fonction LoadPicture, et que tu veux l'afficher directement dans le contexte graphique de ton form, tu peux utiliser la méthode très utile 'PaintPicture' comme suit :
>
> NomForm.PaintPicture MonoPic, x, y
>
> où x et y sont les coordonnées du coin supérieur gauche de l'image. Bien sûr, cette méthode suppose que tu redessines les contrôles chaque fois que nécessaire (dans l'événement Paint de ton form), ce qui suppose de connaîtres la listes des coordonnées du coin supérieur gauche de chacune des images à afficher : Cela peut se faire en utilisant un tableau dynamique de structures PARAMPIC par exemple. Voici les déclarations nécessaires :
>
> Type PARAMPIC
> x As Single
> y As Single
> 'Autres paramètres nécessaires à l'image
> End Type
>
> Dim PicTable() As POINT
> Dim IndexPic As Integer 'Variable à initialiser à 0
>
> Tu agrandis le tableau lorsque tu ajoutes une nouvelle image (pour des raisons pratiques, tu t'interdis l'utilisation de l'index 0 dans le tableau)
>
> IndexPic = IndexPic + 1
> Redim Preserve PicTable(IndexPic) 'Agrandit le tableau tout en préservant les valeurs déjà entrées
>
> With PicTable(IndexPic)
> .x = ?
> .y = ?
> 'Initialiser les autres paramètres
> End With
>
> Pour afficher les images, tu utilises alors le code suivant (code qui doit être au moins dans l'événement Paint de ton form) :
>
> For a=1 to IndexPic
> 'Insérer le code pour le traitement des paramètres...
> NomForm.PaintPicture MonoPic, Pictable(a).x, PicTable(a).y
> Next a
>
> Pour ce qui est de la couleur, tu ne peux pas échapper à l'utilisation de l'API Windows qui donne toutes les fonctions nécessaires pour un traitement rapide. Mais je ne peux pas beaucoup t'aider dans ce sens pour le moment, vue que c'est précisément là-dessus que je réfléchis actuellement (je vois comment faire, mais je ne connaît pas toutes les instructions par coeurs... et ce serait très long... beaucoup plus que la longueur actuelle de ce message, qui est déjà importante ;)
>
>
> Bien, j'espère avoir répondu à ta (tes) question(s).
>
> S'il y a des points obscures, n'hésite surtout pas à demander : si je suis dans le coin, je me ferais un plaisir de t'éclairer...
>
> (; Sibo ;)
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> >
> > Bonsoir.
> >
> > je voudrais faire un truc un peu compliqué et je ne sais pas comment m'y prendre. Vos suggestions ou solutions sont les bien venues:
> >
> > soit:
> >
> > - J'ai des images schématiques monochromes (bmp par exemple) que je veux charger sur ma Form autant de fois que je veux et placer ensuite où je veux. J'ai besoin, pour que mon programme soit explicite, de pouvoir faire varier la couleur de cette (ces) image(s). Est-ce possible et comment?
> >
> > - J'ai des frames contenant chacune une shape et des lignes schématiques monochromes. Je sais faire varier les couleurs de la shape et des lignes mais comment faire pour dupliquer ces frames et leur contenu, pendant l'execution, d'un clic par exemple, pour en multiplier le nombre à loisir en les indexant. Mêmes questions.
> >
> > En résumé, je veux disposer des "trucs" autour d'un cadre et en piloter les couleurs.
> >
> > Merci par avance.
> >
> > M@chto
>
mercredi 25 juin 2003 à 10:06:43 | Re : Frames et shapes

machto

Bonjour,
j'ai voulu essayer ce code (réponse de la 2° question) mais j'ai qques difficultés:
- Ce dode, tu le mets dans quoi? Un module?
- Comment dois-je l'utiliser pour faire les duplications "en live" pendant mon programme?
- Tu parles de "fonction" pour déclarer (i). Je n'ai pas encore abordé ce type de code dans mon "apprentissage". Que veux-tu dire et que dois-je faire?
Je te remercie par avance.

M@chto


-------------------------------
Réponse au message :
-------------------------------

> Bonjour tout d'abord ;)
>
> Pour la deuxième question, c'est assez simple : Je suppose que Frame est le nom de la Frame à l'écran, Shape est le nom de ta shape et Line1, Line2, ... sont les noms de tes lignes. Je suppose que tu as déjà créé un exemplaire de chaque au moment de la création. Pour pouvoir les duppliquer, tu dois créer des groupes de contrôles. Pour cela, tu dois modifier la propriété Index de chacun des composants en luii donnant la valeur '0'. Ensuite, pour duppliquer l'un des éléments, tu dois écrire le code suivant
>
> Load Frame(i)
> with Frame(i)
> .visible= true 'affiche l'objet à l'écran (c pas automatique)
> 'Définition de la position et des dimensions de la frame
> .top = ? 'Je te laisse le soin de remplacer les points d'interrogation ;)
> .left = ?
> .width = ?
> .height = ?
> 'Insérer ici les autres propriétés de l'objet nécessaires
> end with
>
> Load Shape(i)
> with Shape(i)
> .visible = true
> .parent = Frame(i) 'Indique l'objet devant contenir la shape
> 'Insérer ici les propriétés de dimensions, comme pour Frame (sauf qu'ici, les coordonnées fournies sont celles relatives coordonnées de la Frame
> 'Insérer les autres propriétés nécessaires (forme, couleur intérieure (.BackColor il me semble), couleur de la bordure, etc.)
> end with
>
> 'Répéter le code suivant pour chaque ligne (en changeant le numéro)
> Load Line(i)
> with Line(i)
> .visible = true
> .parent = Frame(i)
> 'Insérer toutes les autres propriétés nécessaires...
> end with
>
> A la fin de la création, il ne reste plus qu'à incrémenter i
>
> i = i + 1
>
> et on est près pour une nouvelle dupplication.
>
> La variable i représente une valeur d'index non utilisé. Plusieurs choix pour sa déclaration : si la dupplication se fait toujours dans la même fonction, tu peux la déclarer en 'static' dans cette fonction et l'initialiser à 1 :
>
> Static i As Integer
> if i=0 then i=1
>
> Si tu possède dans ton programme plusieurs fonctions succeptibles de créer des éléments dans un des groupes, tu la déclares au niveau module et tu l'initialises en début de programme à 1 également
>
> Il se peut que tu ais déjà créé un groupe de controles pour les lignes contenues dans la frame (Line(0), Line(1), etc...)
> Qu'à cela ne tienne, il suffit de changer l'index 'i' pour les lignes par un autre index, indépendant, 'j' par exemple (original n'est-ce pas ? ;). Ceci a l'avantage de réduire la taille du code à écrire. Supposons que ta frame contient 'n' lignes : on a alors le code suivant (qui remplace celui concernant les lignes écrit plus haut) Je suppose déclarée la variable compteur 'a' , et 'j' initialisée à une valeur d'index non utilisé (les remarques pour 'i' plus haut sont aussi valables ici) :
>
> For a=1 to n
> Load Line(j)
> with Line(j)
> .visible = true
> .parent = Frame(i) 'c'est bien un 'i' ici
> 'Autres propriétés...
> end with
> j = j + 1 'Ne pas oublier l'incrémentation
> Next a
>
> Ce procédé est très pratique : il permet par exemple de créer un nombre variable de lignes dans chaque frame (en faisant varier n d'un appel à l'autre).
>
> Au moment de la création d'un objet dans un groupe, on ne peut pas être certain des valeurs prises par les propriétés de l'objet. Il est donc conseillé, lorqu'on charge un objet, de définir toutes les propriétés dont on a besoin explicitement.
>
>
> VOILA pour la deuxième question.
>
>
> Pour la première... ct quoi déjà ? ;) Ah oui...
> La réponse : Ca dépend ce que tu veux en faire...
> 1) Si cette image est chargée au moment de la création dans un controle Image, pour le duppliquer, tu procèdes comme avec les objets Frame, Shape et Line.
> 2) Si cette image est chargée au moment de l'execution (ie par le code) dans un objet Picture (nommé par exemple MonoPic), grace à la fonction LoadPicture, et que tu veux l'afficher directement dans le contexte graphique de ton form, tu peux utiliser la méthode très utile 'PaintPicture' comme suit :
>
> NomForm.PaintPicture MonoPic, x, y
>
> où x et y sont les coordonnées du coin supérieur gauche de l'image. Bien sûr, cette méthode suppose que tu redessines les contrôles chaque fois que nécessaire (dans l'événement Paint de ton form), ce qui suppose de connaîtres la listes des coordonnées du coin supérieur gauche de chacune des images à afficher : Cela peut se faire en utilisant un tableau dynamique de structures PARAMPIC par exemple. Voici les déclarations nécessaires :
>
> Type PARAMPIC
> x As Single
> y As Single
> 'Autres paramètres nécessaires à l'image
> End Type
>
> Dim PicTable() As POINT
> Dim IndexPic As Integer 'Variable à initialiser à 0
>
> Tu agrandis le tableau lorsque tu ajoutes une nouvelle image (pour des raisons pratiques, tu t'interdis l'utilisation de l'index 0 dans le tableau)
>
> IndexPic = IndexPic + 1
> Redim Preserve PicTable(IndexPic) 'Agrandit le tableau tout en préservant les valeurs déjà entrées
>
> With PicTable(IndexPic)
> .x = ?
> .y = ?
> 'Initialiser les autres paramètres
> End With
>
> Pour afficher les images, tu utilises alors le code suivant (code qui doit être au moins dans l'événement Paint de ton form) :
>
> For a=1 to IndexPic
> 'Insérer le code pour le traitement des paramètres...
> NomForm.PaintPicture MonoPic, Pictable(a).x, PicTable(a).y
> Next a
>
> Pour ce qui est de la couleur, tu ne peux pas échapper à l'utilisation de l'API Windows qui donne toutes les fonctions nécessaires pour un traitement rapide. Mais je ne peux pas beaucoup t'aider dans ce sens pour le moment, vue que c'est précisément là-dessus que je réfléchis actuellement (je vois comment faire, mais je ne connaît pas toutes les instructions par coeurs... et ce serait très long... beaucoup plus que la longueur actuelle de ce message, qui est déjà importante ;)
>
>
> Bien, j'espère avoir répondu à ta (tes) question(s).
>
> S'il y a des points obscures, n'hésite surtout pas à demander : si je suis dans le coin, je me ferais un plaisir de t'éclairer...
>
> (; Sibo ;)
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> >
> > Bonsoir.
> >
> > je voudrais faire un truc un peu compliqué et je ne sais pas comment m'y prendre. Vos suggestions ou solutions sont les bien venues:
> >
> > soit:
> >
> > - J'ai des images schématiques monochromes (bmp par exemple) que je veux charger sur ma Form autant de fois que je veux et placer ensuite où je veux. J'ai besoin, pour que mon programme soit explicite, de pouvoir faire varier la couleur de cette (ces) image(s). Est-ce possible et comment?
> >
> > - J'ai des frames contenant chacune une shape et des lignes schématiques monochromes. Je sais faire varier les couleurs de la shape et des lignes mais comment faire pour dupliquer ces frames et leur contenu, pendant l'execution, d'un clic par exemple, pour en multiplier le nombre à loisir en les indexant. Mêmes questions.
> >
> > En résumé, je veux disposer des "trucs" autour d'un cadre et en piloter les couleurs.
> >
> > Merci par avance.
> >
> > M@chto
>
jeudi 27 novembre 2003 à 10:47:27 | Re : Frames et shapes

cirrus


j 'ai lu la repsone formuler et la chtite question mais je kroa qu'il y a un pblm :
tu dit qu'on peut affecter une valuer à la propriété parent ? comment tu fait ?

frame.parent = qqchose

je croit que c imposible

se qui ammene am am 2 ème question. comment faire pour dupliquer plusieur frame avec des controles à l'interieur ?



Cette discussion est classée dans : exemple, frames, shapes, schématiques, monochromes


Répondre à ce message

Sujets en rapport avec ce message

Exemple de menu [ par 2001 ] est ce que quelqu'un aurait un exemple de menu avec sous menu le tout déroulant?meme genre que celui dans vb ou un navigateur.merci de votre aide Insérer du texte dans un textbox [ par phil ] Salut !J'ai un textbox,je suis a un endroit donne dans le contenu du textbox (exemple : en plein milieu).Je clique sur un bouton et je veux qu'a l'end Exemple lecture / ecriture port COM 1 [ par beber ] débutant !Je recherche des sources permettant de lire le port com 1 (interuption par évenement) et de mettre les donnees dans un fichier texte.Merci d Modifications des paramètres systèmes de la souris [ par alex ] Bonjour à tousquelqu'un peut il m'aider pour gérer les clics de la souris.A savoir que je voudrais par exemple modifier les paramètres systèmes de la Exemple de forum [ par Jo Ace ] Qui pourrait me donner un exemple de forum en ASP (j'ai viewé le code des pages de Nix et ce que je trouve c'est ALPHADESK CODE (c'est pas marrant)) ? Utilisation de classes et de membres [ par Raf ] Bonjour, je débute en VB et je souhaiterai un exemple concret d'utilisation de classes et sourtout d'un membre de cette classe.Bien sûr, je souhaitera Important! Urgent! Texte [ par WebMagique ] j'ai un grave problème: j'ai fais un programme.Pendant ce programme, l'utilisateur change certaines choses(bien normal!)Exemple: Image1.left= 12 Copier un fichier [ par rabusier ] Je n'arrive pas a copier un fichier. Par exemple, je lis un fichier, j'en extrait les variables nécessaires, et je fais par exemple FileCopy source, d Angle d'une image... Assez urgent! :-) [ par WebMagique ] Je veux faire un jeu de course de voitures 2D en VB6...J'ai une image de voiture dont l'avant est à gaucheExemple: /¯¯¯|¯\¯¯¯¯¯|¯¯¯¯¯/|¯¯ Détection d'OS ???? [ par Raf ] Bonjour,Je souhaiterai détecter grâce à une DLL (par exemple) le systéme d'exploitation d'un PC.En effet, si le PC tourne avec win 95/98 par exemple i


Nos sponsors


Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,374 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales