cs_Billou
Messages postés34Date d'inscriptionsamedi 9 février 2002StatutMembreDernière intervention27 août 2007
-
11 janv. 2007 à 23:34
ThWilliam
Messages postés418Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention26 novembre 2013
-
12 janv. 2007 à 18:28
Bonjour,
Je veux faire un petit algorithme me permettant de déplacer le curseur de la souris sur un pixel ayant une certaine couleur. Voila mon algo :
procedure TForm1.Button1Click(Sender: TObject);
var i, j,z : Integer;
canvasB : TCanvas;
begin
canvasB = TCanvas.create;
For i := 1 To 1920 Do
For j := 1 to 1200 Do
Begin
z := CanvasB.Pixels[i,j];
If z <> 1 Then
Continue
else
SetCursorPos(i,j);
End;
canvasB.free
End;
Cela commence sérieusement a m'irriter car ca ne marche pas. Une erreur survient lors de l'exécution : "le canevas ne permet pas de dessiner".
Je ne comprend pas pourquoi cette erreur. Si je j'affiche z : aucun problème.
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 12 janv. 2007 à 17:24
Salut,
Tu as pas vraiment besoin de travailler sur un TCanvas je pense.
Pour placer la souris sur le pixel, il faut que tu commence par avoir une image affichée.
Ensuite, tu travails sur la TBitmap du composant contenant celle-ci. Y
a une routine très sympa qui pemet de récupérer les couleurs par lignes
de pixel, dont j'ai plus le nom.
Les coordonnées que tu en déduiras seront différentes de celle de
l'écran que tu utiliseras avec SetCursorPos. Donc tu devras trouver un
moyen de faire le calcul.
C'est certainement possible au moins via l'API Win32 GetClientRect
ThWilliam
Messages postés418Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention26 novembre 20134 12 janv. 2007 à 18:28
correction : préférable de ne pas appeler la variable 'handle' dans une procedure de TForm (handle est une propriété de TWinControl dont dérive TForm).
Donc
var
CanvHandle: HWND;
...
CanvasB.Handle:= GetDeviceContext(CanvHandle);