Quel control à tel emplacement ?

Résolu
Awaking Messages postés 18 Date d'inscription jeudi 19 août 2004 Statut Membre Dernière intervention 23 mai 2005 - 11 sept. 2004 à 14:14
Nerolph Messages postés 58 Date d'inscription vendredi 24 octobre 2003 Statut Membre Dernière intervention 4 septembre 2012 - 13 sept. 2004 à 18:13
Voilà, je me demandais s'il était possible de savoir quel controle se trouve à un emplacement (Height et Widht) sur une form. Par exemple savoir qu'est ce qu'il y a comme contrôle à 100 Widht et 150 height de la form1 (si c'est un Edit ou une image ou autre).

7 réponses

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
11 sept. 2004 à 19:50
Avec la réponse précédente, cela suppose que la souris passe exactement sur le bord d'un contrôle.

Voici une proposition basée sur l'utilisation d'un TTimer.
procedure TForm1.Timer1Timer(Sender: TObject);
var
  Ctrl: TControl;
begin
  Ctrl := FindVCLWindow(Mouse.CursorPos);
  if Ctrl <> nil then
    Caption := Ctrl.Name;
end;


Pour connaitre le controle à un emplacement donné, alors il suffit d'utiliser la même fonction FindVCLWindow et lui passant les coordonnées de la façon suivante :
procedure TForm1.Button3Click(Sender: TObject);
var
  Ctrl: TControl;
begin
  Ctrl := FindVCLWindow(ClientToScreen(Point(100, 50)));
  if Ctrl <> nil then
    Caption := Ctrl.Name;
end;


Attention à bien utiliser la fonction ClientToScreen pour convertir les coordonnées transmises en position écran.
May Delphi be with you
3
ZeWaren Messages postés 24 Date d'inscription vendredi 11 juin 2004 Statut Membre Dernière intervention 22 février 2005
11 sept. 2004 à 17:32
Tu peux utiliser un truc du style :
for i := 0 to form1.controlcount - 1 do
if (form1.controls[i].left = 100) and (form1.controls[i].top = 150)
then Showmessage(Form1.controls[i].name);
0
Awaking Messages postés 18 Date d'inscription jeudi 19 août 2004 Statut Membre Dernière intervention 23 mai 2005
11 sept. 2004 à 20:38
yeah merci les gars ca fonctionne mais j'ai une autre question...
comment on fait pour sortit d'une procédure if comme la fonction Exit Sub de vb

du genre...

procedure TForm1.Button1Click(Sender: TObject);
begin
if blablabla = xxx then
begin
*comment sortir de cette procedure ? (Exit Sub de vb)*
end;
autres instruction
....
....
end;
0
ZeWaren Messages postés 24 Date d'inscription vendredi 11 juin 2004 Statut Membre Dernière intervention 22 février 2005
11 sept. 2004 à 21:07
Pourquoi ne pas simplement utiliser la procedure Exit ?
0

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

Posez votre question
Awaking Messages postés 18 Date d'inscription jeudi 19 août 2004 Statut Membre Dernière intervention 23 mai 2005
11 sept. 2004 à 21:20
ah oué tiens^^
0
Nerolph Messages postés 58 Date d'inscription vendredi 24 octobre 2003 Statut Membre Dernière intervention 4 septembre 2012
13 sept. 2004 à 18:08
Mais ç'a n'est pas de la bonne programmation. Le mieux suivant ton exemple c'est :
procedure TForm1.Button1Click(Sender: TObject);
begin
if not (blablabla = xxx) then begin
{autres instructions}
...
...
end; //if
end; 

Voilà. C'est compréhensible ?
En fait, il vaut mieux éviter au maximum d'utiliser la procédure Exit car qui dit excécution de procédure/fonction dit perte de temps. Bon je sais les machines de maintenant sont relativement repides, mais c'est pas une raison pour faire des programmes illisible !!
0
Nerolph Messages postés 58 Date d'inscription vendredi 24 octobre 2003 Statut Membre Dernière intervention 4 septembre 2012
13 sept. 2004 à 18:13
Evidemment, l'histoire des programmes illisibles c'était ironique. Ce que je veux dire c'est qu'il faut penser aux lecteurs de ces codes, quels qu'ils soient : plus un programme est lisible, mieux il pourra être débogué. Mais bon, ce se sont que des conseils de pro.
0
Rejoignez-nous