Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Zelle färben
Simu - Di 31.08.04 11:38
Titel: Zelle färben
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
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 begin StringGrid2.Cells[ACol,ARow]:='O'; Label2.Caption:='Getroffen'; StringGrid2.Canvas.Brush.Color:= clred; end; if StringGrid2.Cells[ACol, ARow ] = '=' then begin Label2.Caption:='Nochmal'; end; If StringGrid2.Cells[ACol, ARow ] = '' then begin StringGrid2.Cells[ACol,ARow]:='='; Label2.Caption:='Nicht getroffen'; computerschiesst(); end; end; |
Moderiert von
UGrohne: Code- durch Delphi-Tags ersetzt.Moderiert von
Tino: Topic aus Sonstiges verschoben am Di 07.09.2004 um 10:44
jasocul - 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 - 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:
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
Simu - 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:
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 - 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.
Simu - Di 31.08.04 16:31
Vielen Dank, es hat funktioniert!! :D
Ihr habt mir sehr geholfen!!
Gruss Simu
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!