Controls sur une form : changer leurs positions via une fonction, à un emplaceme

Résolu
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 - 19 sept. 2006 à 23:35
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
A voir également:

1 réponse

Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
20 sept. 2006 à 09:41
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
3
Rejoignez-nous