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

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

Украшение dbGrid [D7]


yk ©   (2006-02-09 13:45:00) 

Уважаемые мастера помогите, а то я чтото запуталась!

Есть следующие требования к работе с таблицей:
1- пользователь должен иметь возможность раскрашивать строки по своему усмотрению
2- пользователь должен иметь возможность редактировать ячейки выбранной  строки , но хочет чтобы выбранная строка выделялась вся (dbEditing,dbMultiSelect=true  dbRowSelect=false)
3- пользователь должен иметь возможность "перетаскивать" строки

для 1и 2 перегружаем метод OnDrawCell
но при 2 возникает задача - как внутри метода узнать - принадлежит ли текущая прорисовываемая ячейка выбранной строке? Потомучто если использовать (gdSelected in State) то он для выделеных ЯЧЕИК.

При реализации 2 - проблема с тем что в режиме dbEditing не вызываются методы MouseDown и MouseUp

(dbGrid)


yk   (2006-02-10 08:45:00) [1]

КСТАТИ ТАК МОНА СДЕЛАТЬ И "ПЕРЕТАСКИВАНИЕ" ВСЕЙ ВЫДЕЛЕННОЙ
ГРУППЫ

УРАААААААААААА!!!!!!!!!!!!!!!!!!!!!!


yk   (2006-02-10 08:43:00) [2]

спасибо за совет - думаю удасться уломать на вариант с кнопочками - т.к. действительно удобнее

БРОСАЮСЬ НА ШЕЮ И ЦЕЛУЮ В ЩЕЧКУ )))))))))))))))))))))))


ЮЮ   (2006-02-10 08:29:00) [3]

Манипуляции мышью в окне предназначены для выделения текста в последнем, поэтому, по-моему, не следует вносить путаницу в привычнфй интерфейс.
Да и организовать перетаскивание с помощью Drag&Drop в гриде - занятие не из приятнейших (с точки зрения кодирования). Проще добавить две кнопки "Вверх" и "Вниз" для перемещения текущей записи НД.


yk   (2006-02-10 08:02:00) [4]

> не видно какого цвета выделеные строки - дотумкала - шрифт разный оставила


yk   (2006-02-10 07:58:00) [5]

>Как вариант, в AfterScroll DataSet-а запоминать в общедоступном месте >значение ключевого поля, в OnDraw... грида сравнивать его со значением >ключевого поля отображаемого DataSeta.

ужас :(  и непонятно ничего и подумала - раз этот грид такой умный - то пусть сам и определяет где что
я сделала может и тупо - зато работает :выделяется вся СТРОКА а не только выделенная Ячейка
if((gdSelected in State))then
 begin
   dbgStems.Canvas.Brush.Color:=clHighLight;
  dbgStems.Canvas.Font.Color:=clHighLightText;
 end
else
 begin
 dbgStems.DefaultDrawColumnCell(Rect,DataCol,Column, State);
 if(dbgStems.Canvas.Brush.Color<>clHighLight) then
     begin
     dbgStems.Canvas.Brush.Color:=cdsStems.fieldByNAme('color').ASINteger;
     dbgStems.Canvas.Font.Color:=clWhite xor(dbgStems.Canvas.Brush.Color);
     end;
 end;


но тут один существенный недостаток - не видно какого цвета выделеные строки (всмысле что они разных цветов могут быть - не видно) - вот думаю как это сделать чтобы было видно... 8)(

>Если менять порядок следования, то требуется умудриться >изменить "порядок строк" в DataSete, если он должен сохраниться, то в >Таблице, ДБгрид здесь ничем не поможет
это делаю с помощью добавочного поля №строки - по нему идет сортировка
"перетаскивание строки" заключается в изменении номера строки

>Дело в том, что в режиме dbEditing фокус ввода принадлежит другому >окну, порожденному DBGrid, - TDBGrid.InplaceEsit. и, естественно, что до >методов и обработчиков грида дело, скорей всего, не доходит.
здорово (     значит в режиме dbEditing я не могу использовать onmousedown/up --- может намекнете как тогда лучше сделать "перетаскивание строк" ?? у меня не дотумкивается ((


ЮЮ   (2006-02-10 03:04:00) [6]


> 3- пользователь должен иметь возможность "перетаскивать"
> строки

Перетаскивать - это что?
Если менять порядок следования, то требуется умудриться изменить "порядок строк" в DataSete, если он должен сохраниться, то в Таблице, ДБгрид здесь ничем не поможет.  


> При реализации 2 - проблема с тем что в режиме dbEditing
> не вызываются методы MouseDown и MouseUp

Чьи? Дело в том, что в режиме dbEditing фокус ввода принадлежит другому окну, порожденному DBGrid, - TDBGrid.InplaceEsit. и, естественно, что до методов и обработчиков грида дело, скорей всего, не доходит.


ЮЮ   (2006-02-10 02:56:00) [7]


>  как внутри метода узнать - принадлежит ли текущая прорисовываемая
> ячейка выбранной строке?

См. http://www.delphimaster.ru/cgi-bin/forum.pl?n=18&id=1139385479


unknown   (2006-02-09 15:38:00) [8]


> yk ©   (09.02.06 14:17) [2]
>
> а в 3.3 ??

Что в 3.3 ?
Если бесплатность - то 3.6 это последняя бесплатная версия,
EhLib платным стал с версии 4.0
Если пароль - так он всегда по-моему таким был...


yk   (2006-02-09 14:17:00) [9]

а в 3.3 ??


unknown   (2006-02-09 13:56:00) [10]

в EhLib все это организовать можно без особых проблем.
http://ehlib.com/RUS/ehlibrus.exe- пароль "ФЕВРАЛЬФЕВРАЛЬ"
P/S
EhLib 3.6 - бесплатная для exUSSR.


Наверх

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