Miten pystyn siirtämään kursorin johonki kohtaan värin kautta? Esimerkiksi jos haluaisin ohjelman etsivän värin 4610(musta) ja siirtävän kursorin sen mustan kohdalle ja klikkaavan sitä? GetPixeliä tässä varmaan tarvitaan mutta miten sitä käytetään? Olen yrittänyt väsätä jotain tällaista:
procedure TForm1.Button1Click(Sender: TObject);
var dc:hdc;
TPoint : integer;
begin
TPoint:=GetPixel(dc,600,500);
Mouse.CursorPos:=TPoint;
end;
end.
Toivottavasti älyätte jotain näistä mun selityksistä :D
Jospa ensiksi lukisit vaikka jonkin Delphi-oppaan, putkan Pascal-opas on hyvä alku.
Sitten koodiisi:
TPoint:=GetPixel(dc,600,500);
GetPixel ei palauta värin sijaintia vaan värin cardinalina (32-bittinen etumerkitön kokonaisluku). Kääntäjä ei tästä herjaa koska olet määrittänyt TPoint muutujasi integer (32-bittinen etumerkillinen kokonaisluku) tyypiksi. Osavärit saa selville GetRValue,GetGValue,GetBValue funktioilla (Katso Delphin ohjeista lisää).
Mouse.CursorPos:=TPoint;
Mouse.CursorPos on TPoint tyyppi eikä siihen voi sijoittaa integeriä. Katso esimerkkiä käytöstä.
GetPixel esimerkki
var DC: HDC; color: Cardinal; r,g,b: Byte; begin DC := GetDC(0); //Otetaan koko näytön (HWND=0) DC (Device Context) color := GetPixel(DC,100,100); //Tutkitaan pixeliä kohdassa (100,100) r := GetRValue(color); //Punainen väri g := GetGValue(color); //Vihreä väri b := GetBValue(color); //Sininen väri ReleaseDC(0,DC); //Vapautetaan DC käytön jälkeen end;
Mouse.CursorPos esimerkki
var NewPos: TPoint; begin NewPos.X := 100; //Asetetaan uuden sijainnin koordinaatit NewPos.Y := 100; Mouse.CursorPos := NewPos; //Siirretään kursori end;
Tietynvärisen pixelin etsiminen on sitten jo isompi juttu. Esimerkiksi voisit käydä jokaisen näytön pixelin silmukassa läpi ja verrata niitä haluttuun väriin.
Ennenkuin ryhdyt tähän kannattaa opetella Delphin (Object Pascal) alkeet. Myös Delphin ohjeissa on paljon apua, ne sisältävät muun muassa Microsoftin Win32 SDK ohjetiedostot josta löytyy suurin osa WinAPI funktioista jaa niiden käytöstä, myös kaikki Delphin omat funktiot ja luokat ovat hyvin dokumentoituja. Nämä saa kätevästi esiin valitsemalla funktion tai luokan nimen koodista ja painamalla F1.
Kiitos :). Mutta tiedätkö minkälainen commandi on siihen hiiren painallukseen?
Hiiren painallus onnistuu soveltamalla tuota: http://pp.kpnet.fi/blaze/codefaq/#simulatemouse
Se on VB:tä mutta helposti siitä saa pascaliakin. Niistä Private Declare/Const riveistä ei tarvitse välittää, delphissä nämä löytyvät Windows unitista.
TPoint ei ole hyvä muuttujan nimeksi, koska se on tyyppi (record, jossa on kaksi LongInt-jäsentä).
"värin 4610(musta)"
Jaa? Se ei tietääkseni mikään musta ole. Heksana tuo on $001202, eli aavistuksen vihertävä. Musta on käytännöllisesti katsoen aina nolla.
Zacura, miten toi mouse_event sitte toimii tässä Delphissä?
Yritäpä itse. Aivan samalla tavalla kuin tuossa esimerkissäkin. Vilkeise myös ohjeita (Win32 API). Ja haullakin saattaa löytyä esimerkki.
Joo..Sepä olikin noin helppoa :) Kiitos pojat^^ Rupesin aluksi vain kopioimaan tuota koodinpätkää tuolta sivulta :D
Eikö Delphillä ole mitään tämäntapaista lausetta kuin : FindColor(tähän väri) ? Kun tuolla GetPixelillä ei voi etsiä niitä värejä :O..
Ei tiettävästi. Joudut looppaamaan läpi.
Voihan..Siis näinkö:
Color:=GetPixel(dc,1,1) and GetPixel(dc,1,2) and GetPixel(dc,1,3)......?
ja sitten jos haluan sen värin niin:
if Color=(väri) then MouseCursorPos(...?
function Etsi(Etsittava: TColor; DC: HDC; Width, Height: Integer): TPoint;
var
X, Y: Integer;
label
Ulos;
begin
Result.X := -1;
Result.Y := -1;
for X := 0 to Width - 1 do
for Y := 0 to Height - 1 do
if GetPixel(DC, X, Y) = Etsittava then
begin
Result.X := X;
Result.Y := Y;
goto Ulos;
end;
Ulos:
end;Pascal-oppaan lukeminen voisi auttaa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.