StringGrid, раскрасить ячейки

VCL, KOL, CLX и др. Свои компоненты
Ответить
rootpro
Сообщения: 30
Зарегистрирован: 12 апр 2005, 14:57
Откуда: РБ, Стерлитамак
Контактная информация:

15 апр 2005, 18:21

Каким образом можно выделить несколько ячеек опред. цветом в StringGrid, используя OnDrawCell.
Аватара пользователя
LAngel
Сообщения: 277
Зарегистрирован: 30 мар 2005, 08:19
Откуда: Ульяновск
Контактная информация:

19 апр 2005, 10:43

Код: Выделить всё

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
Var
  StringGrid: TStringGrid;
  Can: TCanvas;
begin
  StringGrid := Sender as TStringGrid;
  Can := StringGrid.Canvas;
 Can.Font := StringGrid.Font;
  if (ARow >= StringGrid.FixedRows) and (ACol >= StringGrid.FixedCols)
   then Can.Brush.Color := StringGrid.Color
   else Can.Brush.Color := StringGrid.FixedColor;
//==============
  if ((ACol = 1) and (ARow = 1)) or
     ((ACol = 3) and (ARow = 1)) or
     ((ACol = 2) and (ARow = 2)) or
     ((ACol = 3) and (ARow = 3)) or
     ((ACol = 1) and (ARow = 3)) then
    Can.Brush.Color := clRed;
//==============
  if (gdSelected in State) then
  begin
    Can.Font.Color := clHighlightText;
    Can.Brush.Color := clHighlight;
  end;
  Can.FillRect(Rect);
  Can.TextOut(Rect.Left+2,Rect.Top+2, StringGrid.Cells[ACol, ARow]);
end;
С уважением, Lost Angel...
rootpro
Сообщения: 30
Зарегистрирован: 12 апр 2005, 14:57
Откуда: РБ, Стерлитамак
Контактная информация:

19 апр 2005, 10:48

Ща попробую..
Аватара пользователя
LAngel
Сообщения: 277
Зарегистрирован: 30 мар 2005, 08:19
Откуда: Ульяновск
Контактная информация:

19 апр 2005, 11:12

defaultdrawing := false в обджект инспекторе.
С уважением, Lost Angel...
rootpro
Сообщения: 30
Зарегистрирован: 12 апр 2005, 14:57
Откуда: РБ, Стерлитамак
Контактная информация:

19 апр 2005, 11:28

Это всё понятно, но как изменять количество выделенных ячеек и их порядок... динамически
Аватара пользователя
LAngel
Сообщения: 277
Зарегистрирован: 30 мар 2005, 08:19
Откуда: Ульяновск
Контактная информация:

20 апр 2005, 08:41

:) Создай какой-нить массив с координатами выделенных ячеек.. и их кол-во

Код: Выделить всё

...
  type
    ...
    TCellsInfo = record
      x, y : Integer;
      Color : TColor;
    end;
  var
    ....
    CellsInfo: Array[1..100] of TCellsInfo;
    CellsCount: Integer;
...
Ну и в обработчике

Код: Выделить всё

...
  for i := 1 to CellsCount do
    if (ACol = CellsInfo[i].x) and (ARow = CellsInfo[i].y) then
      Can.Brush.Color := CellsInfo[i].Color; 
...
С уважением, Lost Angel...
Санчез
Сообщения: 2
Зарегистрирован: 08 май 2009, 14:00

08 май 2009, 14:12

Приветики всем есть огромная просьба короче мне нужно массив из 15-ти случайных чисел от 1 до 99 вывести в StringGride, буду очень признателен и блягодарен, отблагодарю как положенно. Ответ можно прислать на 468465110 это номер аси
Аватара пользователя
Naeel Maqsudov
Сообщения: 2551
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

08 май 2009, 15:31

Санчез, немножечко не в тему ну ладно.
Положите на форму Form1 кнопку и грид затем используйте это:

Код: Выделить всё

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Grids;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FillArray;
    procedure ShowArray;
  private
    { Private declarations }
    FArr:array[1..99] of integer;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FillArray;
var
  i:integer;
begin
  for i:= 1 to 99 do begin
    FArr[i]:=random(1000);
  end;
end;

procedure TForm1.ShowArray;
var
  i:integer;
begin
  with StringGrid1 do begin
    ColCount:=2;
    RowCount:=100;
    FixedRows:=1;
    FixedCols:=1;
    Cells[0,0]:='Элемент'; Cells[1,0]:='Значение';
    for i:=1 to 98 do begin
      Cells[0,i]:=inttostr(succ(i));
      Cells[1,i]:=inttostr(FArr[succ(i)]);
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  FillArray;
  ShowArray;
end;

end.
Санчез
Сообщения: 2
Зарегистрирован: 08 май 2009, 14:00

08 май 2009, 16:13

пасибки огромное
Ответить