![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
DBGridEh отрисовка сетки
DelphiLexx © (2007-05-18 11:48:00)В DBGridEh у меня вертикальные линни сетки рисуются вручную. Отрисовка производится в OnDrawColumnCell. Когда я начинаю редактировать ячейку, OnDrawColumnCell Не вызывается и как следствие этого я получаю то, что левая линия ячейки не отрисовывается. Как это избежать.
Плохиш (2007-05-22 13:03:00) [1]
> DelphiLexx © (22.05.07 13:01) [22]
Это копия твоего кода с указанием того, где ты изволишь рисовать за пределами области. Что-то мне подсказывает, что ветку можно закрывать, т.к. она бессмысленна...
DelphiLexx (2007-05-22 13:03:00) [2]
> Обычно различают является ли рисуемая ячека текущей или
> нет.
Даже если я напишу вот так, все равно правая вертикальная линия последней ячейки не рисуется.
if (Column.FieldName = Columns[Columns.Count - 1].FieldName) then
begin
Pen.Color := clRed;
MoveTo(Rect.Right + 1, Rect.Top);
LineTo(Rect.Right + 1, Rect.Bottom);
end;
DelphiLexx (2007-05-22 13:01:00) [3]
> > MoveTo(Rect.Right + 1, Rect.Top);
> > LineTo(Rect.Right + 1, Rect.Bottom);
Твой код полный аналог моего
Плохиш (2007-05-22 11:39:00) [4]
> MoveTo( ARect.Left-1, ARect.Top);
> LineTo(ARect.Left-1, ARect.Bottom);
> MoveTo( Rect.Right + 1, Rect.Top);
> LineTo(Rect.Right + 1, Rect.Bottom);
Прикольно, рисуют где не попадя, а потом удивляются, что перекрывается, да затирается...
PS. Вместо того, чтобы думалку с логикой включать, бегают по форумам без пользы, т.к. ответов всё-равно не понимают...
ЮЮ (2007-05-22 11:28:00) [5]> and
> (TDBGridEh(Sender).EditorMode)
А это зачем? Редактируемая ячейка разве не закрыта окном редактора? Зачем её вообще рисовать, когда EditorMode? Зачем вообше различать EditorMode? Обычно различают является ли рисуемая ячека текущей или нет.
DelphiLexx (2007-05-22 11:21:00) [6]
> В самой правой колонке рисовать правее Rect-а
Пишу вот такой код и все равно не помагает.
if (Column.FieldName = Columns[Columns.Count - 1].FieldName) and
(TDBGridEh(Sender).EditorMode)
then
begin
Pen.Color := clRed;
MoveTo(Rect.Right + 1, Rect.Top);
LineTo(Rect.Right + 1, Rect.Bottom);
end;
ЮЮ (2007-05-22 03:36:00) [7]> Приведеннуя ранее ситуацию исправить удалось, теперь проблема
> всего лишь в последней колонке т.е. когда я нахожусь в режиме
> редактирования в ячейке последней колонке то правая линия
> не отрисовывается. Как быть?
В самой правой колонке рисовать правее Rect-а
{RASkov} (2007-05-22 00:49:00) [8]> [16] DelphiLexx © (21.05.07 20:48)
> Как быть?
> у меня вертикальные линни сетки рисуются вручную.
Разреши самому гриду этим заниматься, так как он линии рисует не в ректах, а между ними...
DelphiLexx (2007-05-21 20:48:00) [9]Приведеннуя ранее ситуацию исправить удалось, теперь проблема всего лишь в последней колонке т.е. когда я нахожусь в режиме редактирования в ячейке последней колонке то правая линия не отрисовывается. Как быть?
DelphiLexx (2007-05-21 20:48:00) [10]
> когда ячейка в режиме редактирования, то это уже не часть
> грида, а отдельный редактор, который отоброжается в области
> Rect поверх грида.
Как же, тогда гриду удается нарисовать вертикальную линию когда ячейка редактируется, ты можешь сказать что это происходит за счет рисования вертикальных линий 2-х соседних ячеек, тогда как быть с последней ячейкой в которой происходит редактирования у неё же нет соседней ячейки
{RASkov} (2007-05-21 19:45:00) [11]> [10] DelphiLexx © (21.05.07 17:39)
когда ячейка в режиме редактирования, то это уже не часть грида, а отдельный редактор, который отоброжается в области Rect поверх грида.
{RASkov} (2007-05-21 19:35:00) [12]> сейчас находится ячейка.
Тьфу.... [11,12] целиком для Grid'a...
{RASkov} (2007-05-21 19:33:00) [13]Т.е. DBGrid.EditorMode..... (TCustomGrid).EditorMode
Правда фик знает как там с DBGridEh...
{RASkov} (2007-05-21 19:28:00) [14]> [10] DelphiLexx © (21.05.07 17:39)
> Как узнать в каком состоянии(в режиме редактирования или
> нет) сейчас находится ячейка
StringGrid.EditorMode
DelphiLexx (2007-05-21 17:39:00) [15]
> О чем тебе и говорят: не лезь за пределы ARect-а.
Как узнать в каком состоянии(в режиме редактирования или нет) сейчас находится ячейка.
ЮЮ (2007-05-21 10:29:00) [16]> ARect.Left-1
О чем тебе и говорят: не лезь за пределы ARect-а.
З.Ы. Левую линию следует рисовать только в самой левой ячейке, да и то это лишнее, ибо слева ячейка ограничена линиями самого грида.
DelphiLexx (2007-05-18 15:22:00) [17]
> Значит ты правую линию рисуешь в "чужой" ячейке. (в соседней)
> шутка) покажи свой метод OnDrawColumnCell... подправим.
В OnDrawColumnCell вызывется вот такая процедура:
with ADBGrid.Canvas do
begin
MoveTo(ARect.Left-1, ARect.Top);
LineTo(ARect.Left-1, ARect.Bottom);
MoveTo(ARect.Right, ARect.Top);
LineTo(ARect.Right, ARect.Bottom);
end;
{RASkov} (2007-05-18 13:57:00) [18]> [6] clickmaker © (18.05.07 13:51)
Понятно, т.е. [4] пост был - нафик код сюда не нужен. Согласен. :)
clickmaker (2007-05-18 13:51:00) [19]
> [5] {RASkov} © (18.05.07 13:47)
а какие варианты? если линия не видна, ее надо подвинуть
{RASkov} (2007-05-18 13:47:00) [20]> [4] clickmaker © (18.05.07 13:44)
:) ? вот не понял поста.... чесно. Сорри.