![]() |
Problem mit function und canvas
hey leute.
Ich verzweifel. Ich hab hier diese function gemacht:
Delphi-Quellcode:
Soweit alles ok. Hab das auch mit nem anderen programm schon getestet, funktioniert super.
function TForm1.LogCheck(): Boolean;
var DCanvas: TCanvas; DHandle: HDC; begin DHandle:=GetDC(0); if DHandle<>0 then begin try DCanvas:=TCanvas.Create; try DCanvas.Handle:=DHandle; if DCanvas.Pixels[487, 481] = RGB(255, 255, 255) then begin Result := true; end else Result := false; finally DCanvas.Free; end; finally if ReleaseDc(0, DHandle)<>1 then RaiseLastOSError; end; end else RaiseLastOSError; end; So doch das will ich in eine repeat-schleife einbauen das wäre dann so:
Delphi-Quellcode:
Doch auch wenn das Result von LogCheck true ist hoert er einfach nicht auf. Woran könnte das liegen?
procedure TForm1.Schleife();
begin repeat if LogCheck() = true then Exit; ... ... until ... end; |
Re: Problem mit function und canvas
Man soll ja nicht auf
Delphi-Quellcode:
prüfen sondern
if Bool = True then
Delphi-Quellcode:
.
if Bool then
Versuch es mal so. |
Re: Problem mit function und canvas
Und wenn Du Exit mal durch break ersetzt? Übrigens nie auf true prüfen, das kann danebenegehen.
|
Re: Problem mit function und canvas
Delphi-Quellcode:
Im obigen Code is result nicht definiert wenn DHandle = 0 ist
function TForm1.LogCheck(): Boolean;
var DCanvas: TCanvas; DHandle: HDC; begin DHandle:=GetDC(0); if DHandle<>0 then begin try DCanvas:=TCanvas.Create; try DCanvas.Handle:=DHandle; result := DCanvas.Pixels[487, 481] = RGB(255, 255, 255) finally DCanvas.Free; end; finally if ReleaseDc(0, DHandle)<>1 then RaiseLastOSError; end; end else RaiseLastOSError; end; und wenn DCanvas.Create fehlgeschlagen ist.
Delphi-Quellcode:
Hier ist noch dazu zu sagen das man niemals auf = true prüfen sollte.
procedure TForm1.Schleife();
begin repeat if LogCheck then Exit; until // Bedingung fehlt end; LogChecl liefert doch schon ein Boolean zurück. Grüße Klaus |
Re: Problem mit function und canvas
Also 1.
Einen Canvas (TCanvas) zu erstellen und nach ein paar Millesec. wieder zu zerstören halte ich für keine gute Idee. Das geht einfacher und effektiver.
Delphi-Quellcode:
( Code ist nicht von mir getestet, also selber nachgucken. )
function TForm1.LogCheck(): Boolean;
var hDeskDC: HDC; hDeskWnd: HWND; begin Result := FALSE; hDeskWnd := GetDesktopWindow; hDeskDC := GetDC(hDeskWnd); if hDeskDC <> 0 then begin if Windows.GetPixel(hDeskDC, 487, 481) = RGB(255, 255, 255) then Result := TRUE else Result := FALSE; end; ReleaseDC(hDeskWnd, hDeskDC); end; 2.) Schlägt eine IF-Abfrage ( if DHandle<>0 then ) fehl weil etwas nicht stimmt hat deine Function keinen vordef. Rückgabewert. Die Whileschleife kann sich u.U. einen Wolf laufen. ;) // Edit: Vergiss in deiner While-Schleife nicht Application.ProcessMessages einzubauen, sonst hängt dein Programm weil dieMessages nicht weiterverarbeitet werden. |
Re: Problem mit function und canvas
Wenn schon mit 'ner repeat-Schleife, dann würd' ich das so machen:
Delphi-Quellcode:
procedure TForm1.Schleife();
var IstOkay: Boolean; begin //--sicherheitshalber IstOkay := false; repeat IstOkay := LogCheck(); until IstOkay; end; |
Re: Problem mit function und canvas
Noch besser wäre allerdings IMHO eine Kopfschleife.
Delphi-Quellcode:
while not LogCheck do...
|
Re: Problem mit function und canvas
Also wegen der function von mir, ich hab die mit einem timer getestet, wenn es da und do diese farbe hat geht das label auf 'Pass' sonst auf 'Passt nicht', ging super.
Ich hab jetzt die sachen von hier getestet aus der mit dem "until Bool" ding weil ich bei until das drinne hab: 'Odd(GetAsyncKeyState(VK_f10))'. Aber ich blick das nicht warum der nicht einfach aushört :? |
Re: Problem mit function und canvas
Also, ich würde da keinen Timer nehmen, der ist ggf. zu langsam. Ein Thread ist da besser.
Wenn dein Quelltext nicht so recht funktion. könnenwir nur helfen wenn du ihn herzeigst. ;) Wenn du willst häng ihn mal als Zip an einen Beitrag an. |
Re: Problem mit function und canvas
Zitat:
Weil wenn ich folgendes lese: Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz