Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
15-1183312891
IPE
2007-07-01 22:01
2007.07.29
Apache 2


15-1183458983
vasIZmax
2007-07-03 14:36
2007.07.29
Image, Canvas or OpenGl


11-1166376965
vampir_infernal
2006-12-17 20:36
2007.07.29
Проблема с GroupBox.Children


15-1183383132
Jeer
2007-07-02 17:32
2007.07.29
Первый петафлоповец от IBM


2-1183511741
Voproshay
2007-07-04 05:15
2007.07.29
Как работать с длительными процессами в программе?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский