stringgrid - onDrawCell & Row
1 отговора
0 прегледа
stringgrid - onDrawCell & Row
Привет,
ето какво се опитвам да направя и какви проблеми срещам:
Цел 1:
Искам да оцветявам клетките от реда с номер <grid.Row> в някакъв цвят.
Не искам да ползвам стандартното [goRowSelect] property - просто искам да изглежда, че реда е селектиран целия.
Така че ползвам OnDrawCell event-a за да си рисувам клетките както искам...
правя нещо такова в eventhandlera:
.....
if (ARow = grid.Row) then
begin
grid.canvas.brush.color := clInfoBk;
grid.canvas.FillRect(rect);
end;
.....
Проблем:
Когато селектирам друга клетка явно OnDrawCell се извиква само за досегашната селектирана и за новата селектирана - резултата е, че от досегашния селектиран ред само клетката, която е била селектирана се променя (рисува се с "нормален" цвят) и от новоизбрания ред само новата селектирана клетка се рисува в "селектиран" цвят... и става шарения в грида.
като кликна пак върху същата клетка и нещата се оправят.
Имам чувството, че някак си ondrawcell event-a "изостава" с едно селектиране
Цел 2:
Искам да "синхронизирам" 2 стринггрида.
т.е. като селектирам ред от единия да се селектира същия ред от другия (и в двете посоки).
Отново не искам да ползвам RowSelect property-то и си ги рисувам както искам.
опитвам се да използвам onselectcell() или както се казваше тоя event:
....
grid2.Row := grid1.Row;
....
Проблем:
Селектирането във втория грид пак "изостава" с един ход
Някакви идеи ?
ето какво се опитвам да направя и какви проблеми срещам:
Цел 1:
Искам да оцветявам клетките от реда с номер <grid.Row> в някакъв цвят.
Не искам да ползвам стандартното [goRowSelect] property - просто искам да изглежда, че реда е селектиран целия.
Така че ползвам OnDrawCell event-a за да си рисувам клетките както искам...
правя нещо такова в eventhandlera:
.....
if (ARow = grid.Row) then
begin
grid.canvas.brush.color := clInfoBk;
grid.canvas.FillRect(rect);
end;
.....
Проблем:
Когато селектирам друга клетка явно OnDrawCell се извиква само за досегашната селектирана и за новата селектирана - резултата е, че от досегашния селектиран ред само клетката, която е била селектирана се променя (рисува се с "нормален" цвят) и от новоизбрания ред само новата селектирана клетка се рисува в "селектиран" цвят... и става шарения в грида.
като кликна пак върху същата клетка и нещата се оправят.
Имам чувството, че някак си ondrawcell event-a "изостава" с едно селектиране
Цел 2:
Искам да "синхронизирам" 2 стринггрида.
т.е. като селектирам ред от единия да се селектира същия ред от другия (и в двете посоки).
Отново не искам да ползвам RowSelect property-то и си ги рисувам както искам.
опитвам се да използвам onselectcell() или както се казваше тоя event:
....
grid2.Row := grid1.Row;
....
Проблем:
Селектирането във втория грид пак "изостава" с един ход
Някакви идеи ?
Re: stringgrid - onDrawCell & Row
За първия въпрос : ето един пример как аз боядисвам целия ред :
type
TCustomDBGridCracker = class(TCustomDBGrid);
.........
with TCustomDBGridCracker(Sender) do begin
if not DM.adsSearch.FieldByName( 'Blocked' ).IsNull then
Canvas.Brush.Color := clRed
else
if ChechedProblems( DM.adsSearch.FieldByName( 'ID' ).AsInteger ) then
Canvas.Brush.Color := GetColor( DM.adsSearch.FieldByName( 'ID' ).AsInteger )
else
Canvas.Brush.Color := clWhite;
DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
if gdFocused in State then
with (Sender as TDBGrid).Canvas do
begin
Brush.Color := clNavy;
FillRect(Rect);
dbgSearch.Canvas.Font.Color := clHighlightText;
dbgSearch.Canvas.Font.Color := clYellow;
end;
// draw the standard text
dbgSearch.Canvas.TextRect (Rect, Rect.Left, Rect.Top, Column.Field.AsString);
това е за TDBGrid смятам лестно ще си го нагодиш като за себе си
type
TCustomDBGridCracker = class(TCustomDBGrid);
.........
with TCustomDBGridCracker(Sender) do begin
if not DM.adsSearch.FieldByName( 'Blocked' ).IsNull then
Canvas.Brush.Color := clRed
else
if ChechedProblems( DM.adsSearch.FieldByName( 'ID' ).AsInteger ) then
Canvas.Brush.Color := GetColor( DM.adsSearch.FieldByName( 'ID' ).AsInteger )
else
Canvas.Brush.Color := clWhite;
DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
if gdFocused in State then
with (Sender as TDBGrid).Canvas do
begin
Brush.Color := clNavy;
FillRect(Rect);
dbgSearch.Canvas.Font.Color := clHighlightText;
dbgSearch.Canvas.Font.Color := clYellow;
end;
// draw the standard text
dbgSearch.Canvas.TextRect (Rect, Rect.Left, Rect.Top, Column.Field.AsString);
това е за TDBGrid смятам лестно ще си го нагодиш като за себе си