Форум: "Основная";
Текущий архив: 2007.07.29;
Скачать: [xml.tar.bz2];
ВнизDBGridEh отрисовка сетки Найти похожие ветки
← →
DelphiLexx © (2007-05-18 11:48) [0]В DBGridEh у меня вертикальные линни сетки рисуются вручную. Отрисовка производится в OnDrawColumnCell. Когда я начинаю редактировать ячейку, OnDrawColumnCell Не вызывается и как следствие этого я получаю то, что левая линия ячейки не отрисовывается. Как это избежать.
← →
ЮЮ © (2007-05-18 12:01) [1]>Когда я начинаю редактировать ячейку
В это время грид вообще перекрыт InplaceEdit-ом, чнго там рисовать? Или он перекрывает соседнюю ячейку?
"Левая линия" - дейстаительно левая. Как линия в 1 пиксель иожет бфть и левой и правой? Значит ты её, левую, и не рисуешь, а только правую, притом не очень точно, коль она затирается окном редактора.
З.Ы. А если над формой провести формочеой от другого приложения, грид как выглядит?
← →
DelphiLexx © (2007-05-18 12:55) [2]
> .Ы. А если над формой провести формочеой от другого приложения,
> грид как выглядит?
Да нормально выглядит, ничего не затирается.
← →
{RASkov} © (2007-05-18 13:43) [3]> у меня вертикальные линни сетки рисуются вручную
> что левая линия ячейки не отрисовывается.
Значит ты правую линию рисуешь в "чужой" ячейке. (в соседней) шутка) покажи свой метод OnDrawColumnCell... подправим.
← →
clickmaker © (2007-05-18 13:44) [4]
> покажи свой метод OnDrawColumnCell... подправим.
...на один-то пиксел назад - не тяжело
← →
{RASkov} © (2007-05-18 13:47) [5]> [4] clickmaker © (18.05.07 13:44)
:) ? вот не понял поста.... чесно. Сорри.
← →
clickmaker © (2007-05-18 13:51) [6]
> [5] {RASkov} © (18.05.07 13:47)
а какие варианты? если линия не видна, ее надо подвинуть
← →
{RASkov} © (2007-05-18 13:57) [7]> [6] clickmaker © (18.05.07 13:51)
Понятно, т.е. [4] пост был - нафик код сюда не нужен. Согласен. :)
← →
DelphiLexx © (2007-05-18 15:22) [8]
> Значит ты правую линию рисуешь в "чужой" ячейке. (в соседней)
> шутка) покажи свой метод 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;
← →
ЮЮ © (2007-05-21 10:29) [9]> ARect.Left-1
О чем тебе и говорят: не лезь за пределы ARect-а.
З.Ы. Левую линию следует рисовать только в самой левой ячейке, да и то это лишнее, ибо слева ячейка ограничена линиями самого грида.
← →
DelphiLexx © (2007-05-21 17:39) [10]
> О чем тебе и говорят: не лезь за пределы ARect-а.
Как узнать в каком состоянии(в режиме редактирования или нет) сейчас находится ячейка.
← →
{RASkov} © (2007-05-21 19:28) [11]> [10] DelphiLexx © (21.05.07 17:39)
> Как узнать в каком состоянии(в режиме редактирования или
> нет) сейчас находится ячейка
StringGrid.EditorMode
← →
{RASkov} © (2007-05-21 19:33) [12]Т.е. DBGrid.EditorMode..... (TCustomGrid).EditorMode
Правда фик знает как там с DBGridEh...
← →
{RASkov} © (2007-05-21 19:35) [13]> сейчас находится ячейка.
Тьфу.... [11,12] целиком для Grid"a...
← →
{RASkov} © (2007-05-21 19:45) [14]> [10] DelphiLexx © (21.05.07 17:39)
когда ячейка в режиме редактирования, то это уже не часть грида, а отдельный редактор, который отоброжается в области Rect поверх грида.
← →
DelphiLexx © (2007-05-21 20:48) [15]
> когда ячейка в режиме редактирования, то это уже не часть
> грида, а отдельный редактор, который отоброжается в области
> Rect поверх грида.
Как же, тогда гриду удается нарисовать вертикальную линию когда ячейка редактируется, ты можешь сказать что это происходит за счет рисования вертикальных линий 2-х соседних ячеек, тогда как быть с последней ячейкой в которой происходит редактирования у неё же нет соседней ячейки
← →
DelphiLexx © (2007-05-21 20:48) [16]Приведеннуя ранее ситуацию исправить удалось, теперь проблема всего лишь в последней колонке т.е. когда я нахожусь в режиме редактирования в ячейке последней колонке то правая линия не отрисовывается. Как быть?
← →
{RASkov} © (2007-05-22 00:49) [17]> [16] DelphiLexx © (21.05.07 20:48)
> Как быть?
> у меня вертикальные линни сетки рисуются вручную.
Разреши самому гриду этим заниматься, так как он линии рисует не в ректах, а между ними...
← →
ЮЮ © (2007-05-22 03:36) [18]> Приведеннуя ранее ситуацию исправить удалось, теперь проблема
> всего лишь в последней колонке т.е. когда я нахожусь в режиме
> редактирования в ячейке последней колонке то правая линия
> не отрисовывается. Как быть?
В самой правой колонке рисовать правее Rect-а
← →
DelphiLexx © (2007-05-22 11:21) [19]
> В самой правой колонке рисовать правее 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 11:28) [20]> and
> (TDBGridEh(Sender).EditorMode)
А это зачем? Редактируемая ячейка разве не закрыта окном редактора? Зачем её вообще рисовать, когда EditorMode? Зачем вообше различать EditorMode? Обычно различают является ли рисуемая ячека текущей или нет.
← →
Плохиш © (2007-05-22 11:39) [21]
> 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. Вместо того, чтобы думалку с логикой включать, бегают по форумам без пользы, т.к. ответов всё-равно не понимают...
← →
DelphiLexx © (2007-05-22 13:01) [22]
> > MoveTo(Rect.Right + 1, Rect.Top);
> > LineTo(Rect.Right + 1, Rect.Bottom);
Твой код полный аналог моего
← →
DelphiLexx © (2007-05-22 13:03) [23]
> Обычно различают является ли рисуемая ячека текущей или
> нет.
Даже если я напишу вот так, все равно правая вертикальная линия последней ячейки не рисуется.
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;
← →
Плохиш © (2007-05-22 13:03) [24]
> DelphiLexx © (22.05.07 13:01) [22]
Это копия твоего кода с указанием того, где ты изволишь рисовать за пределами области. Что-то мне подсказывает, что ветку можно закрывать, т.к. она бессмысленна...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2007.07.29;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.043 c