Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Смена цвета выделения StringGrid


Автор: AntonPavlov 11.10.2011, 20:03
Скажите, как изменить цвет выделения строк в компоненте StringGdid? Сам я нашел такой вот код:
Код

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; 
  Rect: TRect; State: TGridDrawState); 
const 
  SelectedColor = Clblue; 
begin 
  if (state = [gdSelected]) then 
   with TStringGrid(Sender), Canvas do 
   begin 
   Brush.Color := SelectedColor; 
   FillRect(Rect); 
   TextRect(Rect, Rect.Left + 2, Rect. + 2, Cells[aCol, aRow]); 
   end;

Но чтобы он работал, нужно поставить свойство DefaulDrawing в false, a у меня оно должно быть True, ибо тогда заполнение таблицы данными невозможно, при том, как это я делаю. А именно: 
Код

var
c, r, i :integer;
begin
WordsTable:= Base.GetTable('SELECT word FROM words WHERE LinkKey = ' + '"' + param + '"');
for i:=0 to sgWords.RowCount-1 do
sgWords.Rows[i].Clear;
sgWords.ColCount := 1;
sgWords.ColWidths[0] := sgWords.ClientWidth;
sgWords.RowCount := WordsTable.RowCount;
for c := 0 to sgWords.ColCount - 1 do
for r := 0 to sgWords.RowCount - 1 do
begin
sgWords.Cells[c,r] := WordsTable.FieldAsString(0);
WordsTable.Next;
end;

При DafaultDraw False, ка кя уже говорил, не работает заполнение, но работает смена выделения. А как сделать, чтобы и то и то работало? 

Автор: northener 11.10.2011, 23:05
Цитата(AntonPavlov @  11.10.2011,  20:03 Найти цитируемый пост)
 if (state = [gdSelected]) then

Подробно не смотрел код. Но вышеприведённая строчка уже признак неправильной работы с множеством, коим и является "State: TGridDrawState".
Правильная строчка должна бы выглядеть так:
Код

  if gdSelected in State then

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)