![]() |
Stringgrid spinnt
hi leutz!
mir ist grad folgendes problem bei meiner arbeit aufgetaucht: ich hab ein stringgrid, und im ondrawcell ereignis desselben prüfe ich, ob einzelne zellen leer sind oder nicht, und wenn etwas drin steht, dann soll er diese farblich blau zeichnen! allerdings läuft da etwas schief! weil solange noch nichts drin steht, funktioniert das einwandfrei! sobald aber in einer zelle irgendwas steht, kann man die ganzen zellen dieser spalte durch anklicken blau färben! das darf aber nicht sein! die ersten beiden if funktionen färben zellen, deren kopf ein datum enthält farblich, sobald es zum we gehört!
Delphi-Quellcode:
woran liegt das? hat einer ne idee???
procedure TfrmMain.grdAnzeigeDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState); var a : integer; begin if (dayoftheweek(strtodate(grdAnzeige.Cells[acol, 0])) = 6) and not (gdFixed in State) then with grdAnzeige do begin Canvas.Brush.Color := $0000c3ff; Canvas.FillRect(Rect); Canvas.TextOut(Rect.Left+2, Rect.Top+2, Cells[ACol, ARow]); end; //färben des sonnabends if (dayoftheweek(strtodate(grdAnzeige.Cells[acol, 0])) = 7) and not (gdFixed in State) then with grdAnzeige do begin Canvas.Brush.Color := clred; Canvas.FillRect(Rect); Canvas.TextOut(Rect.Left+2, Rect.Top+2, Cells[ACol, ARow]); end; //färben des sonntages for a := 2 to grdAnzeige.RowCount do //färben der zellen, wenn eintrag begin //allerdings nur, wenn nicht zu if grdAnzeige.Cells[acol,a] <> '' then //den oberen 2 zeilen gehört! with grdAnzeige do begin canvas.Brush.Color := clskyblue; canvas.FillRect(Rect); canvas.TextOut(rect.Left + 2, rect.Top + 2, cells[acol, arow]); end; end; end; mfg matthias |
Re: Stringgrid spinnt
Moin Matthias,
erst einmal herzlich willkommen hier in der Delphi-PRAXiS. Ob's hilft weiss ich nicht, aber Du könntest ja mal probieren nicht Cells[] <> '' sondern trim(Cells[]) <> 0 zu nehmen. |
Re: Stringgrid spinnt
Da du das im DrawCell machst, ist die Schleife am Schluss imho sinnlos.
Delphi-Quellcode:
Ob das allerdings dein Problem löst, habe ich jetzt nicht getestet. Kann aber gut sein, da du kein Else hast, wo du die Farben zurück setzt.
procedure TfrmMain.grdAnzeigeDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState); var a : integer; begin if (dayoftheweek(strtodate(grdAnzeige.Cells[acol, 0])) = 6) and not (gdFixed in State) then with grdAnzeige do begin Canvas.Brush.Color := $0000c3ff; Canvas.FillRect(Rect); Canvas.TextOut(Rect.Left+2, Rect.Top+2, Cells[ACol, ARow]); end; //färben des sonnabends if (dayoftheweek(strtodate(grdAnzeige.Cells[acol, 0])) = 7) and not (gdFixed in State) then with grdAnzeige do begin Canvas.Brush.Color := clred; Canvas.FillRect(Rect); Canvas.TextOut(Rect.Left+2, Rect.Top+2, Cells[ACol, ARow]); end; //färben des sonntages // for a := 2 to grdAnzeige.RowCount do // begin if grdAnzeige.Cells[acol,aRow] <> '' then //STATT "a" "aRow" eingesetzt with grdAnzeige do begin canvas.Brush.Color := clskyblue; canvas.FillRect(Rect); canvas.TextOut(rect.Left + 2, rect.Top + 2, cells[acol, arow]); end; // end; end; |
Re: Stringgrid spinnt
danke ersteinmal für die antworten!
zu #1: hab ich versucht, macht er trotzdem immernoch! zu #2: die schelife ist nötig, damit die ersten beiden zeilen da nicht mit hineingezogen werden, da diese fixed sind, und daten enthalten! diese solln extra nicht verändert werden! mfg matthias |
Re: Stringgrid spinnt
Hallo Matthias,
Delphi-Quellcode:
Grüße vom marabu
procedure TFrmMultiSearch.grdAnzeigeDrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState); var a: integer; d: TDate; cl: TColor; begin d := StrToDate(grdAnzeige.Cells[aCol, 0]); if gdFixed in State then cl := grdAnzeige.FixedColor else if DayOfTheWeek(d) = 6 then cl := $0000c3ff else if DayOfTheWeek(d) = 7 then cl := clRed else if grdAnzeige.Cells[aCol, aRow] <> '' then cl := clSkyBlue else cl := clWhite; with grdAnzeige do begin Canvas.Brush.Color := cl; Canvas.FillRect(Rect); Canvas.TextOut(Rect.Left+2, Rect.Top+2, Cells[ACol, ARow]); end; end; |
Re: Stringgrid spinnt
Hi Matthias,
die Lösung von Jasocul ist schon richtig, Du musst nur statt der Schleife eine Abfrage machen, dass die Zeile richtig ist:
Delphi-Quellcode:
Viele Grüße
procedure TfrmMain.grdAnzeigeDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState); var a : integer; begin if (dayoftheweek(strtodate(grdAnzeige.Cells[acol, 0])) = 6) and not (gdFixed in State) then with grdAnzeige do begin Canvas.Brush.Color := $0000c3ff; Canvas.FillRect(Rect); Canvas.TextOut(Rect.Left+2, Rect.Top+2, Cells[ACol, ARow]); end; //färben des sonnabends if (dayoftheweek(strtodate(grdAnzeige.Cells[acol, 0])) = 7) and not (gdFixed in State) then with grdAnzeige do begin Canvas.Brush.Color := clred; Canvas.FillRect(Rect); Canvas.TextOut(Rect.Left+2, Rect.Top+2, Cells[ACol, ARow]); end; //färben des sonntages // for a := 2 to grdAnzeige.RowCount do // begin if aRow >= 2 then begin if grdAnzeige.Cells[acol,aRow] <> '' then //STATT "a" "aRow" eingesetzt with grdAnzeige do begin canvas.Brush.Color := clskyblue; canvas.FillRect(Rect); canvas.TextOut(rect.Left + 2, rect.Top + 2, cells[acol, arow]); end; end; end; Iris |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:22 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