Thema: Delphi Memory Programm

Einzelnen Beitrag anzeigen

SMO

Registriert seit: 20. Jul 2005
178 Beiträge
 
Delphi XE6 Professional
 
#72

AW: Memory Programm

  Alt 12. Jun 2015, 22:16
Allerdings finde ich keine Möglichkeit, die Zellen, ähnlich wie beim StringGrid, einzeln über die Koordinaten anzusprechen.
Ich sitze nun schon ziemlich lange daran und verzweifle langsam. Daher wäre ich über einen rettenden Tipp sehr froh!
Hallo! So etwas gibt's beim DrawGrid nicht. Stattdessen musst du einen Handler für das "OnDrawCell" Event schreiben. Also im visuellen Designer das DrawGrid auswählen, dann im Objektinspektor zu den Events und "OnDrawCell" doppelklicken. Außerdem würde ich für die Bilder kein TImage nehmen, sondern TPicture oder TBitmap. TImage ist nämlich eine visuelle Komponente, also ein GUI, das du ebenso wie einen Button oder ein DrawGrid auf einer Form platzieren kannst. Aber für deine Zwecke ist das ja gar nicht nötig!
Die Unterschiede zwischen TImage, TPicture, TGraphic usw. sind verwirrend, nicht nur für Anfänger. Hier eine kurze Erklärung auf Englisch.

Da deine Bilder alle Bmp-Dateien sind, nehmen wir am besten TBitmap. Sieht dann ungefähr so aus:

Delphi-Quellcode:
var
  Memory: array [1..4,1..5] of Integer;
  Bilder: array [0..9] of TBitmap;

procedure BilderLaden;
var i : Integer;
begin
  for i := 0 to 9 do
  begin
    Bilder[i] := TBitmap.Create;
    Bilder[i].LoadFromFile(Pfad[i]);
  end
end;

procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect;
  State: TGridDrawState);
var
  BildNr: Integer;
begin
  // Das DrawGrid hat keine festen Zellen (FixedCols=0, FixedRows=0), sonst müssten
  // wir das hier bei den Koordinaten berücksichtigen.

  // Das Bild ermitteln, das zur aktuellen Zelle (ACol, ARow) gehört
  // Memory-Array hat 1-basierte Koordinaten
  BildNr := Memory[ARow + 1, ACol + 1];

  // Bild auf die Zelle malen (BildNr ist 1-basiert?)
  DrawGrid1.Canvas.StretchDraw(Rect, Bilder[BildNr - 1]);
  // oder: DrawGrid1.Canvas.Draw(Rect.Left, Rect.Top, Bilder[BildNr - 1]);
  end;
end;
  Mit Zitat antworten Zitat