VerticalGrid / Inspector
От: Dimonka Верблюд  
Дата: 06.04.05 10:28
Оценка:
Всем доброго времени суток.
Ищу компонент

Встречал кто-нибудь коммерческий или бесплатный компонент типа инспектора с "нормальным" автоматическим изменением высоты полей? То есть надо вводить различные данные в таблицу из двух колонок и кучей строк, в которой левая колонка заголовок, а правая различные редакторы (в том числе и Memo).

Сейчас пользуюсь cxVerticalGrid, но он к сожалению имеет слегка необычное поведение, которое меня неустраивает.. Он не учитывает высоту скрытых полей и при скроллировании скроллбар прыгает как сумашедший..

Может кто подкинет мысль?
Re: VerticalGrid / Inspector
От: Danchik Украина  
Дата: 06.04.05 10:37
Оценка:
Здравствуйте, Dimonka, Вы писали:

D>Всем доброго времени суток.

D>Ищу компонент

D>Встречал кто-нибудь коммерческий или бесплатный компонент типа инспектора с "нормальным" автоматическим изменением высоты полей? То есть надо вводить различные данные в таблицу из двух колонок и кучей строк, в которой левая колонка заголовок, а правая различные редакторы (в том числе и Memo).


D>Сейчас пользуюсь cxVerticalGrid, но он к сожалению имеет слегка необычное поведение, которое меня неустраивает.. Он не учитывает высоту скрытых полей и при скроллировании скроллбар прыгает как сумашедший..


D>Может кто подкинет мысль?


Не прячь поля, попробуй их из грида удалять на пример в какой то список, а потом если надо возвращай обратно.
Думаю вряд ли ты найдеш что то лучше чем cxVerticalGrid.
Re[2]: VerticalGrid / Inspector
От: Dimonka Верблюд  
Дата: 06.04.05 10:46
Оценка:
Здравствуйте, Danchik, Вы писали:

D>Не прячь поля, попробуй их из грида удалять на пример в какой то список, а потом если надо возвращай обратно.

Суть не в этом — я их не прячу.
Под скрытыми полями подразумеваются поля, которые не поместились на экране за раз.
Т.е. если проскроллировать там находятся большие Memo поля, но пока они невидимы на экране — Grid считает их достаточно небольшими.. В этом вся проблема..

D>Думаю вряд ли ты найдеш что то лучше чем cxVerticalGrid.


печально это слышать..
Re[3]: VerticalGrid / Inspector
От: Danchik Украина  
Дата: 06.04.05 11:29
Оценка:
Здравствуйте, Dimonka, Вы писали:

D>Здравствуйте, Danchik, Вы писали:


D>>Не прячь поля, попробуй их из грида удалять на пример в какой то список, а потом если надо возвращай обратно.

D>Суть не в этом — я их не прячу.
D>Под скрытыми полями подразумеваются поля, которые не поместились на экране за раз.
D>Т.е. если проскроллировать там находятся большие Memo поля, но пока они невидимы на экране — Grid считает их достаточно небольшими.. В этом вся проблема..

D>>Думаю вряд ли ты найдеш что то лучше чем cxVerticalGrid.


D>печально это слышать..


Решал когда то проблемы со скроллированием в cxVerticalGrid, но мне нужен сампл где это повторяется. Просто напиши маленький тест. Брось на формочку один грид и кнопочку заполнить грид. Запости DFM-текст и PAS файл. Я гляну что там у тебя не так.
Re: VerticalGrid / Inspector
От: Demiurg  
Дата: 06.04.05 12:01
Оценка:
Здравствуйте, Dimonka, Вы писали:


D>Сейчас пользуюсь cxVerticalGrid, но он к сожалению имеет слегка необычное поведение, которое меня неустраивает.. Он не учитывает высоту скрытых полей и при скроллировании скроллбар прыгает как сумашедший..


А просто cxGrid не пробовал? А уж сделать на основе его инспектор ерунда...
... << RSDN@Home 1.1.4 beta 4 358, Rammstein — Mutter>>
Re[2]: VerticalGrid / Inspector
От: Danchik Украина  
Дата: 06.04.05 12:19
Оценка:
Здравствуйте, Demiurg, Вы писали:

D>Здравствуйте, Dimonka, Вы писали:



D>>Сейчас пользуюсь cxVerticalGrid, но он к сожалению имеет слегка необычное поведение, которое меня неустраивает.. Он не учитывает высоту скрытых полей и при скроллировании скроллбар прыгает как сумашедший..


D> А просто cxGrid не пробовал? А уж сделать на основе его инспектор ерунда...


Совсем даже не ерунда. Попробуй сделать вложеность — начнеш балдеть.
Это что постоянно Levels создавать и динамические Views? Помоему проще багу в вертикальном гриде найти и профиксать
Re: VerticalGrid / Inspector
От: Dimonka Верблюд  
Дата: 06.04.05 12:55
Оценка:
Пример бага:


uses cxMemo;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
  Row: TcxEditorRow;
  S: string;
  k, l: Integer;
begin
  cxVG.BeginUpdate;
  cxVG.ClearRows;
  cxVG.OptionsView.CellAutoHeight := true;
  for I := 0 to 20 do    // Iterate
  begin
    Row := cxVG.Add(TcxEditorRow) as TcxEditorRow;
    Row.Properties.EditPropertiesClass := TcxMemoProperties;
    Row.Properties.Caption := format('Row %d', [i]);
    s:='';
    l:= Random(30) + (i * 20) * (i and 1);
    for k := 0 to l do    // Iterate
      s:= s + 'Demo ';
    Row.Properties.Value := s;
  end;    // for
  cxVG.EndUpdate;
end;


Экстремального случая изобразить на скорую руку не получилось, но, надеюсь смысл понятен..

Для теста — кинуть грид по имени cxVG, кинуть кнопку и добавить код.
Re[2]: VerticalGrid / Inspector
От: Danchik Украина  
Дата: 06.04.05 13:33
Оценка:
Здравствуйте, Dimonka, Вы писали:

D>Пример бага:



D>
D>uses cxMemo;

D>{$R *.dfm}

D>procedure TForm1.Button1Click(Sender: TObject);
D>var
D>  I: Integer;
D>  Row: TcxEditorRow;
D>  S: string;
D>  k, l: Integer;
D>begin
D>  cxVG.BeginUpdate;
D>  cxVG.ClearRows;
D>  cxVG.OptionsView.CellAutoHeight := true;
D>  for I := 0 to 20 do    // Iterate
D>  begin
D>    Row := cxVG.Add(TcxEditorRow) as TcxEditorRow;
D>    Row.Properties.EditPropertiesClass := TcxMemoProperties;
D>    Row.Properties.Caption := format('Row %d', [i]);
D>    s:='';
D>    l:= Random(30) + (i * 20) * (i and 1);
D>    for k := 0 to l do    // Iterate
D>      s:= s + 'Demo ';
D>    Row.Properties.Value := s;
D>  end;    // for
D>  cxVG.EndUpdate;
D>end;
D>


D>Экстремального случая изобразить на скорую руку не получилось, но, надеюсь смысл понятен..


D>Для теста — кинуть грид по имени cxVG, кинуть кнопку и добавить код.


Я так понял тебе не нравится что ScrollBar меняет свою высоту во время скроллирования?
Это тебя сильно неустраивает? Я такой же тест прогнал на cxGrid — поведение идентичное.
Re[3]: VerticalGrid / Inspector
От: Dimonka Верблюд  
Дата: 06.04.05 13:43
Оценка:
Здравствуйте, Danchik, Вы писали:

D>Я так понял тебе не нравится что ScrollBar меняет свою высоту во время скроллирования?

D>Это тебя сильно неустраивает? Я такой же тест прогнал на cxGrid — поведение идентичное.

Проблема в том, что в экстремальных случаях (а я с ними постоянно сталкиваюсь) совершенно невозможно управлять позицированием из-за того, что курсор находится вне грида и зачастую из-за этого грид теряет фокус. Короче — вопервых очень раздражает, а во-вторых выглядит совершенно непрофессионально.
Re[4]: VerticalGrid / Inspector
От: Danchik Украина  
Дата: 06.04.05 14:22
Оценка:
Здравствуйте, Dimonka, Вы писали:

D>Здравствуйте, Danchik, Вы писали:


D>>Я так понял тебе не нравится что ScrollBar меняет свою высоту во время скроллирования?

D>>Это тебя сильно неустраивает? Я такой же тест прогнал на cxGrid — поведение идентичное.

D>Проблема в том, что в экстремальных случаях (а я с ними постоянно сталкиваюсь) совершенно невозможно управлять позицированием из-за того, что курсор находится вне грида и зачастую из-за этого грид теряет фокус.

Брр, стоп. Ка это курсор вне грида? Во время редактирования что ли? Изза чего он теряет фокус ?
Re[5]: VerticalGrid / Inspector
От: Dimonka Верблюд  
Дата: 06.04.05 14:27
Оценка:
Здравствуйте, Danchik, Вы писали:

D>>Проблема в том, что в экстремальных случаях (а я с ними постоянно сталкиваюсь) совершенно невозможно управлять позицированием из-за того, что курсор находится вне грида и зачастую из-за этого грид теряет фокус.

D>Брр, стоп. Ка это курсор вне грида? Во время редактирования что ли? Изза чего он теряет фокус ?

Когда скроллируешь грид к нижним строкам курсор уезжает ниже скроллбара и может вообще уйти за окно, а позиция в строках грида будет в это время где-нибудь на середине. Неужели не заметил? Попробуй проскроллировать одним махом до низа. В моём примере это хоть и не сильно, но всё же проявляется.
Re[6]: VerticalGrid / Inspector
От: Danchik Украина  
Дата: 06.04.05 15:25
Оценка:
Здравствуйте, Dimonka, Вы писали:

D>Здравствуйте, Danchik, Вы писали:


D>>>Проблема в том, что в экстремальных случаях (а я с ними постоянно сталкиваюсь) совершенно невозможно управлять позицированием из-за того, что курсор находится вне грида и зачастую из-за этого грид теряет фокус.

D>>Брр, стоп. Ка это курсор вне грида? Во время редактирования что ли? Изза чего он теряет фокус ?

D>Когда скроллируешь грид к нижним строкам курсор уезжает ниже скроллбара и может вообще уйти за окно, а позиция в строках грида будет в это время где-нибудь на середине. Неужели не заметил? Попробуй проскроллировать одним махом до низа. В моём примере это хоть и не сильно, но всё же проявляется.


Понял. Нужно кункретно подебажить. На днях дам ответ. А пока кликай в начало ScrollBars's Thumbnail, мышка будет держатся
Только изза этого совсем не обязательно отказываться от грида
Re[7]: VerticalGrid / Inspector
От: Dimonka Верблюд  
Дата: 06.04.05 15:54
Оценка:
Здравствуйте, Danchik, Вы писали:

D>Понял. Нужно кункретно подебажить. На днях дам ответ. А пока кликай в начало ScrollBars's Thumbnail, мышка будет держатся

D>Только изза этого совсем не обязательно отказываться от грида

Довёл свой пример до совершенства

uses cxMemo;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
  Row: TcxEditorRow;
  S: string;
  k, l: Integer;
begin
  cxVG.BeginUpdate;
  cxVG.ClearRows;
  cxVG.OptionsView.CellAutoHeight := true;
  for I := 0 to 30 do    // Iterate
  begin
    Row := cxVG.Add(TcxEditorRow) as TcxEditorRow;
    Row.Properties.EditPropertiesClass := TcxMemoProperties;
    Row.Properties.Caption := format('Row %d', [i]);
    s:='';
    if i > 15 then
    begin
      l:= (i * 5) * (i and 1);
      for k := 0 to l do    // Iterate
        s:= s + 'Demo ';
    end;
    Row.Properties.Value := s;
  end;    // for
  cxVG.EndUpdate;
end;


Как получить максимально гдакий эффект — после выполнения вышеприведённого заполнения надо взяться за нижнюю (!) часть тушки скроллбара и потянуть вниз. Эффект просто охренетительный.

Из дополнительных претензий к VerticalGrid — это отсутствие автоматического изменения высоты строк при вводе текста. Т.е. вместо того, чтобы добавить новую строку при редактировании текст начинает уползать вверх..AutoHeight не работает во время редактирования.. Можно конечно сделать видимым скроллбар.. но это уж совсем извращение на мой взгляд..
Re[8]: VerticalGrid / Inspector
От: Danchik Украина  
Дата: 06.04.05 17:42
Оценка: 6 (1)
Здравствуйте, Dimonka, Вы писали:

Все проблема, так сказать solved
Алгоритм такой: если мышка вылезла за рамки ролика вниз — просто ставим ролик так чтобы мышка была посредине.

Перепиши к себе в проэкт юнит cxScrollBar.pas. Тут нужно в прцедуре TcxScrollBar.MouseMove добавить две строчки (подсвечно болдом):


procedure TcxScrollBar.MouseMove(Shift: TShiftState; X, Y: Integer);
....

begin
...

      if FKind = sbHorizontal then
      begin
        ADelta := X - FDownMousePos.X;
        if ADelta = 0 then Exit;
        if (ADelta < 0) and (FSaveThumbnailPos.X + ADelta < FTopLeftArrow.Right) then
          ADelta := FTopLeftArrow.Right - FSaveThumbnailPos.X
        else
          if (ADelta > 0) and (FSaveThumbnailPos.X + ASize + ADelta > FBottomRightArrow.Left) then
            ADelta := FBottomRightArrow.Left - (FSaveThumbnailPos.X + ASize);
        UpdateThumbnail(ADelta, 0);
      end
      else
      begin

        if FThumbnail.Top + ASize < Y then
          FDownMousePos.Y := FSaveThumbnailPos.Y + ASize div 2; // middle of thumbnail

        ADelta := Y - FDownMousePos.Y;
        if ADelta = 0 then Exit;

        if (ADelta < 0) and (FSaveThumbnailPos.Y + ADelta < FTopLeftArrow.Bottom) then
          ADelta := FTopLeftArrow.Bottom - FSaveThumbnailPos.Y
        else
          if (ADelta > 0) and (FSaveThumbnailPos.Y + ASize + ADelta > FBottomRightArrow.Top) then
            ADelta := FBottomRightArrow.Top - (FSaveThumbnailPos.Y + ASize);
        UpdateThumbnail(0, ADelta);
      end;

...
end;

Enjoy!

D>Из дополнительных претензий к VerticalGrid — это отсутствие автоматического изменения высоты строк при вводе текста. Т.е. вместо того, чтобы добавить новую строку при редактировании текст начинает уползать вверх..AutoHeight не работает во время редактирования.. Можно конечно сделать видимым скроллбар.. но это уж совсем извращение на мой взгляд..

Это сделаем в следующем номере нашей газеты
Re: VerticalGrid / Inspector
От: Dimonka Верблюд  
Дата: 14.04.05 15:35
Оценка:
Пришёл ответ по поводу этих вопросов от саппорта..
Как говориться — всё знаем, но ничего поделать не можем. Пометили себе, так сказать, на будущее..
Re[2]: VerticalGrid / Inspector
От: Danchik Украина  
Дата: 14.04.05 16:37
Оценка:
Здравствуйте, Dimonka, Вы писали:

D>Пришёл ответ по поводу этих вопросов от саппорта..

D>Как говориться — всё знаем, но ничего поделать не можем. Пометили себе, так сказать, на будущее..

Хе-хе
Пока от них дождешся...
Я всегда сам правлю. Заодно разберусь как что и куда.
Только не думай что это единстванный баг

(offtopic) Помнится Report Builder фиксал, послал им письмецо, что, где, куда и почему. Что удивительно — ответили, поинтересовались откуда это я столько нарыл, кто ихнюю тайну кода расскрыл. BTW в селующей версии все мои поправки били аккуратно вставлены
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.