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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2009, 21:08   #1
Хитрец
Пользователь
 
Регистрация: 26.01.2009
Сообщений: 48
По умолчанию Цвет полоски выделения DBGrid

Не совсем в этот форум наверно но думаю что тут больше всего сталкиваются с этим элементом.
Так вот... Как изменить цвет полоски выделения ячейки DBGrid`а?
То чето серый цвет меня угнетает.

И плюс ко всем кто нибуть занимался расчетом ширины колон при масштабировании окна может поделится опытом..?

Можно конечно взять ширину всего грида отнять скрол и разделить на количество колонок, но получается не очень когда все колонки одной ширины.

Последний раз редактировалось Хитрец; 18.04.2009 в 21:11.
Хитрец вне форума Ответить с цитированием
Старый 18.04.2009, 21:39   #2
koma_grusha
Редкий обитатель
Форумчанин
 
Аватар для koma_grusha
 
Регистрация: 08.04.2009
Сообщений: 170
По умолчанию

а у тебя нет компонентов DevExpress? у них очень удобный грид, которому можно задать любой стиль, в том числе цвет выделенной записи, и можно выбрать авонастройку ширины колонок по ширине грида (если это то что нужно).
но я на всяк случай покопаю в старых исходниках, посмотрю че там у обычного грида...
Мозг, хорошо устроенный, стоит больше, чем мозг, хорошо наполненный (Мишель Монтень)
koma_grusha вне форума Ответить с цитированием
Старый 18.04.2009, 21:44   #3
Хитрец
Пользователь
 
Регистрация: 26.01.2009
Сообщений: 48
По умолчанию

Не хотелось бы использовать не стандартные средства. Я знаю что и у DBGridEh все это есть.
Хитрец вне форума Ответить с цитированием
Старый 18.04.2009, 22:20   #4
Хитрец
Пользователь
 
Регистрация: 26.01.2009
Сообщений: 48
По умолчанию

Одинаковую ширину для колонок можно получить так:

procedure ResizeDBgrid();
var i, WidthDB, CountVisColums, ScrollBar, Indicator, ColumnsWidth:integer;
begin
//Обнуление ширины колонки
ColumnsWidth := 0;

//Ширина индикатора курсора
Indicator := 13;

//Ширина скрол бара
ScrollBar := 17;

//Общая ширина Грида
WidthDB := DBgrid1.Width;

//Получаем количество видимых колонок
CountVisColums := 0;
for I := 0 to DBgrid1.Columns.Count - 1 do
if DBGrid1.Columns.Items[i].Visible = true then inc(CountVisColums);

//Расчет ширины колонок
ColumnsWidth := (WidthDB - ScrollBar - Indicator)div(CountVisColums);

//Установка ширины колонок
for I := 0 to DBgrid1.Columns.Count - 1 do DBGrid1.Columns.Items[i].Width := ColumnsWidth;
end;
Хитрец вне форума Ответить с цитированием
Старый 18.04.2009, 22:56   #5
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Делаешь поле и в зависомости 1 или 0 раскарашиваешь его:
Код:
procedure TFInfoDobav.cyDBGrid1DrawDataCell(Sender: TObject;
  const Rect: TRect; Field: TField; State: TGridDrawState);
var
   holdColor: TColor;
begin
  holdColor := cyDBGrid1.Canvas.Brush.Color; {сохраняем оригинальный цвет}
  {"раскрашиваем" ячейки только для поля check}
    if Form1.ADOtablevrem.FieldByName('check').asinteger=1 then
    begin
//      cyDBGrid1.Canvas.Brush.Color := clGreen;
      cyDBGrid1.Canvas.Brush.Color := $fa9c78; {синеватый оттенок}
      cydbGrid1.DefaultDrawDataCell(Rect,Field,State);
      cyDBGrid1.Canvas.Brush.Color := holdColor;
    end;
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 18.04.2009, 23:50   #6
Хитрец
Пользователь
 
Регистрация: 26.01.2009
Сообщений: 48
По умолчанию

Цитата:
Сообщение от ArtInt Посмотреть сообщение
Делаешь поле и в зависомости 1 или 0 раскарашиваешь его:
Код:
procedure TFInfoDobav.cyDBGrid1DrawDataCell(Sender: TObject;
  const Rect: TRect; Field: TField; State: TGridDrawState);
var
   holdColor: TColor;
begin
  holdColor := cyDBGrid1.Canvas.Brush.Color; {сохраняем оригинальный цвет}
  {"раскрашиваем" ячейки только для поля check}
    if Form1.ADOtablevrem.FieldByName('check').asinteger=1 then
    begin
//      cyDBGrid1.Canvas.Brush.Color := clGreen;
      cyDBGrid1.Canvas.Brush.Color := $fa9c78; {синеватый оттенок}
      cydbGrid1.DefaultDrawDataCell(Rect,Field,State);
      cyDBGrid1.Canvas.Brush.Color := holdColor;
    end;
Нет вопрос был не в том как сделать полосатую таблицу.
Для раскраски таблицы создание дополнительного поля трата места, сил, и показывает плохой тон в написании программы. Что будет при составлении SQL запрос когда все 1 и 0 будут в разнобой???
Вопрос в том как сделать полоску выделения ячейки нужным цветом.
(Когда выделяешь мышкой ячейку она серая а мне нужно чтоб цвет был другой)
Хитрец вне форума Ответить с цитированием
Старый 19.04.2009, 00:20   #7
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Сначала не до конца понял твой вопрос, но для этих целей обычно пишу так:
Код:
Procedure TForm1.DBGrid1DrawDataCell(SEnder: TObject; Const Rect:
TRect;
Field: TField; State: TGridDrawState);
Begin
If gdFocused in State Then
with (SEnder as TDBGrid).Canvas do
Begin
Brush.Color := clRed;
FillRect(Rect);
TextOut(Rect.Left, Rect.Top, Field.Asstring);
End;
End;
Теперь, надеюсь претензий нет к коду или опять мной неправильно понят вопрос
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 19.04.2009, 01:16   #8
Хитрец
Пользователь
 
Регистрация: 26.01.2009
Сообщений: 48
По умолчанию

Чето не хватает! Кликаю по ДБГриду он в DBGrid1DrawDataCell не попадает...
Хитрец вне форума Ответить с цитированием
Старый 19.04.2009, 12:39   #9
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Необходимо установить свойство DefaultDrawing в True. Здесь перерисовывается только выделенная ячейка. Если установить DefaultDrawing в False, то вы должны самостоятельно перерисовать все ячейки аналогично примеру.
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 19.04.2009, 13:43   #10
Хитрец
Пользователь
 
Регистрация: 26.01.2009
Сообщений: 48
По умолчанию

Цитата:
Сообщение от ArtInt Посмотреть сообщение
Необходимо установить свойство DefaultDrawing в True. Здесь перерисовывается только выделенная ячейка. Если установить DefaultDrawing в False, то вы должны самостоятельно перерисовать все ячейки аналогично примеру.
DefaultDrawing стоит в True, но все равно не попадает в DBGrid1DrawDataCell.
Хитрец вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Manualdock без полоски с крестиком Deight Общие вопросы Delphi 3 02.01.2009 16:29
Произвольного выделения области рисунка MoR Мультимедиа в Delphi 3 02.08.2008 22:23
касательно выделения столбцов Volodymyr Microsoft Office Excel 2 20.07.2008 11:47