Управление выделением и задание цвета строк в StringGrid

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Управление выделением и задание цвета строк в StringGrid

Сообщение alien308 » 26.08.2012 08:58:24

Как сделать, чтобы в StringGrid выделялась не отдельная ячейка, а вся строка таблицы? Как установить цвет выделения и отдельной строки? И последнее, как осуществить программное выделение?
alien308
новенький
 
Сообщения: 18
Зарегистрирован: 25.08.2012 09:37:47

Re: Управление выделением и задание цвета строк в StringGrid

Сообщение GAMER » 26.08.2012 11:27:10

Рисовать самому в событии StringGridSpDrawCell.

Пример 1.
Код: Выделить всё
procedure TFrmBorzh.StringGridSpDrawCell(Sender: TObject; aCol, aRow: Integer;
  aRect: TRect; aState: TGridDrawState);
begin
if (ARow>0) and (StrToIntEmpty(SDASp.Cells[9, aRow]) in [10,11,12]) then
begin
  with  StringGridSp.Canvas do
  begin
   StringGridSp.Canvas.FillRect(aRect);
   StringGridSp.Canvas.Font.Color := clRed;
   SetBkMode(Handle, TRANSPARENT);
   if  aCol in [1,2,4] then
   begin
    aRect.Left:=aRect.Left-3;
    DrawText(StringGridSp.Canvas.Handle, pchar(Utf8ToAnsi(StringGridSp.Cells[ACol, ARow])), -1, aRect, DT_SINGLELINE OR DT_VCENTER OR DT_CENTER);
   end;
   if  aCol in [0] then
   begin
    aRect.Left:=aRect.Left+3;
    DrawText(Handle, pchar(Utf8ToAnsi(StringGridSp.Cells[ACol, ARow])), -1, aRect, DT_SINGLELINE OR DT_VCENTER OR DT_LEFT);
   end;
   if  aCol in [3,5,6] then
   begin
    aRect.Right:=aRect.Right-4;
    DrawText(Handle, pchar(Utf8ToAnsi(StringGridSp.Cells[ACol, ARow])), -1, aRect, DT_SINGLELINE OR DT_VCENTER OR DT_RIGHT);
   end;
  end;
end;
end;   


Пример 2.
Код: Выделить всё
procedure TFrmPhase030.StringGrid2DrawCell(Sender: TObject; aCol,
  aRow: Integer; aRect: TRect; aState: TGridDrawState);
Const   //сдесь определяем Ваш цвет. Так же можно использовать
         //цвета по умолчанию.
clPaleGreen = TColor($CCFFCC);
clPaleRed =   TColor($CCCCFF);
begin
//Если ячейка получает фокус, то нам надо закрасить её другими цветами
{if (gdFocused in aState) then begin
  StringGrid2.Canvas.Brush.Color := clBlack;
  StringGrid2.Canvas.Font.Color := clGreen;
end
else} //Если же ячейка теряет фокус, то закрашиваем её красным и зелёным
{ if ACol = 2   //Вторая колонка будет зелёной , другие - ячейки красными

   then StringGrid2.Canvas.Brush.color := clPaleGreen

   else StringGrid2.canvas.brush.Color := clPaleRed; }
//Теперь закрасим ячейки, но только, если ячейка не Title- Row/Column
//Естевственно это завит от того, есть у Вас title-Row/Columns или нет.
If (ACol=1) and (ARow>0) and
   (UTF8Copy({UTF8UpperCase}UpSymbols(StringGrid2.Cells[1,aRow]),1,7)='НЕ ВИЗН') then
begin
   //Закрашиваем бэкграунд
  StringGrid2.canvas.fillRect(aRect);
  //Закрашиваем текст (Text). Также здесь можно добавить выравнивание и т.д..
  StringGrid2.Canvas.Font.Color := clRed;
  StringGrid2.canvas.TextOut(aRect.Left+3,aRect.Top+2,StringGrid2.Cells[ACol,ARow]);
end;
end;   
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Управление выделением и задание цвета строк в StringGrid

Сообщение alien308 » 26.08.2012 11:39:07

Спасибо, разбираюсь. А это где нибудь описано, кроме исходника grids.pas? 11163 строки и ни одного комментария.
alien308
новенький
 
Сообщения: 18
Зарегистрирован: 25.08.2012 09:37:47

Re: Управление выделением и задание цвета строк в StringGrid

Сообщение GAMER » 26.08.2012 11:42:31

Я это находил в инете, подправлял под себя.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Управление выделением и задание цвета строк в StringGrid

Сообщение iskander » 26.08.2012 14:31:01

alien308 писал(а):Как сделать, чтобы в StringGrid выделялась не отдельная ячейка, а вся строка таблицы?

Код: Выделить всё
StringGrid.Options := StringGrid.Options + [goRowSelect];

alien308 писал(а):Как установить цвет выделения?

Код: Выделить всё
StringGrid.SelectedColor := MyColor;

alien308 писал(а):как осуществить программное выделение?

Код: Выделить всё
StringGrid.Row := RowNumber;
iskander
энтузиаст
 
Сообщения: 626
Зарегистрирован: 08.01.2012 18:43:34


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 211

Рейтинг@Mail.ru