Форум: "Базы";
Текущий архив: 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.04 c