Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2007.03.18;
Скачать: [xml.tar.bz2];

Вниз

Изменение цвета текущей строки 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.53 MB
Время: 0.042 c
2-1172043399
dimas#
2007-02-21 10:36
2007.03.18
MDI форма


2-1172162880
lowkey
2007-02-22 19:48
2007.03.18
ShowWindow


2-1172082442
Novichok_New
2007-02-21 21:27
2007.03.18
Свой "Планировщик задач"


2-1172154352
Lonix
2007-02-22 17:25
2007.03.18
Button


2-1172543287
dreamse
2007-02-27 05:28
2007.03.18
Правельное выполнение метода Free





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский