Registriert seit: 29. Jun 2004
36 Beiträge
Delphi 7 Professional
|
Image zeichnet nicht neu (nur bei Formular Resize)
27. Mär 2008, 17:39
Zur zeit programmiere ich an einem 4Gewinnt. Also nichts hochtrabend Neues.
Bisher auch noch ohne objects.
Aber schon beim Zeichnen treten die ersten Probleme auf.
Bei jedem klicken auf das Image1, welches das Spielfeld anzeigt, wird das interne Array richtig befüllt, aber auf meinem Image ist davon nichts zu sehen.
Wenn ich nun die Größe der Form verändere wird alles richtig gezeichnet.
Wo liegt hier also der Fehler?
(Refreshes brachten keinen Erfolg)
Delphi-Quellcode:
procedure tform1.feldzeichnen(f: tfeld;var img: timage);
const verhaeltnis= 7 / 6;
var kreisdurchmesser,i,ii,imgweite,imghoehe: integer;
r,b: trect;
zwischenspeicher: timage;
begin
zwischenspeicher:= timage.Create(self);
{
hier nur vorgeplänkel
idee: image wird angepasst an fenster. die spielsteinimages(img1,img2,imgunbesetzt) orientieren sich an der größe des hauptimages
danach werden per stretchdraw die spielsteine, wie gewünscht, auf das hauptimage kopiert
}
if (self.clientwidth / self.clientheight) > verhaeltnis //wenn fenster breiter ist
then
begin
kreisdurchmesser:= ((self.ClientHeight-2*img.Top) div 6);
end
else //wenn fenster höher ist
begin
kreisdurchmesser:= ((self.ClientWidth-2*img.Left) div 7);
end;
imgweite:= 7*kreisdurchmesser;
imghoehe:= 6*kreisdurchmesser;
img1.Height:= kreisdurchmesser;
img2.Height:= kreisdurchmesser;
imgunbesetzt.Height:= kreisdurchmesser;
img1.Width:= kreisdurchmesser;
img2.Width:= kreisdurchmesser;
imgunbesetzt.Width:= kreisdurchmesser;
zellezeichnen(img1,clspieler1,clfeldhintergrund,rect(0,0,img1.Width,img1.Height));
zellezeichnen(img2,clspieler2,clfeldhintergrund,rect(0,0,img2.Width,img2.Height));
zellezeichnen(imgunbesetzt,clunbesetzt,clfeldhintergrund,rect(0,0,imgunbesetzt.Width,imgunbesetzt.Height));
if (imghoehe<> img.Height)or(imgweite<> img.Width) //nur wenn wirklich eine neue größe vorhanden ist
then
begin
img.Picture:= nil;
img.Height:= imghoehe;
img.Width:= imgweite;
zwischenspeicher.Width:= imgweite;
zwischenspeicher.Height:= imghoehe;
zwischenspeicher.Canvas.Brush.Color:= clfeldhintergrund;
zwischenspeicher.Canvas.Rectangle(0,0,img.Width,img.Height);
zwischenspeicher.Canvas.FloodFill(2,2,clwhite,fsborder);
b:= rect(0,0,imgweite,imghoehe);
for i:= 1 to 7 do
begin
for ii:= 1 to 6 do
begin
r:= rect((i-1)*kreisdurchmesser,img.Height-ii*kreisdurchmesser,i*kreisdurchmesser,img.Height-(ii-1)*kreisdurchmesser);
if f[i,ii].besetzt
then
begin
if f[i,ii].spieler
then
begin
zwischenspeicher.Canvas.StretchDraw(r,img1.Picture.bitmap);
end
else
begin
zwischenspeicher.Canvas.StretchDraw(r,img2.Picture.bitmap);
end;
end
else //hier hin wenn unbesetzt
begin
zwischenspeicher.Canvas.StretchDraw(r,imgunbesetzt.Picture.bitmap);
end;
end;//for ii
end;//for i
end;//bilddimensionen verändert
img.Canvas.draw(0,0,zwischenspeicher.Picture.Bitmap); //VERMUTLICH LIEGT DER FEHLER HIER
zwischenspeicher.Free;
end;//proc felzeichnen
Danke für eure Hilfe
pi ist Sonntags = 4
|