AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit function und canvas

Ein Thema von k4ni · begonnen am 14. Jan 2008 · letzter Beitrag vom 14. Jan 2008
Antwort Antwort
Seite 1 von 2  1 2      
k4ni

Registriert seit: 17. Jul 2007
Ort: Ulm
258 Beiträge
 
Delphi 7 Enterprise
 
#1

Problem mit function und canvas

  Alt 14. Jan 2008, 11:07
hey leute.

Ich verzweifel.
Ich hab hier diese function gemacht:

Delphi-Quellcode:
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;
Soweit alles ok. Hab das auch mit nem anderen programm schon getestet, funktioniert super.
So doch das will ich in eine repeat-schleife einbauen das wäre dann so:

Delphi-Quellcode:
procedure TForm1.Schleife();
begin
repeat
if LogCheck() = true then
Exit;

...
...
until
...
end;
Doch auch wenn das Result von LogCheck true ist hoert er einfach nicht auf. Woran könnte das liegen?
  Mit Zitat antworten Zitat
Benutzerbild von Aurelius
Aurelius

Registriert seit: 29. Jan 2007
Ort: Erfurt
753 Beiträge
 
Delphi 7 Personal
 
#2

Re: Problem mit function und canvas

  Alt 14. Jan 2008, 11:18
Man soll ja nicht auf
if Bool = True then prüfen sondern if Bool then .

Versuch es mal so.
Jonas
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.622 Beiträge
 
Delphi 12 Athens
 
#3

Re: Problem mit function und canvas

  Alt 14. Jan 2008, 11:19
Und wenn Du Exit mal durch break ersetzt? Übrigens nie auf true prüfen, das kann danebenegehen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Problem mit function und canvas

  Alt 14. Jan 2008, 11:24
Delphi-Quellcode:
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;
Im obigen Code is result nicht definiert wenn DHandle = 0 ist
und wenn DCanvas.Create fehlgeschlagen ist.
Delphi-Quellcode:
procedure TForm1.Schleife();
begin
  repeat
    if LogCheck then
      Exit;

  until // Bedingung fehlt
 
end;
Hier ist noch dazu zu sagen das man niemals auf = true prüfen sollte.
LogChecl liefert doch schon ein Boolean zurück.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#5

Re: Problem mit function und canvas

  Alt 14. Jan 2008, 11:28
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:
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;
( Code ist nicht von mir getestet, also selber nachgucken. )

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.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
raiguen
(Gast)

n/a Beiträge
 
#6

Re: Problem mit function und canvas

  Alt 14. Jan 2008, 11:58
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;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.622 Beiträge
 
Delphi 12 Athens
 
#7

Re: Problem mit function und canvas

  Alt 14. Jan 2008, 12:07
Noch besser wäre allerdings IMHO eine Kopfschleife.while not LogCheck do...
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
k4ni

Registriert seit: 17. Jul 2007
Ort: Ulm
258 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Problem mit function und canvas

  Alt 14. Jan 2008, 14:11
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
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#9

Re: Problem mit function und canvas

  Alt 14. Jan 2008, 14:19
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.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#10

Re: Problem mit function und canvas

  Alt 14. Jan 2008, 14:23
Zitat von k4ni:
Aber ich blick das nicht warum der nicht einfach aushört
Wie kommst du zu diesem Schluß, dass er nicht aufhört? Also wie kommst du darauf, dass das der Fehler ist?

Weil wenn ich folgendes lese:

Zitat von k4ni:
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.
Habe ich die Vermutung, dass du es nun immernoch so machst, aber er keine Zeit hat das Label zu malen in der Schleife. Kann es sein?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz