AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wieder mal: Einzelne Zellen in einem Grid zeichnen

Ein Thema von junale · begonnen am 23. Mär 2005
Antwort Antwort
junale

Registriert seit: 22. Dez 2004
Ort: Kaiserslautern
15 Beiträge
 
#1

Wieder mal: Einzelne Zellen in einem Grid zeichnen

  Alt 23. Mär 2005, 15:12
Hi,

Ich habe ein TDrawGrid, in welchem ein (variables) 19 auf 19 Raster (durch die Komponente) erzeugt wird. Parallel existiert ein (variables) Array[0..18, 0..18] in dem die Farben der Spielsteine hinterlegt sind. Wenn ich nun einen Stein mit folgendem Code "bewege" werden nicht alle Steine erneut gezeichnet // gelöscht.

Waran kann das liegen?

Wenn ich das "Refresh" in der Routine MoveItem einfüge (momentan auskommentiert), dann wird die Bewegung der Spielsteine sehr langsam, sobald ein paar Steine gleichzeitig bewegt werden müssen.

Durch die Suche hier im Forum habe ich InvalidateCell probiert -> wird auch nicht besser.

Delphi-Quellcode:
type
  TGameBoard = class (TDrawGrid)
  private
    fFields: Array of Array of TGameItems;
    ...
  protected
    procedure DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); override;
  public
    ...
    procedure MoveItem (aRow, aCol: Integer; Dir: TGravitation);
  published
    ...
  end;

...

procedure TGameBoard.MoveItem (aRow, aCol: Integer; Dir: TGravitation);
var
  ToRow, ToCol: Integer;
begin
  case Dir of
    grBottom: begin ToRow := Succ(aRow); ToCol := aCol; end;
    grLeft: begin ToRow := aRow; ToCol := Pred (aCol); end;
    grRight: begin ToRow := aRow; ToCol := Succ (aCol); end;
    grTop: begin ToRow := Pred(aRow); ToCol := aCol; end;
  end;

  fFields[ToRow, ToCol] := fFields[aRow, aCol];
  fFields[aRow, aCol] := giNone;
  InvalidateCell (aRow, aCol);
  InvalidateCell (ToRow, ToCol);
// Refresh;
end;

procedure TAEJGameBoard.DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState);
  procedure PaintCoin (CoinColor: TColor);
  begin
    Canvas.Pen.Color := clGray;
    Canvas.Brush.Color := CoinColor;
    Canvas.Ellipse (aCol * (DefaultColWidth + GridLineWidth) + 2, aRow * (DefaultRowHeight + GridLineWidth)+ 2, Succ (aCol) * (DefaultColWidth + GridLineWidth) - 2, Succ (aRow) * (DefaultRowHeight + GridLineWidth) - 2);
  end;
begin
  inherited;
  case fFields[aRow, aCol] of
    giCoinBlack: PaintCoin (clBlack);
    giCoinBlue: PaintCoin (clBlue);
    giCoinRed: PaintCoin (clRed);
  end;
end;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz