Zone cliquable

cs_cyber37 Messages postés 110 Date d'inscription mardi 25 octobre 2005 Statut Membre Dernière intervention 19 novembre 2010 - 9 mars 2007 à 17:09
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 - 12 mars 2007 à 23:16
bonjours avant de poster j'ai fait une recherche et voici ma question :

est'il possible de faire une zone cliquable enfin dans une partie de la form un endroi ou on peut cliquer enfin comme un bouton invisible ?

j'ai essailler avec la propriete visible d'un bouton mais si il est invisible meme en liquand sa ne fait rien

6 réponses

cs_cyber37 Messages postés 110 Date d'inscription mardi 25 octobre 2005 Statut Membre Dernière intervention 19 novembre 2010
9 mars 2007 à 17:12
ha c'est bon ne repondez pas j'ai trouver la reponse a ma question :

il suffit de metre un Timage mais sans image et dan sla propriete on click metre se que l'on veut que sa fasse
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
9 mars 2007 à 17:34
Salut,

Il y avait plus direct mais surtout moins lourd qu'un TImage pour récupérer un click ...

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
Var aRect : TRect ;
begin
  aRect := Rect(0, 0, 100, 100); // la zone de click en haut à gauche
// uniquement si click bouton gauche et dans la Zone
  If (Button = mbLeft) and (PtInRect(aRect, Point(x,y))) Then
    ShowMessage('C''est dedans');
end;

 
@+
Cirec

0
DRJEROME Messages postés 436 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 5 février 2015
10 mars 2007 à 08:46
Salut

il y a aussi PtInRegion

DrJerome
0
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
12 mars 2007 à 16:59
Merci cirec pour PtinRect , je l'avais oublié celui-la ;)
Que ca simplifie les choses qd meme ...

Par contre DrJerome pour PtInRegion
il existe bien ms il n y a pas d'explication dans l aide ... y a t il une grosse difference ?

Ciao
0

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
12 mars 2007 à 21:44
  Petite démo sur l'utilisation de PtInRegion

  PtInRegion permet une préscision suppérieur pour (par Ex) vérifier une zone de clique

  Si tu ne cliques pas sur un des six petits triangles rouge le clique n'est pas reconnu

  Avec peut de code on peut avoir un controle sur une région complexe

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class (TForm)
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormPaint(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;
  {Déclaration d'une variable globale de type Handle region}
  HRGN1 : HRGN;
implementation

{$R *.dfm}

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  {On libère le handle avant de quitter}
  DeleteObject(HRGN1);
end;

procedure TForm1.FormCreate(Sender: TObject);
{Définitions des points des deux triangles}
Const PointArray1 : Array[0..2] Of TPoint = ((x:0; y:25), (x:100; y:25), (x:50; y:100));
      PointArray2 : Array[0..2] Of TPoint = ((x:50; y:0), (x:0; y:75), (x:100; y:75));
Var  HRGN2, HRGN3 : HRGN;
begin
  {Il faut toujours initialiser un Handle région avec un créate...}
  HRGN1 : = CreateRectRgn(0, 0, 100, 100);
  {On crée les deux triangles}
  HRGN2 := CreatePolygonRgn(PointArray1, 3, ALTERNATE);
  HRGN3 := CreatePolygonRgn(PointArray2, 3, ALTERNATE);
  {On les combines dans HRGN1}
  CombineRgn(HRGN1, HRGN2, HRGN3, RGN_XOR);
  {ET on libère ceux qui sont inutiles}
  DeleteObject(HRGN2);
  DeleteObject(HRGN3);
end ;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  {Ici le controle avec PtInRegion}
  If (Button = mbLeft) and (PtInRegion(HRGN1, x, y)) Then
    ShowMessage('C''est dedans');
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
  {On l'affiche sur la fiche}
  Canvas.Brush.Color := clRed;
  FillRgn(Canvas.Handle, HRGN1, Canvas.Brush.Handle);
end ;

end.

 
@+
Cirec

<hr size ="2" />
0
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
12 mars 2007 à 23:16
RE - merci cirec pour cette demo
 je ne m'y etais jamais encore trop interesser ... Mais je comprends maintenant deja un peu plus l'utilité de tous ca !

Ciao
0
Rejoignez-nous