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