Einzelnen Beitrag anzeigen

Stex

Registriert seit: 12. Nov 2006
8 Beiträge
 
Delphi 7 Professional
 
#1

TStringGrid - Zellen nicht färben

  Alt 20. Aug 2008, 09:18
Hallo,

ich habe ein Stringgrid und möchte nun bestimmte Zellen gar nicht anzeigen, die komplette Breite des Grids soll allerdings erhalten bleiben.
An sich dachte ich, ich könnte das DrawCell-Ereignis für diese Zellen einfach per if dazu bringen, nicht auszuführen, aber das funktionierte nicht wirklich.

Wie kann ich das Grid dazu bringen, einige Zellen einfach auszublenden, auch wenn die Gesamtbreite des Grids unverändert bleibt und auch die Zellen dahinter an genau der Position sind, an der sie auch wären, wenn die Zellen davor angezeigt würden?

Danke schon einmal im Voraus!


Inhalt der DrawCell-Methode (durch die zweite Zeile wollte ich das Zeichnen der Zelle verhindern):
Delphi-Quellcode:
  invcols := Explode(';', InvisibleCols);

  if SearchInDynArray(IntToStr(ACol), invcols) = -1 then
  begin
    if assigned(onDrawCell) then
      onDrawCell(self, aCol, ARow, Rect, State);

     inherited DrawCell(ACol, Arow, Rect, State);

      if RightAlignCols <> 'then
      begin
        right := Explode(';', RightAlignCols);
      end;

      hrowcolor := HTML2Color(SecondRowsHTMLColor);

      if gdFocused in State then
        begin
          selRow := ARow;
          selCol := ACol;
        end;

      if (ARow = 0) and (ACol = lastsortcol) then //Dreiecke zeichnen
      begin
        with Self do
        begin
            if FProps.ShowAscendingSymbol = true then
            begin
              if ascending = false then
                begin
                  Canvas.Brush.Color := ascsymbolcolor; //$00AB8552;
                  Canvas.Polygon([Point(Rect.Right-20,Rect.Top+2), // Pfeil nach unten
                                  Point(Rect.Right-2,Rect.Top+2),
                                  Point(Rect.Right-11,Rect.Top+12)]);
                end
                else if ascending = true then
                begin
                  Canvas.Brush.Color := ascsymbolcolor; //$00AB8552;
                  Canvas.Polygon([Point(Rect.Right-11,Rect.Top+7), // Pfeil nach oben
                                  Point(Rect.Right-20,Rect.Top+17),
                                  Point(Rect.Right-2,Rect.Top+17)]);
                end;
            end;

        end;
      end;
        if self.FixedCols > 0 then
          temp := 0
        else
          temp := -1;

      if (ARow < self.FixedRows) or (ARow = fboldrow) then
        if FProps.BoldFixedCaptions = true then
        begin
          fonttemp := Canvas.Font;
          Canvas.Font.Style := [fsBold];
          Canvas.TextOut(Rect.Left + 2, Rect.Top + 1, self.Cells[ACol, ARow]); //Dann Text in der Zelle ausgeben
          canvas.Font := fonttemp;
        end;



        if (ACol > temp) and (ARow > 0) then
        begin
          with self do
          begin
            s := cells[ACol, ARow];
            if ((ARow mod 2) = 0) then //jede zweite Zeile berücksichtigen
            begin
              if (not (gdSelected in State)) and (FProps.CustomColorForSecondRows = true) then
              begin
                Canvas.Brush.Color := hrowcolor; //Farbe die jede zweite Zeile bekommen soll.
                Canvas.FillRect(Rect);
              end;
            end;


            if ((not (goRowSelect in Options)) and (gdFocused in State)) then //Wenn RowSelect = False die aktive Zelle blau färben
            begin
              Canvas.Brush.Color := selcellcolor; //Farbe der selektierten Zelle wenn RowSelect = False;
              Canvas.FillRect(Rect);
            end;

            //Zeilenumbruch
            if FProps.WordWrap = true then
            begin
              If Length(S) > 0 Then
              Begin
                drawrect := rect;
                drawrect.Left := drawrect.left + 2;
                drawrect.top := drawrect.top + 1;
                DrawText(canvas.handle,
                          Pchar(S), Length(S), drawrect,
                          dt_calcrect or dt_wordbreak or dt_left );
                If (drawrect.bottom - drawrect.top) >
                   RowHeights[Arow]
                Then
                  RowHeights[Arow] :=
                     (drawrect.bottom - drawrect.top)
                Else
                Begin
                  drawrect.Right := rect.right;
                  canvas.fillrect( drawrect );
                  if SearchInDynArray(IntToStr(ACol), right) = -1 then
                    DrawText(canvas.handle,
                            Pchar(S), Length(S), drawrect,
                            dt_wordbreak or dt_left)
                  else
                    Display(self, self.Cells[ACol, ARow], taRightJustify);
                End;
              End;
            end //Zeilenumbruch Ende
            else
              begin
                if SearchInDynArray(IntToStr(ACol), right) = -1 then
                  Canvas.TextOut(Rect.Left + 2, Rect.Top + 1, self.Cells[ACol, ARow]) //Text ohne Zeilenumbruch ausgeben
                else
                  Display(self, self.Cells[ACol, ARow], taRightJustify); //Text mit Align Right ausgeben
              end;
          end; //with
        end;
  end;
  Mit Zitat antworten Zitat