Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.07.29;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.015 c
11-1166415709
SecurAdmin
2006-12-18 07:21
2007.07.29
KOL+ перетаскивание формы за любую ее точку


11-1166438371
TAHKEP
2006-12-18 13:39
2007.07.29
Худшая скорость копирования файлов при использовании алт. System?


15-1183006920
John_Korsh
2007-06-28 09:02
2007.07.29
Вопрос по сетям.


15-1183186219
@!!ex
2007-06-30 10:50
2007.07.29
МОжно ли в комп без PCI-E...


2-1183709585
Kolan
2007-07-06 12:13
2007.07.29
Динамическое создание пунктов меню, как реализовать событие&#133