Форум: "Базы";
Текущий архив: 2013.07.21;
Скачать: [xml.tar.bz2];
ВнизВыделение строки в гриде цветов Найти похожие ветки
← →
yurikon (2010-10-13 15:28) [0]Добрый день!
Простая вроде задача - выделить строку активной записи цветом. Делаю так в событии перерисовки ячейки:
if Table1.RecNo = Grid1.Row then
begin
grdQoutes.Canvas.Brush.Color := clNavy;
grdQoutes.Canvas.Font.Color := clYellow ;
grdQoutes.DefaultDrawColumnCell(Rect,datacol, column,State);
Exit;
end;
Grid1.DefaultDrawColumnCell(Rect,datacol, column,State);
Работает ... если все записи вмещаются сразу в гриде и начинает сбиваться, если проматываешь грид.
Подскажите плиз, как правильно задать условие, чтобы отловить текущую запись?
С уважением.
← →
Медвежонок Пятачок © (2010-10-13 16:24) [1]ячейки отрисовываются не только тогда, когда текущей является строка датасета, которой эти ячейки соответствуют.
поэтому твой код неверный
← →
Плохиш © (2010-10-13 16:25) [2]статья "разноцветный грид"
← →
Медвежонок Пятачок © (2010-10-13 16:27) [3]смотреть надо не на рекно, а на параметры обработчика рисования. они тебе не просто так даны.
← →
yurikon (2010-10-13 16:58) [4]
> Медвежонок Пятачок © (13.10.10 16:24) [1]
Последняя строчка отрисовывает все остальные строки.
(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumnEh; State: TGridDrawState);
Который из этих параметров поможет?
PS
Статью про грид смотрел, раскрасить в зависимости от содержимого - ноу проблем. А вот подсветить просто текущую ... Использовать встроенную подстветку в DBGridEh не хочу - цвет не тот.
С уважением.
← →
Германн © (2010-10-13 23:54) [5]
> Который из этих параметров поможет?
> State
← →
Германн © (2010-10-14 04:25) [6]
> Германн © (13.10.10 23:54) [5]
Наверно я не прав.
← →
Медвежонок Пятачок © (2010-10-14 13:37) [7]Последняя строчка отрисовывает все остальные строки.
Мда.
Кто бы мог подумать, что она такая трудолюбивая и заботливая.
← →
Медвежонок Пятачок © (2010-10-14 13:58) [8]если нот фокусед внутри стэйт тогда дефолтдросолумнцелл
иначе сначала филрект нужным цветом затем текст ячейки поверх.
предварительно выключив дефолтдровинг у грида
← →
yurikon (2010-10-14 15:46) [9]Добрый день!
Если использовать gdFocused или gdSelected, то выделяется только (!) ячейка, а мне нужно выделить всю строку.
Как из передаваемых параметров определить в какой строке перерисовываемая ячейка?
С уважением.
← →
Медвежонок Пятачок © (2010-10-14 16:07) [10]а вся строка выделяется когда в гриде включена сам угадай какая опция.
← →
yurikon (2010-10-14 17:01) [11]
> PS
Использовать
> встроенную подстветку в DBGridEh не хочу - цвет не тот.
>
Уже угадал, Вы пропустили... Но вопрос остался.
← →
Медвежонок Пятачок © (2010-10-14 17:32) [12]Вопрос давно решен.
Следуй инструкциям выше и получишь грид с желтой шпалой по всей ширине.
← →
TohaNik © (2010-10-14 18:45) [13]Не кошерно!
Надо, что б определялся текущий цвет ногтей у главбуха, и никоим образом не менялся до смены настроения у её же.
← →
Кайрат (2010-11-30 09:44) [14]TColorGrid = class
private
// Цвет строки
FRowColor : TColor;
protected
// Функция чтения
function GetRowColor : TColor;
// Процедура записи
procedure SetRowColor(const Value : TColor);
public
// Начальные значения
constructor Create;
destructor Destroy; override;
// Визуализация сетки
procedure ColorDBGrid(const dgr : TDBGrid; Rect :TRect; Field : TField; State : TGridDrawState); overload;
// Свойство для установки цвета строки в сетке.
property RowColor : TColor read GetRowColor write SetRowColor;
end;
...
var
ColorGrid : TColorGrid;
implementation
...
procedure TColorGrid.ColorDBGrid(const dgr: TDBGrid; Rect: TRect;
Field: TField; State: TGridDrawState);
begin
try
if not Odd(dgr.DataSource.DataSet.RecNo) then
if (gdSelected in State) or (gdFocused in State) then
begin
dgr.Canvas.Brush.Color := clHighlight;
dgr.Canvas.Font.Color := clWhite;
end
else
begin
dgr.Canvas.Brush.Color := FRowColor;
dgr.Canvas.Font.Color := clBlack;
end;
dgr.Canvas.FillRect(Rect);
dgr.Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, Field.AsString);
finally
{ Nothing }
end;
end;
constructor TColorGrid.Create;
begin
inherited;
FRowColor := $00F7D3C6; // Здесь можете указать любой цвет
end;
destructor TColorGrid.Destroy;
begin
inherited;
end;
function TColorGrid.GetRowColor: TColor;
begin
Result := FRowColor;
end;
procedure TColorGrid.SetRowColor(const Value: TColor);
begin
if FRowColor = Value then
Exit;
FRowColor := Value;
end;
// =====================================================
// Пришем обработчик DBGrid1DrawDataCell для грида
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject;
const Rect: TRect; Field: TField; State: TGridDrawState);
begin
ColorGrid.ColorDBGrid(TDBGrid(Sender), Rect, Field, State);
end;
// =====================================================
// Изменять цвет можно примерно так
procedure TFormq.btChangeRowColorClick(Sender: TObject);
var
i : Integer;
begin
if ColorDialog1.Execute then
begin
if ColorDialog1.Color = ColorGrid.RowColor then
Exit;
ColorGrid.RowColor := ColorDialog1.Color;
for i := 0 to ComponentCount - 1 do
if Components[i] is TDBGrid then
(Components[i] as TDBGrid).Repaint;
end;
end;
← →
Ega23 © (2010-11-30 10:25) [15]
dgr.DataSource.DataSet.RecNo
Далеко не всегда сработает. Не стоит на это свойство закладываться.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2013.07.21;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.002 c