Autor Beitrag
Simu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Di 31.08.04 11:38 
Hallo
bin ein Schiffe versenken am programmieren.
Jetzt möchte ich eine StringGrid Zelle einfärben wenn ich getroffen habe.
Kann mir jemand sagen was an meinem Code falsch ist?
Habe im Delphi Forum viel Beispiele gesehen, komme aber nicht dahinter. :oops:
Vielen Dank!!!
mfg

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
procedure TForm1.StringGrid2MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  ACol, ARow : Integer;
begin
  StringGrid2.MouseToCell(x,y,ACol,ARow);
  if
    StringGrid2.Cells[ACol, ARow ] = 'X' then    //Prüft ob in Zelle ein X vorhanden ist
    begin
      StringGrid2.Cells[ACol,ARow]:='O';         //Wenn ein X vorhanden, dann Getroffen, ein O wird gesetz
      Label2.Caption:='Getroffen';
      StringGrid2.Canvas.Brush.Color:= clred;
  end;
  if
    StringGrid2.Cells[ACol, ARow ] = '=' then    //Prüft ob in Zelle ein = voranden ist
    begin
      Label2.Caption:='Nochmal';
    end;
  If
    StringGrid2.Cells[ACol, ARow ] = '' then     //Prüft ob in der Zelle nichts vorhanden ist
    begin
      StringGrid2.Cells[ACol,ARow]:='=';         //Wenn nichts vorhanden, dann nicht getroffen, ein = wird gesetzt
      Label2.Caption:='Nicht getroffen';
      computerschiesst();
    end;
end;


Moderiert von user profile iconUGrohne: Code- durch Delphi-Tags ersetzt.
Moderiert von user profile iconTino: Topic aus Sonstiges verschoben am Di 07.09.2004 um 10:44
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Di 31.08.04 12:45 
Hi,

Du benutzt das falsche Ereignis. Nur im DrawCell.Ereignis werden die Zellen neu gemalt. Ich glaube die Eigenschaft DefaultDrawing muss auch noch auf True stehen.

Hoffentlich hatte ich das noch richtig in Erinnerung.

Gruß,
Peter
.Chef
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1112



BeitragVerfasst: Di 31.08.04 13:52 
Hier mal ein Beispielcode aus einem meiner Programme. Dargestellt werden disassemblierte Programme in drei Spalten (Adresse, Befehl, Opcode). Wenn ein Breakpunkt gesetzt ist, wird die ganze Zeile rot eingefärbt wie bei den meisten Debuggern. Sollte zum verdeutlichen des Prinzips genügen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  with (Sender as TStringGrid) do
  begin
    if BP[ARow] then
    begin
      Canvas.Brush.Color:=clRed;
      Canvas.Font.Color:=clWhite;
      if Selection.Top = ARow then Canvas.Brush.Color:=clBlue;
    end else
    begin
      Canvas.Brush.Color:=clWhite;
      Canvas.Font.Color:=clBlack;
      if Selection.Top = ARow then
      begin
        Canvas.Brush.Color:=clHighlight;
        Canvas.Font.Color:=clWhite;
      end;
    end;
    if ACol = 1 then Canvas.Font.Style:=[fsBold] else Canvas.Font.Style:=[];
    Canvas.TextRect(Rect,Rect.Left+2,Rect.Top+2,Cells[ACol,ARow]);
    Canvas.FrameRect(Rect);
  end;
end;


Gruß,
Jörg

_________________
Die Antworten auf die 5 häufigsten Fragen:
1. Copy(), Pos(), Length() --- 2. DoubleBuffered:=True; --- 3. Application.ProcessMessages bzw. TThread --- 4. ShellExecute() --- 5. Keine Vergleiche von Real-Typen mit "="!
Simu Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Di 31.08.04 15:34 
Danke hab das so gemacht.
jetzt habe ich aber das problem, dass ich die procedure nicht aufrufen kann in meinem code.

hab das so gemacht:

ausblenden Quelltext
1:
2:
TForm1.StringGrid2DrawCell(Sender: TObject; ACol, ARow: Integer;
         Rect: TRect; State: TGridDrawState);


ergiebt mir folgenden fehler:

nicht genügend wirkliche parameter

kannst du mir sagen wo ich den fehler mache?

danke !!

mfg
.Chef
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1112



BeitragVerfasst: Di 31.08.04 15:38 
Der Code gehört ins OnDrawCell-Ereignis. Doppelklicke einfach im OI auf OnDrawCell und füge den Code dann dort ein.

_________________
Die Antworten auf die 5 häufigsten Fragen:
1. Copy(), Pos(), Length() --- 2. DoubleBuffered:=True; --- 3. Application.ProcessMessages bzw. TThread --- 4. ShellExecute() --- 5. Keine Vergleiche von Real-Typen mit "="!
Simu Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Di 31.08.04 16:31 
Vielen Dank, es hat funktioniert!! :D
Ihr habt mir sehr geholfen!!

Gruss Simu