Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi farbige Zellen im Stringgrid (https://www.delphipraxis.net/19052-farbige-zellen-im-stringgrid.html)

Hansa 28. Mär 2004 12:36


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;

Nonsense 28. Mär 2004 12:41

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;

kiar 28. Mär 2004 12:42

Re: farbige Zellen im Stringgrid
 
frage willst du die FixedRow und Col auch einfärben?

kiar 28. Mär 2004 12:45

Re: farbige Zellen im Stringgrid
 
Delphi-Quellcode:
begin if arow >= 1 then
         if acol >= 1 then
         if (DayList[acol].isfree) and (acol <= 5) then
         begin
      stringgrid1.Canvas.Brush.color:=clred;
         end;
hier mal ein beispiel. da wird getestet ob in der Daylist ein Tag frei ist und dieser dann eingefärbt.

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.

Robert_G 28. Mär 2004 14:07

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;

kiar 28. Mär 2004 15:03

Re: farbige Zellen im Stringgrid
 
@robert begründung :?:

Robert_G 28. Mär 2004 15:15

Re: farbige Zellen im Stringgrid
 
Ändere mal im OI die ANzahl der FixedCols oder FixedRows.
Du müssest dann überall im Code Anpassungen vornehmen.

Hansa 28. Mär 2004 15:20

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:

Robert_G 28. Mär 2004 16:33

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;

kiar 28. Mär 2004 16:37

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:
 
Stringgrid1.Canvas.FillRect(Rect);
hintersetzt, hatte ich angenommen.

raik

das problem von hansa ist ja nicht das zeichnen, sondern die logik die spinnt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:38 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz