{------------------------------------------------------------------------------}
{Donne les numéros de colonne et de ligne de coordonnées cartésienne d'une
Matrice graphique, Bitmap ou quadrillage d'une image découpées en cases d'une
dimension définie.
Entrées : X = coordonnée X du clic dans la zone graphique
Y = coordonnée Y du clic dans la zone graphique
L = Largeur de la matrice en pixels
H = hauteur de la matrice
Lc = largeur d'une case
Hc = hauteur d'une case
Ofx = offset X (sur la largeur)
Ofy = offset y (sur la hauteur)
Sortie : Lig = Identification de la Ligne du clic
Col = Identification de la ligne du Clic
Remarque : les coordonnées (0,0) sont en Haut à gauche
les numéros de ligne et colonne sont dans le même repère
{------------------------------------------------------------------------------}
Procedure ClicToZoneIdent(X,Y,L,H,Lc,Hc,Ofx,Ofy : Integer; Var xCol,yLig : Integer);
Begin
yLig := (H - Ofy + Y) div Hc;
xCol := (L - Ofx + X) div Lc;
end;
Exemple d'utilisation : Identifier une case sur un plateau d'échecs
{-- Gestion des clic sur le plateau -------------------------------------------------------------
Image1 est de type TImage et comprend l'image de l'échiquier
Pas est un coté d'une case (carré). Les offset éliminent les épaisseur du bord en X et Y
--------------------------------------------------------------------------------------------------}
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
...
ClicToZoneIdent(X,Y,image1.Width,Image1.Height,Pas,Pas,BordX,BordY,xDep,yDep);
xDep := 16 - xDep; // => Chgt de repère : cartésien vers plateau échecs
yDep := 16 - yDep;
if (xDep <> 0) and (yDep <> 0) then stTCase.Caption := chr(73-xDep)+InttoStr(yDep)
else Windows.Beep(1000,400);
...
end;