Einzelnen Beitrag anzeigen

compix

Registriert seit: 13. Feb 2011
14 Beiträge
 
#1

Temporäres Einfrieren beim Zeichnen einer BitMap

  Alt 15. Jun 2012, 00:18
Delphi-Version: 7
Hallo ,
ich habe ein kleines Test-Programm geschrieben, um mit Bitmaps zu experimentieren:
Delphi-Quellcode:
var
  Form1: TForm1;
  BG: TBitMap;

  SCREEN: TBitMap;
  ABBRECHEN: boolean;
implementation

{$R *.dfm}

procedure TForm1.FormDestroy(Sender: TObject);
begin
  BG.Free;
  SCREEN.Free;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  SCREEN := TBitMap.Create;
  SCREEN.Width := 1600;
  SCREEN.Height := 1200;

  BG := TBitMap.Create;
  BG.LoadFromFile('background.bmp'); //5,5 MB großes Bild(1600x1200) wird geladen

  SCREEN.Canvas.Draw(0,0,BG);
  ABBRECHEN := false;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  while (not ABBRECHEN) do
  begin
    Canvas.Draw(0,0,SCREEN);

    application.ProcessMessages;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  ABBRECHEN := true;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  ABBRECHEN := true;
end;
Wie man unschwer erkennen kann wird lediglich ein Hintergrundbild in einer While-Schleife wiederholt auf die Canvas der Form1 gezeichnet.
Wenn ich das Programm allerdings ausführe und mit einem Button-Klick die Schleife betrete, wechselt mein Computer ständig vom eingefrorenen Zustand zum "Normal"-Zustand. Der Mauszeiger bleibt also kurz unbeweglich, wird wieder beweglich -> unbeweglich ad infinitum.
Ersetze ich nun Canvas.Draw(0,0,SCREEN) mit Canvas.Draw(0,0,BG) ist alles in Ordnung, auch das Hinzufügen eines "sleep(1)" behebt dieses Problem.
Scheinbar liegt es an:
Delphi-Quellcode:
  SCREEN.Width := 1600;
  SCREEN.Height := 1200;
Aber wieso ?
Ich Hoffe ihr könnt mir diese Frage beantworten,
MfG, compix
  Mit Zitat antworten Zitat