На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
  
> обновление cxDBTreeList раз в секунду , cxDBTreeList
    Всем привет!
    Помогите пожалуйста нормально обновить данные в cxDBTreeList.
    у меня при каждом обновлении скрол перемещается к выделенной строке, что ужасно мешает. :wall:
    Как сделать чтобы скрол не оставался на месте?

    все красиво получается с cxGrid1DBTableView1:
    ExpandedWrap disabled
      void __fastcall TForm3::Timer1Timer(TObject *Sender)
      {
      cxGrid1DBTableView1->BeginUpdate();
      Query->DisableControls();
       
       
      int i = Query->RecNo;
       
      Query->Active = 0;
      Query->Active = 1;
       
      if(i >= 0) Query->RecNo = i;
       
      Query->EnableControls();
      cxGrid1DBTableView1->EndUpdate();
      }


    но почему то не выходит с cxDBTreeList!
      С cxDBTreeList не работал, но...
      Это прикол:
      Цитата ra6xqp @
      у меня при каждом обновлении скрол перемещается к выделенной строке, что ужасно мешает. :wall:
      Как сделать чтобы скрол не оставался на месте?

      ?

      Вы же сами запоминаете индекс текущей записи в i, и потом устанавливаете курсор в эту позицию:
      ExpandedWrap disabled
        if(i >= 0) Query->RecNo = i;


      Что вам нужно? Установить курсор в начало или в конец? Тогда:
      ExpandedWrap disabled
        Query->First(); // в начало (срабатывает по умолчанию)
        Query->Last(); // в конец
        Неет... Курсор надо оставить на месте.
        Проблема возникает при прокрутке списка, когда курсор выходит за рамки видимой области.

        Добавлено
        В случае с cxGrid1DBTableView1 клиент смотрит на таблицу, прокручивает его скролом вверх и вниз(не важно где курсор) и параллельно обновляются данные в таблице, раз в секунду.
        все работает красиво.
        то же самое я пытаюсь сделать с cxDBTreeList..
          Если правильно понял, то вам нужно получить текущие координаты скрола и потом, после установки курсора, восстановить эти самые координаты. Но, вообще-то, это криво как-то. В любом случае, скрол будет "прыгать", т.к. количество записей может меняться. К этой задаче нельзя подойти иным способом, чтобы не пришлось городить огород?
            да... Ты правильно понял. Но скрол не будет прыгать, т.к. количество записей не меняется. Меняется только значения ячеек.
              Работать со скроллбаром можно так:
              ExpandedWrap disabled
                    int iPos;
                 
                    iPos = GetScrollPos(dbgGrid->Handle, SB_VERT);
                 
                    SetScrollPos(dbgGrid->Handle, SB_VERT, iPos + 5, true);

              Но устанавливать так позицию для TDBGrid смысла нет, так как сами данные не прокручиваются в этом случае.
                GetScrollPos и SetScrollPos почему-то ни как не реагирует. Get возвращает 0
                хотя это все равно не помогло бы.
                  Цитата ra6xqp @
                  GetScrollPos и SetScrollPos почему-то ни как не реагирует. Get возвращает 0

                  Вполне возможно, они сами создают скроллбар и работают с ним.
                  Цитата ra6xqp @
                  хотя это все равно не помогло бы.

                  Покопайтесь в свойствах компонента. Может что-нибудь найдёте.
                    ладно... гора к магамеду не идет.. давайте наоборот...
                    как определить границы видимой части таблицы? индекс первой строчки и индекс последней сточки видимой части? что бы потом передвинуть курсор в видимую часть, если он из нее выйдет.
                      неужели ни кто не сможет помочь? :(
                      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      Рейтинг@Mail.ru
                      [ Script execution time: 0,0703 ]   [ 16 queries used ]   [ Generated: 4.11.25, 16:00 GMT ]