Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

DBGridEh отрисовка сетки


Страницы:   1 2

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)

:) ? вот не понял поста.... чесно. Сорри.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо