![]() |
stringgridfelder per click färben, hab problem
Hallo, ich schreib jetzt zum ersten Mal hier im Forum, ich bräuchte dringend eure hilfe! :oops:
Ich will mit Delphi 6 ein rundenbasiertes Strategiespiel programmieren, naja es ist eine Gruppenarbeit und habe eher wenig Ahnung von Delphi :? hab jetzt die aufgabe bekommen, bei nem click aufm stringgridfeld die felder farbig anzuzeigen, auf die meinetwegen der charakter bewegen kann :wink: hab erst zur probe mit einem schritt probiert, aber wenn ich auf die erste zeile oder spalte clicke, kommt eine fehlermeldung "Im Projekt Projekt1.exe ist eine Exception der Klasse EListError aufgetreten. Meldung: 'Listenindex überschreitet das Maximum (-1)'. Prozeß wurde angehalten. Mit einzelne Anweisung oder Start fortsetzen." hab ich natürlich nicht verstanden :x mit der letzten zeile oder spalte klappt das aber iwie prima :( so sieht mein quelltext bis jetzt aus:
Delphi-Quellcode:
den fehler im quelltext hab ich noch nicht gefunden, und ich hab nur paar dinge aus anderen foren kopiert und hab auch nicht alles verstanden, wär also eiq ganz nett wenn jemand von euch mir das kurz zusammenfassen würde, und ein wenig verständlich, ich habs nicht so damit :stupid:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState); const SelColor = Clgreen; begin with TStringGrid(Sender), Canvas do begin if gdFocused in State then exit; If Integer(Objects[aCol,ARow]) = 1 then Brush.Color := SelColor else Brush.Color := Color; FillRect(Rect); end; end; procedure TForm1.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var ACol,ARow,i,j : Integer; begin with TStringGrid(Sender), Canvas do begin MouseToCell(X,Y,ACol,ARow); for i := 0 to StringGrid1.RowCount-1 do StringGrid1.Rows[i].Clear(); for i:=-1 to 1 do for j:=-1 to 1 do begin Objects[ACol+i,ARow] := Pointer(Integer(Objects[ACol+i,ARow]) xor 1); Objects[ACol,ARow+j] := Pointer(Integer(Objects[ACol,ARow+j]) xor 1); end; end; end; wäre euch sehr dankbar :lol: |
Re: stringgridfelder per click färben, hab problem
Hallo,
Zitat:
Aber OK. Statt MausDown nimm OnClick. Da wird die Col und Row des Grids direkt übergeben. Das MouseToCell(X,Y,ACol,ARow); kannst du dann weglassen. Ausserdem frage ich michh, warum du bei einem Klick "tausende" Zellen färbst.
Delphi-Quellcode:
for i:=-1 to 1 do
begin for j:=-1 to 1 do begin Objects[ACol+i,ARow] := Pointer(Integer(Objects[ACol+i,ARow]) xor 1); Objects[ACol,ARow+j] := Pointer(Integer(Objects[ACol,ARow+j]) xor 1); end; end; Zitat:
Du fängst bei -1 an, klar geht das schief. Ein Cells[-1,-1] gibt es nicht. Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz