Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.03.18;
Скачать: CL | DM;

Вниз

Изменение цвета текущей строки DBGrid a   Найти похожие ветки 

 
Tex   (2006-12-18 09:21) [0]

Здравствуйте! В гриде RawSelect = False, AlwaysShowSelecton = True. По определенным причинам, могу использовать только RawSelect = false, но необходимо какое-то выделение текущей строки. Хотелось бы перекрашивать текущую строку в какой-то определенный цвет. Подскажите пожалуйста, как это реализовать. Если можно с кодом, заранее благодарен.


 
Sergey13 ©   (2006-12-18 09:41) [1]

> [0] Tex   (18.12.06 09:21)

Сходи на сайт Королевство Делфи. Там была статья "Полосатый грид".


 
ЮЮ ©   (2006-12-18 09:41) [2]

В OnDrawCell сравнивать TStringGrid(Row).Row и ARow, переданное в качестве парметра.


 
ЮЮ ©   (2006-12-18 09:41) [3]

TStringGrid(Sender).Row конечно


 
Tex   (2006-12-18 09:51) [4]

Читал статью в королевстве, но не разобрался :(  Можно маленький примерчик, просто как изменить цвет какой-либо ячейки. Дальше я разберусь со строкой. Если не затруднит, конечно :)


 
ЮЮ ©   (2006-12-18 10:08) [5]

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
var
 cl: TColor;
begin
 if StringGrid1.Row = ARow then
   cl := clYellow
 else
   cl := StringGrid1.Color;
 StringGrid1.Canvas.Brush.Color := cl;
 StringGrid1.Canvas.FillRect(Rect);
 DrawText(
   StringGrid1.Canvas.Handle,
   PChar(StringGrid1.Cells[ACol, ARow]),
   Length(StringGrid1.Cells[ACol, ARow]),
   Rect,
   0
 );

end;

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
 ARow: Integer; var CanSelect: Boolean);
begin
  StringGrid1.Invalidate;
 // иначе не перекрасится покинутая и новая строка,
 // а только покинутая и новая ячейки

end;


 
ЮЮ ©   (2006-12-18 10:10) [6]

Сорри, ото для SтринGrid-a


 
Tex   (2006-12-18 10:20) [7]

Спасибо за отзыв! Только вот не нашел в DBGride моем OnDrawCell :(
Есть OnDrawDataCell и OnDrawColumnCell...

procedure TForm1.DBGridUridDrawColumnCell(Sender: TObject;
 const Rect: TRect; DataCol: Integer; Column: TColumn;
 State: TGridDrawState);


и

procedure TForm1.DBGridUridDrawDataCell(Sender: TObject; const Rect: TRect;
 Field: TField; State: TGridDrawState);


Может их и не надо использовать. Помогите разобраться, пожалуйста...


 
Tex   (2006-12-18 10:21) [8]

дада! для DBGrid если не затруднит )


 
ЮЮ ©   (2006-12-18 10:29) [9]

У DBGridEh есть dghRowHighLight OptionsEh для этих целей.


 
Плохиш ©   (2006-12-18 10:53) [10]


> Tex   (18.12.06 10:20) [7]

А чем пример из справки не устраивает?


 
Tex   (2006-12-18 10:57) [11]

EhLib - shareware компонент. Хотелось бы своими руками. Помогите плиз!


 
Tex   (2006-12-18 11:07) [12]


> Плохиш ©   (18.12.06 10:53) [10]


Не подскажете точнее? Не могу найти ((


 
Плохиш ©   (2006-12-18 11:14) [13]


> Tex   (18.12.06 11:07) [12]


OnDrawDataCell (Ereignis von TCustomDBGrid)

TCustomDBGrid Siehe auch Delphi-Beispiel C++ Beispiel


 
ЮЮ ©   (2006-12-18 11:23) [14]

dghRowHighLight OptionsEh прпробовал?


 
Tex   (2006-12-18 11:30) [15]


> ЮЮ ©   (18.12.06 11:23) [14]
> dghRowHighLight OptionsEh прпробовал?


это же DBGridEh... нужно на обычном гриде...


> Плохиш ©   (18.12.06 11:14) [13]


по OnDrawDataCell в справке нет примера...


 
ЮЮ ©   (2006-12-18 11:49) [16]

procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
 Field: TField; State: TGridDrawState);
var
 cl: TColor;
begin
 if Field.DataSet.Fields[0].AsInteger = Field.DataSet.tag then begin
   if TDBGrid(Sender).SelectedField = Field then
     cl := clRed
   else
     cl := clYellow;
 end
 else
   cl := TDBGrid(Sender).Color;

 TDBGrid(Sender).Canvas.Brush.Color := cl;
 TDBGrid(Sender).Canvas.FillRect(Rect);
 TDBGrid(Sender).DefaultDrawDataCell(Rect, Field, State);

end;

procedure TForm1.Query1AfterScroll(DataSet: TDataSet);
begin
 DataSet.Tag := DataSet.Fields[0].AsInteger;
 // запоним значение ключевого поля текущей записи
end;


 
MsGuns ©   (2006-12-18 11:51) [17]

В списке параметров обработчика есть State и Column - в зависимости от их значений присваиается нужный цвет фона и фонта ТЕКУЩЕЙ ячейки, а прорисовывается методом DefaultDrawColumnCell.
На этом компе нет проектов поэтому код привести не могу, но, как правильно тут было сказано, на Королевстве естиь венликолепная статья с примерами - возьмите ее в качестве учебного пособия


 
ЮЮ ©   (2006-12-18 11:59) [18]


> MsGuns ©   (18.12.06 11:51) [17]

1) Только один Column имеет gdSelected, а красить нужно всю строку.
2) в DrawDataCell "текущей" записью DataSet-а является именно рисуемая, а не настоящая текущая.


 
Anatoly Podgoretsky ©   (2006-12-18 12:42) [19]

> Tex  (18.12.2006 9:51:04)  [4]

Зачем еще какие то примеры, когда там самые подробные, если те не понял и примеры из справки, то давать еще какие то нет смысла.


 
Павел Калугин ©   (2006-12-18 12:45) [20]

Изложенно с примерами, разобраны фрагменты кода.
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=168
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=170
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1193


 
Плохиш ©   (2006-12-18 13:30) [21]


> Tex   (18.12.06 11:30) [15]


...
 type
   TDummyGrid = class(TDBGrid)
   end;
...
procedure TfrmMain.DBGrid1DrawColumnCell(Sender: TObject;
 const Rect: TRect; DataCol: Integer; Column: TColumn;
 State: TGridDrawState);
begin
 with TDummyGrid(Sender) do
 begin
   if (DataLink.ActiveRecord = Row-1) and not (gdFocused in State) then
   begin
     Canvas.Brush.Color := clYellow;
     Canvas.Font.Color := Font.Color;
   end;
   DefaultDrawColumnCell(Rect, DataCol, Column, State);
 end;
end;


 
MsGuns ©   (2006-12-18 14:23) [22]

>ЮЮ ©   (18.12.06 11:59) [18]
>1) Только один Column имеет gdSelected, а красить нужно всю строку.
>2) в DrawDataCell "текущей" записью DataSet-а является именно рисуемая, а не настоящая текущая.

А в чем [17] противоречит обоим пунктам ?


 
ЮЮ ©   (2006-12-19 02:53) [23]

Тем только, что [17] никак не поможет решить subj-евую проблему. Причем из-за причин в [18].


 
evvcom ©   (2006-12-19 08:34) [24]

> [13] Плохиш ©   (18.12.06 11:14)

Ух, ты! Где это немецкий хелп раздобыл? :)


 
Плохиш ©   (2006-12-19 11:20) [25]


> evvcom ©   (19.12.06 08:34) [24]
> > [13] Плохиш ©   (18.12.06 11:14)
>
> Ух, ты! Где это немецкий хелп раздобыл?

В делфи ;-)


 
MsGuns ©   (2006-12-19 11:49) [26]

>ЮЮ ©   (19.12.06 02:53) [23]
>Тем только, что [17] никак не поможет решить subj-евую проблему. Причем из-за причин в [18].

???


 
ЮЮ ©   (2006-12-19 12:17) [27]


> MsGuns ©   (19.12.06 11:49) [26]

???

Ну конкретно, что из того что ты отписал в [17] поможет разукрасить все ячейки текущей записи?


 
MsGuns ©   (2006-12-19 15:19) [28]

>ЮЮ ©   (19.12.06 12:17) [27]
>Ну конкретно, что из того что ты отписал в [17] поможет разукрасить все ячейки текущей записи?

dgSelected in State, Column по боку


 
Плохиш ©   (2006-12-19 15:36) [29]


> MsGuns ©   (19.12.06 15:19) [28]

При отключённых RowSelect и MultiSelect, будет закрашиваться только текущая выделенная ячейка.


 
MsGuns ©   (2006-12-19 17:04) [30]

>Плохиш ©   (19.12.06 15:36) [29]
>При отключённых RowSelect и MultiSelect, будет закрашиваться только текущая выделенная ячейка.

Точно ;)


 
Tex   (2006-12-21 08:37) [31]

Товарищи Мастера!
Благодарю за помощь (осбенно тов. Плохиша), со всем разобрался, все работает!
Всем огромное спасибо!!!


 
Tex   (2006-12-21 09:06) [32]

Еще один вопросик )) Код из [21] замечательно работает, текущая строка подсвечивается. При щелчке мышкой по какой-либо ячейке происходит также, помимо выделения строки заданным цветом, стандартное выделение этой ячейки. Но, например, при сортировке сандартное выделение не видно - видна только подсвеченная строка. Подкажите как с этим справиться, нужно чтобы при любых действиях была видна также и текущая ячека.


 
ЮЮ ©   (2006-12-21 09:12) [33]

возможно у грида не включено dgAlwaysShowSelection и при потере фокуса ячейка по умолчанию никак не выделяется цветом


 
Tex   (2006-12-21 09:16) [34]

включено, проверил


 
ЮЮ ©   (2006-12-21 09:52) [35]

вместо
not (gdFocused in State)
поставь
not (gdSelected in State)


 
Tex   (2006-12-21 10:13) [36]

Ура!
Вот теперь, наконец-то, все работает отлично ))
Надеюсь эта ветка будет полезна людям!

Благодарю за помощь и внимание!



Страницы: 1 вся ветка

Текущий архив: 2007.03.18;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.054 c
2-1172510704
ezorcist
2007-02-26 20:25
2007.03.18
Незавершающееся консольное приложение.


15-1172051251
GARPbI4
2007-02-21 12:47
2007.03.18
Сколько могут стоить услуги програмеров на асемблере? (нужна пом)


15-1172114951
Slider007
2007-02-22 06:29
2007.03.18
С днем рождения ! 22 февраля


3-1166612920
KIR
2006-12-20 14:08
2007.03.18
Перенести данные из XL в InterBase


15-1171935130
koha
2007-02-20 04:32
2007.03.18
Нужен ли глухонемым сотовый телефон?