Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.09.2009, 11:28   #1
Consol
Пользователь
 
Регистрация: 19.08.2009
Сообщений: 89
По умолчанию полосатый dbgrid

пользовался поиском но что то не нашел то что мне нужно
дело в том что я сделал полосатый dbgrid, то есть строки через одну сделал определенного цвета, но вот в чем проблема, цвет не сохраняется, то есть если начинать просматривать записи то цветные строки прыгают и та строка которая не была закрашена становится закрашенной почему так происходит, и как можно от этого избавиться
Consol вне форума Ответить с цитированием
Старый 03.09.2009, 11:51   #2
Vit@L
Форумчанин
 
Аватар для Vit@L
 
Регистрация: 24.06.2009
Сообщений: 216
По умолчанию

Не совсем понял вопрос. В чем конкретно проблема?
Водку мы пьем для запаха - а дури нам своей хватает!
Vit@L вне форума Ответить с цитированием
Старый 03.09.2009, 11:55   #3
Consol
Пользователь
 
Регистрация: 19.08.2009
Сообщений: 89
По умолчанию

ну то есть если у меня 3 записи то закрашивается 1 и 3 , но если щелкнуть по какому-нибудь полю то уже закрашены получается 1 и 2 строка или 2 и 3, или просто 2 . проблема в том что цвета прыгают, то есть закрашивают при клике на поле постоянно что то а не остаются так же как при загрузки программы
Consol вне форума Ответить с цитированием
Старый 03.09.2009, 12:01   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код в студию.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.09.2009, 12:03   #5
Consol
Пользователь
 
Регистрация: 19.08.2009
Сообщений: 89
По умолчанию

Код:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
  var s:string;

begin
 s:= Column.Field.DataSet.FieldByName('id_visitings').AsString;
  if flag=false then
  begin
   str:=s;
   str2:=s;
   flag:=true;
  end;

 if (s <> str2) and (str <> s) and (str <> str2)then

  begin

   str2:=str;
   str:=s;

  end;

if (str<>s)then

 begin
  str2:=s;
 end;


 if Column.Field.DataSet.FieldByName('id_visitings').AsString=str then
 Begin
			TDBGrid(Sender).Canvas.Brush.Color:=clGreen;
			TDBGrid(Sender).Canvas.Font.Color:=clWhite;
		End;
TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);

	end;
Consol вне форума Ответить с цитированием
Старый 03.09.2009, 12:07   #6
Vit@L
Форумчанин
 
Аватар для Vit@L
 
Регистрация: 24.06.2009
Сообщений: 216
По умолчанию

Код:
procedure TformColorGrid.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
Begin
	// Красим нечетные строки
	IF TDBGrid(Sender).DataSource.DataSet.RecNo mod 2 = 1
	Then TDBGrid(Sender).Canvas.Brush.Color:=RGB($CC,$CC,$99);

	// Восстанавливаем выделение текущей позиции курсора
	IF  gdSelected   IN State
	Then Begin
		TDBGrid(Sender).Canvas.Brush.Color:= clHighLight;
		TDBGrid(Sender).Canvas.Font.Color := clHighLightText;
	End;
	// Просим GRID перерисоваться самому
	TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
End;
Взято с http://www.delphikingdom.com

Лично я использовал когда-то этот код, у меня все нормально работало.

В вот сама статья: http://www.delphikingdom.com/asp/vie...?catalogid=168
Водку мы пьем для запаха - а дури нам своей хватает!
Vit@L вне форума Ответить с цитированием
Старый 03.09.2009, 12:08   #7
Consol
Пользователь
 
Регистрация: 19.08.2009
Сообщений: 89
По умолчанию

то есть я закрашиваю так сказать блоками, если у меня будет совпадать значения по которому у меня сортируется то она должны вместе закрашиваться или наоборот вместе не закрашиваться, то есть если у нас выводится
id_1 id_2 id_3
1___5____7{закрашивается}
1___6____8{закрашивается так как id_1 равен с предыдущим}
2___2____4
3___1____1{закрашивается}
3___3____5{закрашивается так как id_1 равен с предыдущим}
Consol вне форума Ответить с цитированием
Старый 03.09.2009, 12:10   #8
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

лучше всего код раскраски строк в студию
там либо нет в конце дефолтной отрисовки, либо не учтены выделяемые строки

апд
а кто такой флаг flag ?
чота не видно где он объявлен и инициализируется
и чота накручено там со строковыми переменными нехило

Последний раз редактировалось soleil@mmc; 03.09.2009 в 12:13.
soleil@mmc вне форума Ответить с цитированием
Старый 03.09.2009, 12:13   #9
Vit@L
Форумчанин
 
Аватар для Vit@L
 
Регистрация: 24.06.2009
Сообщений: 216
По умолчанию

Consol, я же привел вам пример выше.
Водку мы пьем для запаха - а дури нам своей хватает!
Vit@L вне форума Ответить с цитированием
Старый 03.09.2009, 12:24   #10
Consol
Пользователь
 
Регистрация: 19.08.2009
Сообщений: 89
По умолчанию

да код вы привели большое спасибо просто мне чуть не так надо мне надо что бы закрашивались или не закрашивались блоки у которых в определенном столбце совпадали значения
вот весь код
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, ADODB, Grids, DBGrids, StdCtrls;

type
  TForm1 = class(TForm)
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    ADOConnection1: TADOConnection;
    ADOTable1: TADOTable;
    Button1: TButton;
    procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
   str,str2:string;
   flag:boolean;
implementation

{$R *.dfm}

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
  var s:string;
begin
 s:= Column.Field.DataSet.FieldByName('id_visitings').AsString;
  if flag=false then
  begin
   str:=s;
   str2:=s;
   flag:=true;
  end;

 if (s <> str2) and (str <> s) and (str <> str2)then

  begin

   str2:=str;
   str:=s;

  end;

if (str<>s)then

 begin
  str2:=s;
 end;


 if Column.Field.DataSet.FieldByName('id_visitings').AsString=str then
 Begin
			TDBGrid(Sender).Canvas.Brush.Color:=clGreen;
			TDBGrid(Sender).Canvas.Font.Color:=clWhite;
		End;

 TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);

	end;



begin
  flag:=false;
end.
Consol вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перемещение даннах из dbgrid в dbgrid Hobbit_88 БД в Delphi 7 10.06.2009 13:33
перенос данных из DBGrid в DBGrid KingSize БД в Delphi 17 24.04.2009 09:30
как сделать полосатый листбокс? user_jasser Win Api 9 23.02.2009 14:19
DBGrid sergei64_89 БД в Delphi 0 09.05.2008 19:48