![]() |
farbige Zellen im Stringgrid
Hi,
ich muß folgendes machen : in Abhängigkeit von dem Wert, der in Spalte 1 eines Stringgrids eingegeben wird, soll Spalte 4 farblich anders dargestellt werden. Gesteuert wird das durch die Variable SP. Jetzt habe ich paar seltsame Effekte. Entweder werden alle Zeilen bunt, oder eine Zeile zu tief oder zu hoch. Irgendwas ist total verkehrt. 8)
Delphi-Quellcode:
procedure TfrmPreisEing.StringGrid1DrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState); begin inherited; with (Sender as TStringGrid) do begin if (ACol = 0) or (ARow = 0) then Canvas.Brush.Color := clBtnFace else begin if SP and (ACol = 4) and (ARow = RowCount - 1) then begin Canvas.Brush.Color := clMoneyGreen; end else Canvas.Brush.Color := clWindow; Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, cells[acol, arow]); Canvas.FrameRect(Rect); end; end; end; |
Re: farbige Zellen im Stringgrid
Ich hab' hier mal ein Code-Stückchen. Ich hatte das ganze im OnMouseDown vom DrawGrid, brauchst dir die Infos nur noch raussammeln... :wink:
Delphi-Quellcode:
case FieldArray[ACol + 1, ARow + 1] of
1: begin with DrawGrid.Canvas do begin Pen.Style := psClear; Brush.Style := bsSolid; Brush.Color := clTeal; FillRect(Rect); end; end; end; |
Re: farbige Zellen im Stringgrid
frage willst du die FixedRow und Col auch einfärben?
|
Re: farbige Zellen im Stringgrid
Delphi-Quellcode:
hier mal ein beispiel. da wird getestet ob in der Daylist ein Tag frei ist und dieser dann eingefärbt.
begin if arow >= 1 then
if acol >= 1 then if (DayList[acol].isfree) and (acol <= 5) then begin stringgrid1.Canvas.Brush.color:=clred; end; du solltest dich hier erstmal auf das wesentliche konzentrieren und nur versuchen sp auszuwerten. warum rufst du den Vorgänger auf_ objektablage :mrgreen: dann mußt du schon zeigen was der vorgänger macht. |
Re: farbige Zellen im Stringgrid
Kleiner Tip an raik und hansa:
Niemals die Angaben für FixedCols & FixedRows absolut angeben! Raiks Code könnte dann so aussehen:
Delphi-Quellcode:
With Sender as TStringGrid Do
Begin If aRow < FixedRows Then Exit; If aCol < FixedCols Then Exit; If (DayList[aCol].isfree) and (aCol <= 5) Then Canvas.Brush.color:=clRed; End; |
Re: farbige Zellen im Stringgrid
@robert begründung :?:
|
Re: farbige Zellen im Stringgrid
Ändere mal im OI die ANzahl der FixedCols oder FixedRows.
Du müssest dann überall im Code Anpassungen vornehmen. |
Re: farbige Zellen im Stringgrid
Das Problem ist anscheinend folgendes: im OnDrawCell werden alle Zellen neu gezeichnet. Also nützt es mich nichts mehr, die in Abhängigkeit von einer Zeile zu machen. Ich muß wohl ein Kriterium in dem StringGrid selber unterbringen. Sehe ich das richtig ? :shock:
P.S.: Hat man eine genau definierte Anzahl FixedRows/Cols so ist es wohl fast egal, ob die absolut oder nicht angegeben werden. Insbesondere bei Robert, wo keine Form was mit der anderen zu tun hat. :zwinker: |
Re: farbige Zellen im Stringgrid
Als ich Raiks Code gesehen hatte, hatte ich mich schon geärgert, dass ich immer per FillRect oder TextRect die Zelle überzeichne.
Nachdem ich es gerade getestet habe, musste ich feststellen, dass das so nicht geht. Ist ja auch klar -> OnDrawCell wird NACH dem Zeichnen aufgerufen, nicht davor (wie bei ListBoxes, etc) Zum Beispiel zeichnet der folgende Code die Zeilen abwechselnd weiß und hellgrau (ParentColor des Grids kann also auf true stehen):
Delphi-Quellcode:
With Sender As TStringGrid Do
Begin If aRow < FixedRows Then Exit; If aCol < FixedCols Then Exit; With Canvas Do Begin // wenn Zelle ausgewählt... If gdSelected In State Then Brush.Color := $00EFD3C6 // sonst ... Else If aRow Mod 2 = 0 Then Brush.Color := $00EFEFEF Else Brush.Color := clWhite; // Zeichne den Text mit dem veränderten Hintergrund TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Cells[aCol, aRow]); End; End; |
Re: farbige Zellen im Stringgrid
bitte :shock:
verstehe ich nicht, der code soll nur die auswahl zeigen, wie ich eine Spalte einfärbe. das man
Delphi-Quellcode:
hintersetzt, hatte ich angenommen.Stringgrid1.Canvas.FillRect(Rect); raik das problem von hansa ist ja nicht das zeichnen, sondern die logik die spinnt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:40 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