Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> StringGrid, Вертикальное выделение столбца 
:(
    Опции темы
LExpert
Дата 18.9.2007, 07:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 27.8.2007

Репутация: нет
Всего: нет



Всем доброго время суток
возник такой проблемс 
возможно ли с StringGrid`e сделать выделение вертикальное (колонок) и не как по умолчнию (строк)
тоесть надо чтобы выделяся столец а не строка smile
заранее всем спасибо.
PM MAIL   Вверх
skyboy
Дата 18.9.2007, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 4
Всего: 260



используй DrawGrid. Тем более, что за отрисовку теблицы там отвечает только OnDrawCell.  Там только одна "проблема"(на самом деле - просто особенность): таблица изначально имеет "виртуальный" стиль - никакого свойства Cells нет, за хранение информации отвечаешь сам. 
Процедура отрисовки будет выглядеть:
Код

procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
var txt: string;
      backColor, textColor: TColor;
      isSelected: Boolean;
      senderGrid: TDrawGrid;
begin
 senderGrid:= Sender as TDrawGrid;
 isSelected:= false;
 {генерируем текст ячейки}
 if (ACol= 0) AND (ARow = 0)
  then
   txt:= ''
  else
   begin 
    if ACol = 0
     then // заголовок строки
      txt:= 'Строка ' + inttostr(ARow)
     else
      begin
       if ARow = 0
        then // заголовок столбца
         txt:= 'Столбец ' + inttostr(ACol)
        else // "обычная" ячейка
         txt:=  inttostr(ARow * senderGrid.ColCount + ACol);
      end;
   end;
 {/генерируем текст ячейки}
 if gdFocused in State 
  then // ячейка непосредственно выбрана
   isSelected:= True;
 if (SenderGrid.Selection.Left<= ACol) AND (SenderGrid.Selection.Right>= ACol) AND (SenderGrid.Selection.Top = 0) 
 then // среди выбранных ячеек есть заголовок столбца, к которому относится текущая ячейка
  isSelected:= True;
 if isSelected
  then // ячейка выделена
   begin
    textColor:= clWhite;
    if gdFixed in State
     then
      backColor:= $0999999
     else
      backColor:= $0FFAAAA;
   end
  else // ячейка не выделена
   begin
    textColor:= clBlack;
    if gdFixed in State
     then
      backColor:= $0DDDDDD
     else
      backColor:= $0FFFFFF;
   end;
 senderGrid.Canvas.Brush.Color:= backColor;
 senderGrid.Canvas.Font.Color:= textColor;
 senderGrid.Canvas.FillRect(Rect);
 senderGrid.Canvas.TextRect(Rect,Rect.Left,Rect.Top,txt);
end;

чтоб можно было выбирать заголовки столбцов, надо бы установить FixedCols/FixedRows == 0, а также добавить процедуру-обработчик onClick, чтоб при выборе заголовков инициировать перерисовку
Код

procedure TForm1.DrawGrid1Click(Sender: TObject);
begin
 DrawGrid1.Invalidate();
end;

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0567 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.