[delphi] Zamulające pobieranie kursora

0

Napisałem sobie taką funkcje do czytania kursora:

//---------------------------------------------------------------------------
function TForm1.f_kursor():TBitmap;
var
MyCursor: TIcon;
i,j:integer;
begin
MyCursor := TIcon.Create;
MyCursor.Handle := GetCursor();

result := TBitmap.Create();
result.Height := 32;
result.Width := 32;

for i:=0 to result.Width-1 do
  for j:=0 to result.Height-1 do
    result.Canvas.Pixels[i,j] := clWhite;
result.Canvas.Draw(0, 0, MyCursor);
end;
//---------------------------------------------------------------------------
procedure TForm1.proceura2();
var
x,y:integer;                          
begin                                      
for x:=300 to 800 do
  for y:=100 to 600 do                                
    begin
    Form1.Caption := (IntToStr(x));
    f_kursor()
    end;
end;
//---------------------------------------------------------------------------

Ale ta funkcja strasznie zamula, aby wykonać pętle przedstawione w procedurze2 potrzeba dużo czasu, ta procedura ma być wykonywana w mgnienie oka(Oczywiście procedura2 jest okrojona).

Co należy zmienić, aby to zaczęło działać pożądanie.

0

możesz zamalowywać funkcją fillrect.

0

Zamiast pętli zamalowującej prostokąt (kwadrat) to narysuj prostokąt wypełniony (FillRect, reszta w helpie). Za każdym razem tworzysz w pętli klasę MyCursor a zwalniasz gdzie??? Ponadto po ch... tworzyć funkcję skoro nie pobierasz z niej wartości? Zobacz czy ten kod będzie szybszy.

procedure TForm1.f_kursor();
var
  MyCursor:TIcon;
  Bitmap  :TBitmap;
  x, y    :Word;
begin
  MyCursor := TIcon.Create;
  MyCursor.Handle := GetCursor();

  Bitmap := TBitmap.Create();

  with Bitmap do
    begin
      Height := 32;
      Width := 32;
      Canvas.Brush.Color := clWhite;
      for x := 300 to Screen.Width do
        for y := 100 to Screen.Height do
          begin
            Canvas.FillRect(Rect(0,0, Width, Height));
            Canvas.Draw(0, 0, MyCursor);
            Form1.Caption := IntToStr(x);
          end;
    end;

  MyCursor.Free();
  Bitmap.Free();
end;

Dopisane: Nav mnie wyorzedził, ale ja się wiecej bawiłem :)

0
//---------------------------------------------------------------------------
function TForm1.f_kursor():TBitmap;
var
MyCursor: TIcon;
begin
MyCursor := TIcon.Create;
MyCursor.Handle := GetCursor();

result := TBitmap.Create();
with result do
  begin
  Height := 32;
  Width := 32;

  Canvas.Brush.Color := clWhite;
  Canvas.FillRect(Rect(0,0, Width, Height));
  Canvas.Draw(0, 0, MyCursor);
  end;
MyCursor.Free();  
end;
//---------------------------------------------------------------------------
procedure TForm1.proceura2();
var
x,y:integer;                         
begin                                     
for x:=300 to 800 do
  for y:=100 to 600 do                               
    begin
    Form1.Caption := (IntToStr(x));
    f_kursor(); // OCZYWIŚCIE WIEM ŻE TO FUNKCJA
{ ALE TA PROCEDURA JEST OKROJONA I NADAL ZAMULA }
    end;
end;
//--------------------------------------------------------------------------- 

No to co teraz z tym zrobić, bo jak czyścić result i czy się da?

0

Mam prośbę napiszcie chociaż czy te źródło da się w jakiś sposób przyspieszyć, a jeśli jesteście na tyle dobrzy to podajcie metodę, a gdy jesteście bardzo dobrzy na innych to poprawcie to źródło.

Z góry dzięki

1 użytkowników online, w tym zalogowanych: 0, gości: 1