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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выделеный Col в StringGrid`е, Горит... 
:(
    Опции темы
Гость_AlexZ
  Дата 20.3.2004, 23:20 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Во время работы с StringGrid`ом, нужно выбраный столбец с данными виделить цветом.
  Вверх
p0s0l
Дата 21.3.2004, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



Если надо сменить цвет текста, то делается примерно так (вешать на OnDrawCell):
Код

var HighlightCol : integer;
...
procedure TForm1.sg1DrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
begin
 with sg1 do
 begin
   if ACol = HighlightCol then Canvas.Font.Color := clRed
     else Canvas.Font.Color := Font.Color; // или else exit;
   Canvas.TextRect(Rect, Rect.Left+2, Rect.Top+2, Cells[ACol, ARow]);
 end;
end;

sg1 - TStringGrid;
sg1.DefaultDrawing := true должно быть (вначале рисуется ячейка полностью по дефолту, а потом поверх нарисованного рисуется текст другим цветом).
В переменной HighlightCol хранится № подсвечиваемого столбца. Если ты меняешь эту переменную, то после этого делай sg1.Repaint или sg1.Refresh, чтобы обновить окошко.

Если же тебе надо подсветку делать сменой цвета фона ячеек, то тут сложнее будет: DefaultDrawing := false, и в OnDrawCell отрисовывать ячейку полностью вручную - фон, учитываеть фокус, выделение, писать текст...



--------------------
С уважением, г-н Посол.
PM   Вверх
<Spawn>
Дата 21.3.2004, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



По моему он хочет при клике на "шапку" столбца выделить его весь. Решил проверить как это можно сделать, но до конца не довел(есть одна ошибочка), т.к. нет ща времени. Вот код:

Код
type
 TSelInfo = record
   Selected: Boolean;
   SelCol: integer;
 end;

var
 Form1: TForm1;
 SelInfo: TSelInfo = (Selected:False; SelCol: 0);

implementation

{$R *.dfm}

procedure TForm1.StringGrid1MouseDown(Sender: TObject;
 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
 ClickCoord: TGridCoord;
begin
 ClickCoord := StringGrid1.MouseCoord(X, Y);
 if ClickCoord.Y < StringGrid1.FixedCols then
 begin
   SelInfo.Selected := True;
   SelInfo.SelCol := ClickCoord.X;
 end
 else
   SelInfo.Selected := False;
 StringGrid1.Invalidate;
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
var
 OldColor: TColor;
begin
 if SelInfo.Selected and (SelInfo.SelCol = ACol)
    and (ARow > StringGrid1.FixedRows - 1)
    and (ACol > StringGrid1.FixedCols - 1) then
 begin
   StringGrid1.DefaultDrawing := False;
   try
     OldColor := StringGrid1.Brush.Color;
     StringGrid1.Brush.Color := clRed;
     FillRect(StringGrid1.Canvas.Handle, Rect, StringGrid1.Brush.Handle);
   finally
     StringGrid1.Brush.Color := OldColor;
   end;
 end
 else
   StringGrid1.DefaultDrawing := True;
end;



--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Гость_AlexZ
Дата 21.3.2004, 17:25 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Огромное спасибо всем за наводку! thumbs-up.gif
Это как раз то, что мне нужно ((почти)).
Но хотелось-бы выделить весь столбец/столбцы цветом, так, чтобы текст в ячейке отображался.
Заранее благодарен! adv/jump.gif
  Вверх
p0s0l
Дата 21.3.2004, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



Я бы исправил код Spawn'а так:
Код
var
 SelCol : integer = -1;

procedure TForm1.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
var
ClickCoord: TGridCoord;
begin
ClickCoord := StringGrid1.MouseCoord(X, Y);
if ClickCoord.Y < StringGrid1.FixedCols then
begin
  SelCol := ClickCoord.X;
end
else
  SelCol := -1;
StringGrid1.Invalidate;
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
var
 OldColor: TColor;
begin
 if not (gdFixed in State) and (ACol = SelCol) then
 with StringGrid1 do
 begin
  Canvas.Brush.Color := clRed;
  Canvas.TextRect(Rect, Rect.Left+2, Rect.Top + 2, Cells[ACol, ARow]);
 end;
end;



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

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

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

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

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


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

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


 




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


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

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