Dem Ereignis "CheckBox_Futterbild.OnClick" ist derzeit die Methode "FormCreate()" zugewiesen.
Es sollte aber besser die Methode "FutterBild()" sein.
Ich hab mich bemüht nicht zu viel zu ändern:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
{Apfel erzeugen, unsichtbar}
Apple:=TImage.Create(Form1);
Apple.Visible := False;
Application.HintHidePause:=4000;
{...}
end;
procedure TForm1.FutterBild(Sender: TObject);
begin
{Checkbox wurde an oder ausgeschalten}
if CheckBox_Futterbild.Checked then
begin
if OpenDialog.Execute then
begin
Apple.Picture.LoadFromFile(OpenDialog.FileName);
if Assigned(Apple.Picture.Graphic) then
Apple.Picture.Graphic.Transparent := True;
end;
CheckBox_Futterbild.Checked := Assigned(Apple.Picture.Graphic);
end;
{neu Zeichnen}
paint_map;
end;
{Das Zeichnen auf mehrere Methoden verteilt}
function TForm1.GetItemColor(AItem: Integer): TColor;
begin
case AItem of
-2: Result := ColorDialog_Wand.Color;
-1: Result := ColorDialog_Futter.Color;
0: Result := ColorDialog_HG.Color;
else Result := ColorDialog_Schlange.Color;
end;
end;
procedure TForm1.paint_background(ARect: TRect);
begin
{Hintergrund zeichnen}
Spielfeld.Canvas.Brush.Color := ColorDialog_HG.Color;
Spielfeld.Canvas.FillRect(ARect);
end;
procedure TForm1.paint_field(AItem: Integer; ARect: TRect);
begin
{Bild des Futters zeichnen}
if CheckBox_Futterbild.Checked and (AItem = -1) then
begin
paint_background(ARect);
Spielfeld.Canvas.StretchDraw(ARect, Apple.Picture.Graphic);
end
else if RadioButton_Kreise.Checked then
begin
paint_background(ARect);
if AItem <> 0 then
begin
Spielfeld.Canvas.Brush.Color := GetItemColor(AItem);
Spielfeld.Canvas.Ellipse(ARect);
end;
end
else
begin
Spielfeld.Canvas.Brush.Color := GetItemColor(AItem);
Spielfeld.Canvas.FillRect(ARect);
end;
end;
procedure TForm1.paint_map;
var
x, y: Integer;
begin
for y := 0 to breite do
for x := 0 to hoehe do
paint_field(map[x, y], Rect(x*raster, y*raster, (x+1)*raster, (y+1)*raster));
end;