Problémes avec form_load()

Problémes avec form_load() - VB/VBA/VBS - Programmation

Marsh Posté le 09-07-2002 à 18:53:02    

J'ai une feuile principale a partir de laquelle je fait toutes mes selections et une autre page sur laquelle j'aimerais mettr u tableu dans lequel les options de la 1° page piocheraient les valeurs. Seulement rien n'apprait sur la 2° page quand je lance le programme. dites moi si les lignes de code sont coreects
 
 
Private Sub Form_Load()
 
For x = 0 To 20
Cuve7.CurrentX = 840
Cuve7.CurrentY = 240 + 240 * x
Cuve7.Print x
Next x
 
End Sub
 
 
 
 
Merci d'avance

Reply

Marsh Posté le 09-07-2002 à 18:53:02   

Reply

Marsh Posté le 09-07-2002 à 19:24:12    

tu peux être plus clair, indiquer les controles que tu utilises et à quoi corresponds l'objet "Cuve7", ça serait plus clair


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 09-07-2002 à 19:51:50    

cuve7 est le nom de la form (dans l'option form_load())
et j'utlise juste un tableau déclarez comme une variable ( dim conversion (2,2) as variant )

Reply

Marsh Posté le 09-07-2002 à 20:24:26    

les méthode form.print, form.CurrentX et form.CurrentY n'existent pas en VB...  [:mareek]


Message édité par mareek le 09-07-2002 à 20:24:46

---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 10-07-2002 à 08:48:21    

Ces méthodes existent. Si j'écris ce code  sur un bouton de commande , quand je clique dessus j'ai les valeurs qui apparaissent. Mais j'aimerais que ces valeurs ce charge automatiquement avec la feuille

Reply

Marsh Posté le 10-07-2002 à 09:02:37    

on a retrouvé un nouveau foromeur qui est incapable de s'expliquer  [:xp1700]


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 10-07-2002 à 09:55:45    

Toomslegrand a écrit a écrit :

Ces méthodes existent. Si j'écris ce code  sur un bouton de commande , quand je clique dessus j'ai les valeurs qui apparaissent. Mais j'aimerais que ces valeurs ce charge automatiquement avec la feuille




 
si tu veux charger du code c'est dans l'évenement Form_load de la feuille :
 

Code :
  1. private Sub Form_load
  2. //ici tu mets de code que tu veux et il te sera charger avant l'apparition de la feuille
  3. end sub


 

Code :
  1. privayte sub Form_Activate
  2. //ici tu mets le code qui sera charger dés que ta feuille prend le focus
  3. end sub


 
aprés tu as les propriétés des objet qui varient des uns des autres et des feuilles...les propriété suivante :
 

Code :
  1. For x = 0 To 20
  2. Cuve7.CurrentX = 840
  3. Cuve7.CurrentY = 240 + 240 * x
  4. Cuve7.Print x
  5. Next x


 
existe, c'est vrai dans les propriété d'une feuille, mais tu as du mettre les mauvaise valeur...essaye de le mettre dans l'évenement activate de la feuille et mets des points d'arrêt, (les ronds rouge)...


Message édité par macray le 10-07-2002 à 09:56:12

---------------
;) Bienvenue sur le site...:)             http://perso.wanadoo.fr/rapport
Reply

Marsh Posté le 10-07-2002 à 10:10:16    

Toomslegrand a écrit a écrit :

Ces méthodes existent. Si j'écris ce code  sur un bouton de commande , quand je clique dessus j'ai les valeurs qui apparaissent. Mais j'aimerais que ces valeurs ce charge automatiquement avec la feuille




 
 
Je me suis gourré, currentx et currenty existent, mais pas print.
 
en fait, je ne comprends pas ce que tu veux faire et a quoi te sers currentX et currentY


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 10-07-2002 à 10:24:26    

Pour positionner la feuille (ou les contrôles), il y a (de mémoire) .left, .rignt, .top, .bottom ....

Reply

Marsh Posté le 10-07-2002 à 11:10:44    

carbon_14 a écrit a écrit :

Pour positionner la feuille (ou les contrôles), il y a (de mémoire) .left, .rignt, .top, .bottom ....




 
Je confirme, t'as une bonne mémoire !:D Il lui manquera tous simplement la gestions des résolutions d'écran...c'est trop long à expliquer ! :D


---------------
;) Bienvenue sur le site...:)             http://perso.wanadoo.fr/rapport
Reply

Marsh Posté le 10-07-2002 à 11:10:44   

Reply

Marsh Posté le 10-07-2002 à 13:35:34    

S'il fait ça pour une résolution "fixe", si des zones de texte sont déplacées où il faut, il faudrait un "array" de 21 contrôles pour faire
 
For x% = 0 To 20  
  Cuve7[x%].left = ...  
  Cuve7[x%].top = ...  
  Cuve7[x%].bottom = ...  
  Cuve7[x%].right = ...  
  Cuve7[x%].Text = str$(x%)  (ou .Label selon le type d'objet)
Next x%

Reply

Marsh Posté le 10-07-2002 à 13:52:15    

c'est un peu plus compliqué que ca !

  • il faut détecter la résolution en cours avec un API windows
  • il faut mettre dans des constances le width et le height d'une feuille pleine écran dans une résolution donnée. par exemple en 1024x768, la hauteur si je me souviens bien est 12000 et des brouettes...
  • Avec une fonction il faut détecter et mettre tous ca dans des variables, les hauteur et largeur de l'écran (qui elle change avec les résolutions), avec la fonction  


a = screen.height
b = screen.width
 

  • Avec les constantes et les hauteur et largeur relevés dans la variable, il faut faire le rapport entre les deux. Le résultat sera placés dans une variable


  • Tous les exceptés quelque uns seront et devront être multipliés par cette variable...


Code :
  1. dim a as integer
  2. dim b as integer
  3. dim c as long
  4. dim d as long
  5. const HAUTEUR_FEUILLE_1024 = 12000
  6. const LARGEUR_FEUILLE_1024 = 8000
  7. ' ce sont des chiffres au hazard correspondant à la hauteur et largeur d'une feuille pleine écran en une résolution de 1024x768 (je ne les ai pas en tête)
  8. 'API_RESOL est l'api qui détecte la résolution courante
  9. if API_RESOL <> 1024 then
  10. 'le 1024 dépend des constantes. On peu mettre 800, si les valeurs des constantes sont celle d'une résolution de 800
  11. a = screen.height
  12. b = screen.width
  13. c = a / HAUTEUR_FEUILLE_1024
  14. d = b / LARGEUR_FEUILLE_1024
  15. command1.height = command1.height * c
  16. command1.width = command1.width * d
  17. command1.top = command1.top * c
  18. command1.left = command1.wodth * d
  19. end if


 
Voilà en gros le code, il suffit de l'adapter un peu, et de placer les calcul dans des fonctions...
 
nb : je l'ai fait de tête donc, il se peut qu'il contiennent des erreurs...autrement allez voir sur www.vbfrance.com, il doit s'y trouver...


Message édité par macray le 10-07-2002 à 13:56:41

---------------
;) Bienvenue sur le site...:)             http://perso.wanadoo.fr/rapport
Reply

Marsh Posté le 10-07-2002 à 14:04:49    

Toomslegrand a écrit a écrit :

J'ai une feuile principale a partir de laquelle je fait toutes mes selections et une autre page sur laquelle j'aimerais mettr u tableu dans lequel les options de la 1° page piocheraient les valeurs. Seulement rien n'apprait sur la 2° page quand je lance le programme. dites moi si les lignes de code sont coreects
 
 
Private Sub Form_Load()
 
For x = 0 To 20
Cuve7.CurrentX = 840
Cuve7.CurrentY = 240 + 240 * x
Cuve7.Print x
Next x
 
End Sub
 
 
 
 
Merci d'avance
 




 
 
Ca ne s'affiche pas car la propriété AutoRedraw de ta Form est à False. Met à True, et ca devrait être bon.

Reply

Marsh Posté le 14-07-2002 à 05:58:12    

Toomslegrand
Si je ne m'abuses, tu affectes:
-21 fois la même valeur à Cuve7.CurrentX
-21 fois des valeurs différentes à Cuve7.CurrentY, seule la dernière restant.
Est-ce là le but recherché ?
 
macray
J'ai pas compris le but de ton code.
Avoir une taille fixe par rapport à l'écran ?


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 14-07-2002 à 08:29:22    

[citation][nom]musaran a écrit[/nom]Toomslegrand
Il est simple ! essaye de faire une application pleine écran, avec des objets en 1024x768, tu passe ton écran ensuite en 640x480, et tu regarde...! tu veras, que tes objet sont restés à la même taille, ainsi que les dimensions de ta feuille...Ca fait l'effet d'un écran trop petit !!!
 
Ce n'est pas ce que tu veux ? le seul moyen d'y remédier c'est de faire le code que  j'ai mis, à savoir un code, pour redimenssionner automatiquement tous les objets, et avoir une application qui rentre en l'occurence sous 640x480...!! c'est valable pour toutes les résolutions d'écrans...
 
 


Message édité par macray le 14-07-2002 à 12:06:17

---------------
;) Bienvenue sur le site...:)             http://perso.wanadoo.fr/rapport
Reply

Marsh Posté le 16-07-2002 à 01:59:20    

Je croyais qu'on pouvait faire plus simple avec ScaleMode=0, ScaleWidth et ScaleHeight.
Mais non, les contrôles ne se déplacent pas, contrairement à ce que la doc laisse croire.
Personellement, j'écrirais ça:


Dim OldWidth As Single
Dim OldHeight As Single
 
Private Sub Form_Load()
   'Initialiser les "anciennes" valeurs (indispensable).
   OldWidth = Width
   OldHeight = Height
End Sub
 
Private Sub Form_Resize()
   Dim RatioX As Single, RatioY As Single
   'Calculer les rapports de redimensionnement horizontaux/verticaux.
   RatioX = Width / OldWidth
   RatioY = Height / OldHeight
   'sauvegarder les dimensions pour le prochain Resize.
   OldWidth = Width
   OldHeight = Height
   
   'Il faut faire de même avec toute dimension/position devant varier avec la Form
   cmd.Left = cmd.Left * RatioX
   cmd.Top = cmd.Top * RatioY
   cmd.Width = cmd.Width * RatioX
   cmd.Height = cmd.Height * RatioY
   
   'Forme recommandée en une commande
   cmd.Move cmd.Left * RatioX, cmd.Top * RatioY, cmd.Width * RatioX, cmd.Height * RatioY
End Sub


 
Toomslegrand
J'ai dit une bêtise parceque j'avais pas pigé.
 
Les commandes de dessin devraient être placées dans "Form_Paint", parceque les dessins n'étant pas des objets, ils ne sont pas automatiquement redessinés.
S'ils sont dessinés avant que la Form ne soit visible, c'est un coup pour rien...


Private Sub Form_Paint()
   Me.CurrentX = Me.ScaleWidth / 2 'milieu de fenêtre
   Dim x As Integer
   For x = 0 To 20
      Me.CurrentY = Me.ScaleHeight / 22 * x 'répartir sur toute la hauteur
      Me.Print x
   Next x
End Sub

Cela dit, Print avance CurrentY automatiquement pour le Print suivante.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed