Autor Beitrag
krillator
Hält's aus hier
Beiträge: 5



BeitragVerfasst: So 12.01.03 00:16 
Hallöchen,
also der Titel stellt hier meine Frage.
Ich programmiere gerade "Space invaders" , dafür benötige ich einen Editor, der Aliens zeichnen kann. Hierfür will ich den DrawGrid benutzen. Nun muss ich einzelne Zellen in diesem DrawGrid mit einer Farbe belegen.
Und wie mache ich dieses?
MfG Krillator :roll: :wink:
Mari
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54



BeitragVerfasst: So 12.01.03 18:05 
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var zeile: integer = 3;
    spalte:Integer = 2;

procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
 drawgrid1.Canvas.brush.color := clred;
 if (acol = spalte) and (arow = zeile) then
 drawgrid1.Canvas.FillRect(Rect);
end;


Ich hoffe das hilft dir :wink:

Mari
krillator Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Di 14.01.03 21:52 
ja vielen dank, aber ich muss mehrere Zellen mit verschiedenen farben belegen und wenn ich die farbe mal wechsel, dann mal er die eine Zelle, die ich zuvor bemalt habe, in die neue farbe um .Naja und die neue Telle bekommt die richtige farbe.Vielleicht noch nen Tip??

vielen dank gruß krillator :wink:
krillator Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mi 15.01.03 10:57 
Titel: farben aus den einzelnen Zellen auslesen??
hallöchen noch einmal,

jetzt wollte ich gerne noch wissen, wie ich die einzelnen farben aus den zellen lesen und speichern kann. Wollte die farben zunächst in eine liste packen, dann auch vielleicht als liste abspeichern.

Danke
MfG Krillator :wink:
Mari
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54



BeitragVerfasst: Mi 15.01.03 18:02 
Also, hier jetzt ein weiterer Vorschlag:


ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
var Farbe: Array of Array of TColor;

procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var x,y:Integer;
begin
setlength(farbe,drawgrid1.colcount,drawgrid1.rowcount);
farbe[1,2] := cllime;
for x := 1 to drawgrid1.colcount-1 do
 begin
  for y := 1 to drawgrid1.rowcount-1 do
   begin
    drawgrid1.Canvas.brush.color := Farbe[x,y];
    drawgrid1.Canvas.FillRect(drawgrid1.CellRect(x,y));
   end;
 end;
end;

Mit dieser Version kannst du einfach z.B. mit farbe[2,3] := clred das Kästchen mit den Koordinaten 2(x) und 3(y) rot einfärben. Die Werte der einzelnen Kästchen kannst du dann auf die gleiche Art auslesen.
Damit die Kästchen am Anfang nicht schwarz sondern weiß sind solltest du in die FormCreate-Methode dann folgendes schreiben:


ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.FormCreate(Sender: TObject);
var x,y:Integer;
begin
for x := 1 to drawgrid1.colcount-1 do
 begin
  for y := 1 to drawgrid1.rowcount-1 do
   begin
    farbe[x,y] := clwhite;
   end;
 end;
 farbe[1,1] := clred;
 farbe[1,2] := cllime;
end;


Damit werden die Anfangswerte zugewiesen.
Allerdings gibt es noch ein Problem: Wenn ich die Werte in der FormCreate-Methodezuweise funzt alles normal, wenn ich sie aber zuweise während das Programm schon läuft geht es nicht. Weiß jemand an was das liegt?


Mari
krillator Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Do 16.01.03 14:59 
Hallöchen,

also danke noch einmal für deine Hilfe Ich habe es jetzt aber anders gemacht. Vielleicht beantwortet dieses auch deine Frage.
Also ich habe mit einem ColorDialog während der Laufzeit gearbeitet.
Ich wähle eine Farbe in diesem Dialog aus und klicke auf die Zelle, die ich in der gewünschten farbe haben möchte.
hier mal der Code:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
procedure Tfrm_SpaInv.DrawGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
  var CanSelect: Boolean);
begin
drawgrid1.Canvas.brush.color := frm_SpaInv.ColorDialog1.color;
drawgrid1.Canvas.FillRect(DrawGrid1.CellRect(ACol,ARow););
end;

so kannst du eben während der Laufzeit deine Farbe Wählen. Um Die Farbe in der Zelle mit den Koordinaten zu speichern habe ich eine Liste verwendet, die aus
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
P_Color = ^T_Color;
T_Color = record
            Row   : integer;
            Col   : integer;
            Rect  : TRect;
            color : TColor ;
          end;

besteht.
Gruß Krillator