Delphi: Как изменить цвет ячеек в StringGrid по кнопке Нажмите [duplicate]

Нет. Вам нужен полноразмерный парсер для этого типа проблем.

10
задан Toon Krijthe 26 September 2012 в 12:38
поделиться

3 ответа

procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
i:integer;  
begin
  with Sender as TStringGrid do
    begin
        Canvas.FillRect(Rect);
        DrawText (Canvas.Handle,
            PChar(Cells[ACol, ARow]),
            Length(Cells[ACol, ARow]),
            Rect, DT_WORDBREAK or DT_EXPANDTABS or DT_CENTER);
    end;
    for i:=2 to  StringGrid1.RowCount - 1 do
    if StringGrid1.Cells[3,i]='' then
      begin
        StringGrid1.Canvas.Brush.Color:=clRed;
          if ((ACol=3)and(ARow=i)) then
            begin
              StringGrid1.Canvas.FillRect(Rect);

            end;
      end;


end;
-1
ответ дан Nigth F0X 22 August 2018 в 00:00
поделиться
  • 1
    Почему вы используете трансляцию Sender as TStringGrid, а также прямую ссылку на StringGrid1. И намереваетесь ли вы, чтобы это была самостоятельная процедура, а не метод формы, содержащий StringGrid1, и если вы свободно, как вы предполагаете, это будет на самом деле вызвано? – MartynA 11 March 2018 в 19:54
  • 2
    Возможно, вы захотите объяснить, почему вы думаете, что этот код работает и / или что отсутствует или некорректно в исходном сообщении ... – Francesco B. 11 March 2018 в 20:11
  • 3
    Первая часть кода устанавливает цвет ячейки, а также выравнивает текст по центру. Третья часть кода устанавливает цвет определенной ячейки при выполнении условия. В этом коде условие изменения цвета ячейки состоит в том, чтобы проверить пустое значение, если оно «пусто», в ячейке, то он подсвечивается красным цветом. – Nigth F0X 11 March 2018 в 21:02
  • 4
    эти процедуры были специально написаны для использования клиентами. Если пользователь не вводит данные правильно или ничего не вводит, ячейка меняет цвет на красный. Этот раздел кода проверяет пустые значения, последнюю ячейку в столбце. – Nigth F0X 11 March 2018 в 21:08
  • 5
    Отправитель как StringGrid используется, потому что эта процедура наследует динамический StringGrid при создании отчетов с использованием fastreport – Nigth F0X 11 March 2018 в 21:17

Ссылка Rafael содержит все, что вам нужно, использование события OnDrawCell - это способ рисовать ячейки StrignGrid. проверьте этот образец, который рисует только фон конкретной ячейки.

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;  Rect: TRect; State: TGridDrawState);
begin
  if (ACol = 3) and (ARow = 2) then
    with TStringGrid(Sender) do
    begin
      //paint the background Green
      Canvas.Brush.Color := clGreen;
      Canvas.FillRect(Rect);
      Canvas.TextOut(Rect.Left+2,Rect.Top+2,Cells[ACol, ARow]);
    end;
end;
8
ответ дан RRUZ 22 August 2018 в 00:00
поделиться
  • 1
    спасибо ,, он работает aloan, но не в моей процедуре. пожалуйста, проверьте мою процедуру в теле моего вопроса. Спасибо . – Arash 15 July 2011 в 02:08
  • 2
    Что вы имеете в виду, что не работает? пытаетесь ли вы установить точку останова в строке, где установлен цвет фона (Canvas.Brush.Color := clGreen;), чтобы проверить, достигает ли приложение этой точки? – RRUZ 15 July 2011 в 02:14
  • 3
    @Downvoter, в чем проблема? copypasting? – RRUZ 15 July 2011 в 03:14
  • 4
    RUUZ: Да, я делаю точку останова, ее достижимость. я думаю, я не могу использовать его, потому что ваш код правильный и его от приложения. Я не знаю, что делать. – Arash 15 July 2011 в 09:31
  • 5
    это не о моем мышлении или вашем мышлении. его простой код менее чем за 15 строк, которые, как я сказал, не работают вместе, но оба они работают только в одиночку. теперь, если вы можете помочь ей так хорошо, и я буду так благодарен вам, но другие комментарии, которые не помогают спамам. – Arash 15 July 2011 в 23:35

Я использовал эти коды, переведенные на C ++. Есть две конкретные заметки, затем я отправлю код.

  1. В «StringGrid1» свойство «DefaultDrawing» должно быть FALSE для этого.
  2. Объект «Холст» должен быть полностью квалифицированным: т.е. StringGrid1-> Canvas-> Font-> Color = clBlack.

КОД:

void __fastcall TForm3::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect,
      TGridDrawState State)
{
UnicodeString   uStr = "Hello";
int     k, l;
char    cc[100];


if(TRUE)
    {
    if((ACol <= 1) || (ARow <= 1))
        {
        StringGrid1->Canvas->Font->Color = clBlack;
        StringGrid1->Canvas->Brush->Color = clBtnFace;
        if(ACol == 0)
            {
            if(ARow > 1)
                {
                sprintf( cc, " %5.1f", rowLabels[ARow - 2]);
                uStr = cc;
                StringGrid1->Canvas->TextRect( Rect, Rect.left+2, Rect.top+2, uStr);
                StringGrid1->Canvas->FrameRect(Rect);
                }
            }
        if(ARow == 0)
            {
            if(ACol > 1)
                {
                sprintf( cc, " %5.1f", colLabels[ACol - 2]);
                uStr = cc;
                StringGrid1->Canvas->TextRect( Rect, Rect.left+2, Rect.top+2, uStr);
                StringGrid1->Canvas->FrameRect(Rect);
                }
            }
        }
    else
        {
        switch (ACol%2)
            {
            case 0:
                {
                StringGrid1->Canvas->Font->Color = clRed;
                StringGrid1->Canvas->Brush->Color = 0x00E1FFF9;
                break;
                }
            case 1:
                {
                StringGrid1->Canvas->Font->Color = clBlue;
                StringGrid1->Canvas->Brush->Color = 0x00FFEBDF;
                break;
                }
            }
        StringGrid1->Canvas->TextRect( Rect, Rect.left+2, Rect.top+2, uStr);
        StringGrid1->Canvas->FrameRect(Rect);
        }
    }
}
2
ответ дан wGraves 22 August 2018 в 00:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: