Глюки rxDBGrid

Модераторы: alexs, Модераторы

ronin
постоялец
Сообщения: 174
Зарегистрирован: 26.01.2010 23:14:46

Глюки rxDBGrid

Сообщение ronin »

Поставил обработчик события RxDBGrid TitleClick, но при нажатии по шапке столбца левой кнопкой мыши возвращается всегда предыдущий столбец, а на первом столбце событие вообще не срабатывает, а при щелчке правой кнопкой мыши всё ок, почему так?

Добавлено спустя 5 минут:
UPD ещё какой то непонятный глюк - последний столбец не отображает данных, просто пустые ячейки, если добавляю пустой столбец то в предыдущем всё ок, данные показываются о_О

Добавлено спустя 16 минут 53 секунды:
UPD2 поставил стандартный грид, всё ок, все данные отображаются корректно, TitleClick отрабатывает на нажатие левой кнопки мыши как надо

автор ответь пожалуйста, очень надо использовать rxDBGrid

Добавлено спустя 16 часов 14 секунд:
с сортировкой разобрался, свойство AutoSort поставил в false и сразу стала работать сортировка по щелчку левой кнопкой...

Добавлено спустя 2 минуты 5 секунд:
остаётся вопрос по последнему столбцу, в desigtime режиме активировал набор данных, всё ок, последний столбец отображает данные... в рантайме не хочет :(

Добавлено спустя 41 минуту 30 секунд:
отключил индикатор, последний столбец стал показывать данные, буду разбираться

Добавлено спустя 33 минуты 3 секунды:
в общем времени разбираться нету добавил следующий код

Код: Выделить всё

procedure TGemsForm.RxDBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if Column.Index=TDBGrid(Sender).Columns.Count-1 then begin
    TDBGrid(Sender).Canvas.TextOut(Rect.Left+2,Rect.Top+2,Column.Field.Text);
    TDBGrid(Sender).Canvas.Font.Style:=[];
  end;

  TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;


данные выводятся...

надеюсь автор объяснит данные недостатки, почему так :)

Добавлено спустя 1 час 35 минут 6 секунд:
ещё обнаружил ошибку: если вызвать диалог изменения видимости и расположения столбцов (TrxDBGridColumsForm) и попытаться нажать кнопку смещения столбца вниз, при этом не выделив в листбоксе ни одной строки, генерируется ошибка Out of bounds

вот в этом месте кода:

Код: Выделить всё

procedure TrxDBGridColumsForm.SpeedButton2Click(Sender: TObject);
var
  S:string;
  i:integer;
begin
  if CheckListBox1.Items.Count > 1 then
  begin
      if CheckListBox1.ItemIndex<CheckListBox1.Items.Count-1 then
      begin
        i:=CheckListBox1.ItemIndex+1;
        S:=CheckListBox1.Items[CheckListBox1.ItemIndex];
        CheckListBox1.Items[CheckListBox1.ItemIndex]:=CheckListBox1.Items[i];
        CheckListBox1.Items[i]:=S;
        CheckListBox1.ItemIndex:=i;
      end;
  end;
end;
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

ronin писал(а):ещё обнаружил ошибку: если вызвать диалог изменения видимости и расположения столбцов (TrxDBGridColumsForm) и попытаться нажать кнопку смещения столбца вниз, при этом не выделив в листбоксе ни одной строки, генерируется ошибка Out of bounds

Не понял, как можно не выделять строку - там она по умолчанию выделена. Но вставил код для проверки ситуации.
ronin
постоялец
Сообщения: 174
Зарегистрирован: 26.01.2010 23:14:46

Сообщение ronin »

Не понял, как можно не выделять строку - там она по умолчанию выделена


ну я же врать не буду :) нажимаю пункт меню сетки, открывается окно столбцов грида, нажимаю кнопку "сместить вниз", вылетает исключение

спасибо за ответ
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

Ошибка ушла?
Аватара пользователя
grigoreo
постоялец
Сообщения: 195
Зарегистрирован: 10.03.2009 14:43:43
Откуда: С нашей Раши

Сообщение grigoreo »

потверждаю глюк есть лечится только выключением индикатора, указатель в обработчике при включеном индикаторе всегда смещен на один...
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

А это точно глюк - а не фича?
И, как мне кажется, это стандарное поведение базового DBGrid-а.
ronin
постоялец
Сообщения: 174
Зарегистрирован: 26.01.2010 23:14:46

Сообщение ronin »

дело в том что указатель смещён не с учётом индикатора, что кажется логичным, а именно на 1 меньше, т.е. при включённом индикаторе щёлкая по шапке столбца Column ссылается на предыдущий столбец, таким образом при щелчке по шапке первого столбца (после индикатора) событие вообще не отрабатывает, дальше со сдвигом на 1 столбец, т.е. при щелчке по шапке второго столбца Column ссылается на первый столбец и т.д.

данное поведение меняется либо при отключении индикатора, либо как я писал выше при установке свойства Autosort в false

в стандартном гриде такого нет
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

ronin писал(а):в стандартном гриде такого нет

Хорошо - поглядим.
ronin
постоялец
Сообщения: 174
Зарегистрирован: 26.01.2010 23:14:46

Сообщение ronin »

ещё заметил один небольшой недостаток. у меня главная форма приложения имеет свойство FormStyle=fsNormal, остальные формы fsStayOnTop, для того чтобы при работе с главной формой остальные не прятались за главную и всегда были сверху. При открытии формы в модальном режиме и попытке открыть rxDBGridColumsForm (выбор видимых столбцов) данная форма оказывается за текущей формой, потому что свойство FormStyle=fsNormal для данной формы, я думаю это неправильно и по-умолчанию оно должно быть таким, чтобы обеспечить 100% появление окошка с выбором столбцов
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

ronin
Это особенности менеджера окон.
К RX это не относится.
ronin
постоялец
Сообщения: 174
Зарегистрирован: 26.01.2010 23:14:46

Сообщение ronin »

почему тогда остальные гриды которые я использовал ранее ведут себя как надо? пришлось менять свойство данной формы в папке с библиотекой и перекомпилировать проект. раз уж вы считаете это стандартным поведением... чтож, прийдётся смириться
ronin
постоялец
Сообщения: 174
Зарегистрирован: 26.01.2010 23:14:46

Сообщение ronin »

проверил тут ещё RXDBLookupComboBox тоже аналогичный баг, если форма в StayOnTop то выпадающий список не видно, он появляется за формой... или это тоже стандартное поведение? для сведения, стандартный DBLookupComboBox выпадает как надо, независимо от состояния формы, даже если она StayOnTop и в модальном режиме, как то так
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

RXDBLookupComboBox - для него конечно это не очень хорошо. Но там какие-то проблемы были изначально. Попробуй у его попап-окна выставить StayOnTop.

Я сам этот режим (StayOnTop) не признаю (абсолютно не нужная фича) - поэтому сейчас проверять не буду.
Потести - если всё будет нормально - то можно включить опционально такое поведение (готовь патчик).

Инетересует мнение других разработчиков - кому либо нужно это поведение?
ronin
постоялец
Сообщения: 174
Зарегистрирован: 26.01.2010 23:14:46

Сообщение ronin »

Я сам этот режим (StayOnTop) не признаю (абсолютно не нужная фича)


тогда у меня вопрос как реализовать многооконный интерфейс в программе при условии что главная форма развёрнута на весь экран и чтобы остальные открытые формы приложения не пропадали при щелчке на главной или использовании меню главного окна? как например в фотошопе или paint.net (mdi режим не в счёт)
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

ronin поиграйте со свойством TForm.PopupParent
Ответить