Coordonnées d'un TControl créé dynamiquement

Résolu
Signaler
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
-
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
-
Bonjour ('soir) les surdoués!




J'ai une flopée de TControls a créer pendant le runtime.

Bien sûr, je les aligne avec les propriétés .left et .top pour que ça fasse joli.

Jusque là, tout baigne...


Mais si par hasard ma fiche comporte une barre de défilement, les valeurs des coordonnés prises en compte sont comptées à partir des bords de la fenêtre visible à l'écran, et non pas à partir des bords de la fenêtre logique.

Ce qui fait que c'est le bordel dans le bel alignement prévu à la conception.


Ma question: existe t-il une méthode simple pour éviter ce phénomène? (pour éviter les calculs gonflants avec ScrollBar.Positions, etc...)



Merci d'avoir lu.

10 réponses

Messages postés
1727
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
6 novembre 2021
8
Et moi, tu me dis pas bonsoir, Cari ?

Ben si tu fais Valeur - HorzScrollBar.Position, c'est pas trop contraignant, si ?

A +
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
Salut,

En tout début de ton FormCreate, si tu initialise le HorzScrollBar.Position à 0, il semble que tu n'aies plus de problème


En espérant que ça t'aidera...

Simon
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
46
Salut,

après réflextion j'en arrive à ceci :

Var SCROLLINFO : TSCROLLINFO;
begin
  SCROLLINFO.cbSize := SizeOf(TSCROLLINFO);
  SCROLLINFO.fMask := SIF_ALL;
  GetScrollInfo(Handle, SB_VERT, SCROLLINFO);
  Memo1.Lines.Add(Format('La taille réelle de la page est de : %d pixels', [SCROLLINFO.nMax]));
end ;

ça devrait te convenir
 
@+
Cirec

<hr size ="2" />
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
46
Prêt pour la deuxième couche


Argh ....

mais comment tu fais pour ne pas que ça fonctionne

je viens de faire les testes de D4 à Turbo Delphi et sans changer une seule virgule au code
que je donne plus haut
et bien sur ça fonctionne

Sinon ScrollInfo.nMax  contient la taille en pixels de ClientHeight

et pour la mise en place de la fiche c'est très simple :
Faire nouvelle application y poser un TMemo et un TButton dans la partie haute de la fiche.
Et dans la partie basse de la fiche tu y déposes d'autres composants et tu réduit la taille de la fiche jusqu'à
ce que les composants du bas aient disparus, la ScrollBar apparait automatiquement ....
Pour finir tu mets le code que je te donne dans le OnClick du bouton ... et voilà ... enjoy it

je repasserai plus tard pour la troisième couche
 
@+
Cirec

<hr size="2" />
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
46
Trop tard ... comme tout était prêt ... je passe quand même la troisième couche

Petite précision :

Quand je dis :
"Sinon ScrollInfo.nMax  contient la taille en pixels de ClientHeight"
ce n'est pas la vrai définition
 ScrollInfo.nMax  contient la position maximale du scroll ... ce qui correspond à la taille réelle du controle

Pour plus de détails voir SCROLLINFO Structure sur la MSDN2

 
@+
Cirec

<hr size="2" />
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
18
:)))
Toi, t'es un surdoué-modeste. Humble, mais surdoué quand même. T'étais donc inclus dans le 'bonsoir', comme tous les autres membres d'ailleurs.

T'as raison, c'est pas le genre de contrainte qui mène au suicide collectif...
Mais je me demandais simplement s'il n'y avait pas un truc que j'avais zapper pour accéder aux coordonnées de la TForm logique. Ca m'a étonné de la part de Delphi.

C'était juste une question pour devenir moins con. C'est tout...  ;)
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
18
Salut Simon,
Mais le HorzScrollBar peut aussi apparaître à la suite d'un redimensionnement de la fiche par l'utilisateur...

Après quelques recherches, il semble bien que Delphi ne stocke nulle part les coordonnées par rapport à la fiche logique. Il ne s'occupe que de la fenêtre visible.
C'était la question que je me posais en fait...

Merci les gars.
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
18
Rââââââ!  'M'a encore tué le Cirec ! ! !

C'est pas léger, léger... Mais ça impressionne!  ;)

Seulement, je pige rien...
C'est quoi  SCROLLINFO.nMax ?

Ca me renvoie 1242708 quelque soit la taille de la fiche en conception...
et 0 quand il y a une ScrollBar...

'me sens tout enduit d'erreur, maintenant.  
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
18
Ah ouais...
J'ai pigé.
Merci Cirec.




Tu peux sortir le white-spirit pour nettoyer ton rouleau. Y'aura pas besoin de 3ème couche 
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
18
Ah bein voilà!..
On peut r'tirer l'échelle, maintenant.
Y'a plus qu'à attendre que ça sèche...