Страница 2 из 3

Re: Отрисовка многострочных заголовков и объеденение

СообщениеДобавлено: 24.02.2010 22:33:36
alexs
dunin
я именно и имел это ввиду, когда говорил про первую ошибку. жду следующих больших выходных, чтобы посвятить время на правку этого.
amateur
Ну и у нас потихоньку всё движется. Просто это не основная моя работа :-) и делаю я то, что мне нужно в первую очередь.
Шапка будет развиваться, подвал тоже уже есть (пока правада однострочный). Если есть желание - я всегда принимаю толковые патчики (именно так появились фильтрации в гриде, меню в левом вехнем углу).

Re: Отрисовка многострочных заголовков и объеденение

СообщениеДобавлено: 04.03.2010 15:05:05
dunin
Немного не в тему, но близко. Вопрос к alexs-у...

Закончил с экспортом во внешние офисные приложения. Все нормально, даже многострочные заголовки как и полагается отрисовываются.
Изображение

Но... Дернуло меня привязать на экспорт ноткий сочетание Ctrl+E (типа того Ctrl + Export). Как результат при нажатии оных клавиш грид переходит в режим совершенно мне не нужного автофильтра и приобретает какой-то совершенно унылый вид.
Изображение

Вопрос:
Как отключить такое поведение грида? Как отключить автофильтр, чтобы не вызвался ни при каких обстоятельствах?

Спасибо.

Re: Отрисовка многострочных заголовков и объеденение

СообщениеДобавлено: 04.03.2010 22:42:35
alexs
Посмотри опции - кажись там именно для отключения фильтра есть одна.

Re: Отрисовка многострочных заголовков и объеденение

СообщениеДобавлено: 05.03.2010 10:18:18
dunin
alexs писал(а):Посмотри опции - кажись там именно для отключения фильтра есть одна.

Да в том то и дело, что все отключено...

Разрулили ситуацию так: в исходнике rxdbgrid заремарил напрочь две процедуры, вешающие хоткей помимо желания кодера

procedure DoCreateJMenu;
procedure KeyDown(var Key : Word; Shift : TShiftState); override;

alexs, думаю гриду нужен фикс...

Re: Отрисовка многострочных заголовков и объеденение

СообщениеДобавлено: 05.03.2010 11:59:11
alexs
Я посмотрел код, дествительно - фишка не отключается. Введу флажок в RxOptions для этого.

Re: Отрисовка многострочных заголовков и объеденение

СообщениеДобавлено: 06.03.2010 10:08:26
dunin
Скачал новую версию в надежде на правильную отрисовку заголовков. Два часа плясал c бубном - откатился на предыдущую. Компиляция начинается с сообщения, что versionresource не найден и пошло-поехало. В предыдущей сборке получилось заремарить - здесь никак. Затык на AboutVersionForm, или что-то вроде...

Re: Отрисовка многострочных заголовков и объеденение

СообщениеДобавлено: 06.03.2010 23:46:52
alexs
ну... как всё запущено...
возьми из новой версии модуль rxDBGrid
а вобще - возьми FPC и Lazarus свежие

Re: Отрисовка многострочных заголовков и объеденение

СообщениеДобавлено: 10.03.2010 11:30:40
dunin
Любитель работать на официально-стабильных версиях лазаруса вновь вопрошает к alexs-у... :oops:

Изображение
Долго не мог понять причину вот такой вот странной ошибки (см.рис) в собственной бета-проге. Естественно думал, что руки кривые...

Оно, конечно не исключено, но вот что обнаружил. Ошибка возникает рэндомно при закрытии-открытии датасета ТОЛЬКО если у связанного с датасетом RxDBGrid-а включена опция rdgFooterRows. При этом сам сначала отрисовка самого грид "замораживается" (полностью, сплошной белый фон), а после и прога отказывается работать.

RxDBGrid:
- мультизаголовки включены и по прежнему глючат;
- футер включен (1 строка);
- TRxColumn(Grid.Columns[j]).Footer.ValueType:= fvtStaticText; (все колонки)
- ошибка не завит от того пишу что-то в футер или нет.
- "возьми из новой версии модуль rxDBGrid" выполнено. Версия rxDBGrid последняя.

Добавлено спустя 3 часа 11 минут 36 секунд:
Ошибку победил корявейшим образом. Отписываюсь alexs-у для информации...

Сначала сделал так:
Код: Выделить всё
unit rxdbgrid;
...
procedure TRxDBGrid.CalcStatTotals;
var
  P:TBookmark;
  DS:TDataSet;
  i:integer;
//  J:integer;
begin
  if (not ((rdgFooterRows in OptionsRx) and DatalinkActive))
    or (Columns.Count = 0)
    //or (TRxColumn(Columns).Footer.ValueType = fvtStaticText) // попытался воткнуть проверку, дабы отменить лишнее не нужное вхождение в процедуру, но, понятное дело, не работает. Не знаю как правильно воткнуть - не я автор юнита
      then Exit;
  inc(FInProcessCalc);
  DS:=DataSource.DataSet;;
...
и т.д.


Понятно дело, что ничего не получилось и не могло получиться. Сделал так:
Код: Выделить всё
unit rxdbgrid;
...
procedure TRxDBGrid.CalcStatTotals;
var
  P:TBookmark;
  DS:TDataSet;
  i:integer;
//  J:integer;
begin

exit; // все равно футер у меня статиктекст - ничего подсчитывать не надо - лишний пробег по источнику данных отменен

  if (not ((rdgFooterRows in OptionsRx) and DatalinkActive)) or (Columns.Count = 0)
      then Exit;
  inc(FInProcessCalc);
  DS:=DataSource.DataSet;;
...
и т.д.


Все заработало как часы. Прими к сведению плз. Спасибо.

И еще... не помешало бы добавить что-то вроде
TRxColumn(Columns).Footer.Font.Style:= fsBold; Это так... На будущее...

Re: Отрисовка многострочных заголовков и объеденение

СообщениеДобавлено: 10.03.2010 23:15:47
alexs
dunin писал(а):Долго не мог понять причину вот такой вот странной ошибки (см.рис) в собственной бета-проге. Естественно думал, что руки кривые...

Слушай - сделай пример, чтобы я мог это проверить. Я с таким ещё не сталкивался...
dunin писал(а):TRxColumn(Columns).Footer.Font.Style:= fsBold; Это так... На будущее...

Т.е. ты хочеш сказать, что хочеш рулить начертанием в каждом отдельно взятом подвале столбца?

Re: Отрисовка многострочных заголовков и объеденение

СообщениеДобавлено: 10.03.2010 23:28:38
dunin
alexs писал(а):Слушай - сделай пример, чтобы я мог это проверить. Я с таким ещё не сталкивался...

Попробую. Но вылет рэндомный и черт его знает от чего еще зависел/зависит... попробую...
alexs писал(а):Т.е. ты хочеш сказать, что хочеш рулить начертанием в каждом отдельно взятом подвале столбца?

Ну не обязательно в каждой колонке, а хотя-бы чтобы можно было шрифт футера сделать отличным от основного шрифта грида.

Re: Отрисовка многострочных заголовков и объеденение

СообщениеДобавлено: 11.03.2010 20:21:53
alexs
dunin писал(а):Ну не обязательно в каждой колонке, а хотя-бы чтобы можно было шрифт футера сделать отличным от основного шрифта грида.

Посмотрим....

Re: Отрисовка многострочных заголовков и объеденение

СообщениеДобавлено: 25.03.2010 16:14:37
dunin
alexs, в гриде по Ctrl+C и Ctrl+T выскакивают какие-то совершенно не нужные формы сортировки/фильтрации. Как их отключить? (Привык все делать через правильно составленный select)

в FAllowedOperations все в False
в FOptionsRx все в False, кроме rdgMultiTitleline, которых все жду когда правильно заработают...

Я так понимаю вот здесь еще надо какие-то флаги прикрутить:
Код: Выделить всё
unit rxdbgrid;
...
procedure TRxDBGrid.KeyDown(var Key: Word; Shift: TShiftState);
var
  FTmpReadOnly:boolean;
begin
...
    ord('T'):begin
               if ssCtrl in Shift {(СЮДА ФЛАГ in FOptionsRx)} then
               begin
                 OnFilterBy(Self);
                 exit;
               end;
             end;
    ord('E'):begin
               if (ssCtrl in Shift) and (rdgAllowQuickFilter in FOptionsRx) then
               begin
                 OnFilter(Self);
                 exit;
               end;
             end;
    ord('Q'):begin
               if ssCtrl in Shift {(СЮДА ФЛАГ in FOptionsRx)} then
               begin
                 OnFilterClose(Self);
                 exit;
               end;
             end;
    ord('C'):begin
               if ssCtrl in Shift {(СЮДА ФЛАГ in FOptionsRx)} then
               begin               
...

Сделай плз. А то чужой юнит править - или целиком ношу поддержки на себя взваливать (не осилю) или до первого обновления...

Спасибо.

зы. Связка [Ctrl+C] на сортировку вообще в принципе не правильно. Это копирование в буфер - у всех уже в подкорке сидит. Эти клавиши лучше на копирование и перекинуть. Если ячейка в режиме редактирования, то копировать. Тут просить отключить ни кто не будет. ИМХО.

Re: Отрисовка многострочных заголовков и объеденение

СообщениеДобавлено: 25.03.2010 23:54:15
alexs
Напиши патчик, я включу в исходники.
Насчёт хоткеев - это тоже присланный код - можно устроить голосование на то, какие хоткеии использовать, можно даже настраиваемые сделать...

Re: Отрисовка многострочных заголовков и объеденение

СообщениеДобавлено: 26.03.2010 00:10:32
Padre_Mortius
Может стоит этот момент сделать настраиваемым? На всех все равно не угодить, а так каждый будет сам настраивать)

Re: Отрисовка многострочных заголовков и объеденение

СообщениеДобавлено: 26.03.2010 09:25:45
dunin
alexs писал(а):Напиши патчик, я включу в исходники.
...

Вот:
rxdbgrid20100326.zip
(20.3 КБ) Скачиваний: 531

Заработали флаги rdgAllowFilterForm (Ctrl+T), rdgAllowSortForm (Ctrl+C).
Флаг rdgMultiTitleLines по прежнему не используется и не работает. Его не трогал, так как теоретически он завязан на отрисовку многостраничных заголовков. Заработать-то заработали, но...

По большому счету все это временные костыли, т.к. флаги еще отвечают за включение/отключение tMenuItem создаваемого для грида tPopupMenu. Которое создается, а к tRxDBGrid ни где и не как не привязывается. Зачем создается? Только память занимает. Вызвать/привязать к гриду его никак, потому и хоткей из меню работает на событии TRxDBGrid.KeyDown...

По логике надо бы какой-то флаг типа rdgAllowRxGridPopupMenu сделать, который бы отключал стандартное свойство tRxDBGrid.PopupMenu:= ... ну и, соответственно, привязывал встроенное меню. Если флаг в False - вообще меню не создавать. На кой ляд оно надо, если кодер свое привязал?

Короче, темный лес... флаги подключил, дальше ничего не трогал. :?