Coordonnées d'un TControl créé dynamiquement

Résolu
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 - 4 juin 2007 à 18:27
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 - 13 juin 2007 à 16:15
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

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

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

A +
3
sp40 Messages postés 1284 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
6 juin 2007 à 14:22
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
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
12 juin 2007 à 19:19
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" />
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
13 juin 2007 à 12:58
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" />
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
13 juin 2007 à 16:05
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" />
3
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
4 juin 2007 à 21:42
:)))
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...  ;)
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
6 juin 2007 à 17:16
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.
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
12 juin 2007 à 19:45
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.  
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
13 juin 2007 à 13:32
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 
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
13 juin 2007 à 16:15
Ah bein voilà!..
On peut r'tirer l'échelle, maintenant.
Y'a plus qu'à attendre que ça sèche...
0
Rejoignez-nous