Controls sur une form : changer leurs positions via une fonction, à un emplaceme [Résolu]

Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
- - Dernière réponse : Molenn
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
- 20 sept. 2006 à 09:41
Bonsoir bonsoir,

Je suis comment dire, à la ramasse sur un petit problème qui me turlupine et j'en appelle donc à votre grande sagesse/connaissance/gentillesse/attention (ne rayez rien surtout, il n'y a pas de mentions inutiles ).

Ce que j'essaye de faire :
J'ai crée une appli et je veux que cette appli se redessine en fonction d'une résolution choisie. J'ai trouvé cette source : http://www.vbfrance.com/codes/PLEIN-ECRAN-SIMPLEMENT_22570.aspx
Mais elle ne correspond pas à ce que je veux faire. En effet, cette source repositionne tous les objets en fonction de la résolution choisie, mais toujours dans la même disposition.
Ce que je fais, c'est par exemple qu'en 800x600, mon bouton cmd1 est en 100,100 et qu'en 1024x768, il est situé en 600,400 (ce n'est qu'un exemple. La position des objets bouge parc'en fonction de la résolution, mon image de fond est différente, et donc, je reposition les objets en fonction de cette image).

Mon idée était la suivante :
J'ai stocké dans une base de donnnées toutes les coordonnées left et top de mes objets, ainsi que le nom de l'objet : 1 table pour ma résolution 800x600, une table pour le 1024x768.
Je voulais donc crée une fonction qui défile chaque enregistrement de la table voulue et ainsi mettre à jour la position des objets.

Et là je coince, je n'arrive pas à définir la variable avec le nom de l'objet si vous voyez ce que je veux dire.
Voici comment je fais (oui, c'est en ADO ou DAO (je ne sais jamais, mais c'est pas le bon ^^)  mais chuuuut, j'arrive pas à m'en passer ) :

Private sub MàJRésolution(Feuille as String)

    'Définition des variables de la procédure
    Dim Base As Database
    Dim Table As Recordset
    Dim NomTable As String
    Dim NomObjet As Control
    Dim NomFeuille As Form
        
    'Ouverture de la base de données de configuration
    Set Base = DBEngine.Workspaces(0).OpenDatabase(NomBaseConfig)
   
    'Détermination du nom de la table
    NomTable =  "Résolution1024x768"    
   'Détermination du nom de la feuille
   NomFeuille = "frm_" & Feuille

    'Ouverture de la table
    Sql = "SELECT * FROM " & NomTable & " ORDER BY Num"
    Set Table = Base.OpenRecordset(Sql)
    Table.MoveFirst
    Do While Not Table.EOF
        NomObjet = Table("NomControl")
        NomFeuille!NomObjet.Left = Table("left")
        NomFeuille!NomObjet.Top = Table("top")
        Table.MoveNext
    Loop
    Table.Close

    'Fermeture de la base de données
    Base.Close
    Set Base = Nothing

End sub    

Je pense qu'avec ce bout de code, on voit bien ce que je tente de faire.
Quand je lance la procédure, j'ai une erreur d'exécution 91
"Variable objet ou variable bloc with non défini"
sur la ligne NomObjet = Table("NomControl")
J'ai bien imaginé 2 secondes que NomObjet.Name = Table("NomControl") m'aiderait, mais ça ne fonctionne pas.

Donc, si quelqu'un voulait bien m'éclairer de ces lumières, ça m'arrangerait bien
D'avance merci

Molenn
Afficher la suite 

1 réponse

Meilleure réponse
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
4
3
Merci
La nuit portant conseille, j'ai fini par résoudre mon problème en raisonnant un tout petit peu différemment.


Le nom de mon objet étant stocké dans ma base de données, je suis parti d'une boucle


For each Ctrl in Mafeuille.Controls


Next Ctrl


Et je récupère le nom en faisant un Ctrl.Name dans ma base.


Et je crée un recordset à chaque boucle en rajoutant dans ma requête SQL un WHERE NomControl = Ctrl.Name
Le reste se gère normalement sans soucis.

Pour mon problème de nom de feuille, j'ai résolu mon soucis en utilsant la collection de Forms.
C'est à dire que pour déterminer sur quelle feuille je modifie mes objets, je fais juste Forms(i).Ctrl où i est le numéro de la feuille, compris entre 0 et Forms.Count - 1




Merci à ceux qui auront lu et qui sont peut être même encore en train de chercher une réponse pour moi




Molenn

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 135 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Molenn