![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Украшение 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.