На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
  
> Блокировка прокрутки фиксированной строки в StringGrid, Программно
    Здравствуйте, Уважаемые знатоки!
    Прошу помощи по заезженному компоненту StringGrid.
    Подскажите как программно заблокировать прокрутку скроллом зафиксированной строки или нескольких строк?!

    В сети подобных вопросов/решений не нашел. Может кто-то подымал такой вопрос?!

    Спасибо!
      Цитата zhuravlev80 @
      е как программно заблокировать прокрутку скроллом


      Цитата zhuravlev80 @
      зафиксированной строки или нескольких строк?

      Каким комонетом пользуемся?
      Цель - ничто , процесс - все.
        Цитата Bas @

        Для отображения данных используется TStringGrid.
        у компонента вызываю события StringGrid1DrawCell с кодом
        ExpandedWrap disabled
          const AnsiString text = this->StringGrid1->Cells[ACol][ARow];
           
              // Если это заголовок
              if ((State.Contains(gdFixed)) || (ARow == 0)) {
                  this->StringGrid1->Canvas->Brush->Color = clBtnFace;
              this->StringGrid1->Canvas->Font->Color = clWindowText;
              this->StringGrid1->Canvas->FillRect(Rect);
              Frame3D(this->StringGrid1->Canvas, Rect, clBtnHighlight, clBtnShadow, 1);
                  //this->StringGrid1->Canvas->TextRect(Rect, Rect.Left + 5, Rect.Top + 5, text);
                  //DrawText(this->StringGrid1->Canvas->Handle, text.c_str(), text.Length(), &Rect, DT_WORDBREAK);
              }
           
              // если ячейка выделена
              else if (State.Contains(gdSelected)) {
              this->StringGrid1->Canvas->Brush->Color = clHighlight;
              this->StringGrid1->Canvas->Font->Color = clHighlightText;
              this->StringGrid1->Canvas->FillRect(Rect);
                  //this->StringGrid1->Canvas->TextRect(Rect, Rect.Left + 5, Rect.Top + 5, text);
              }
           
              // закрашиваем ячейку (2, 2)
              else
              //if (this->ErrorRow != NULL) {
                  if ((!this->ErrorRow[ARow]) && (ARow > 0) && (this->SortNow)) {
              this->StringGrid1->Canvas->Brush->Color = clSkyBlue; // clBlue;
              this->StringGrid1->Canvas->Font->Color = clRed;
              this->StringGrid1->Canvas->FillRect(Rect);
                  //this->StringGrid1->Canvas->TextRect(Rect, Rect.Left + 5, Rect.Top + 5, text);
                  }
              //}
              // Для всех остальных ячеек
              else {
              this->StringGrid1->Canvas->Brush->Color = this->StringGrid1->Color;
              this->StringGrid1->Canvas->Font->Color = this->StringGrid1->Font->Color;
              this->StringGrid1->Canvas->FillRect(Rect);
                  //this->StringGrid1->Canvas->TextRect(Rect, Rect.Left + 5, Rect.Top + 5, text);
              }
           
              this->StringGrid1->Canvas->TextRect(Rect, Rect.Left + 5, Rect.Top + 5, text);

        так же StringGrid1MouseWheelDown
        ExpandedWrap disabled
          this->StringGrid1->Perform(WM_VSCROLL, SB_PAGEDOWN, 0);
                  Handled = true;

        и StringGrid1MouseWheelUp
        ExpandedWrap disabled
          this->StringGrid1->Perform(WM_VSCROLL, SB_PAGEUP, 0);
                  Handled = true;

        свойство DefaultDrawing = false;
        все остальные свойства по умолчанию!

        И Получается что при прокрутке скролла первая фиксированная строка прокручивается вместе со всей таблицей. Как сделать так чтобы она оставалась на месте, не перемещалась вместе со всей таблицей?!?! Спасибо!
          Свойство FixedRows поставьте 1 (по умолчанию и была 1) :)
            Нашел в чем была ошибка:
            при инициализации таблицы выполнялся код, который приводил к выше описанной ошибке!!!
            ExpandedWrap disabled
              for (int i = 0; i < grid->RowCount; i++) grid->Rows[i]->Clear();
                  for (int i = 0; i < grid->ColCount; i++) grid->Cols[i]->Clear();

            потом таблица заполнялась данными, и в конце дополнил строкой
            ExpandedWrap disabled
              if (grid->RowCount > 1) grid->FixedRows = 1;

            что исключило ошибку.
            Всем Спасибо!
              Меня всегда эта "особенность" вымораживала: ой, строчек в гриде нету? ну, тогда сносим фиксированные тоже, обнуляя их счётчик.
              Windows as usual - my "wau" Windows experience
                Цитата Mr.Delphist @
                Меня всегда эта "особенность" вымораживала: ой, строчек в гриде нету? ну, тогда сносим фиксированные тоже, обнуляя их счётчик.

                Ну бывает! а иронизировать зачем?! Вас, что кто-то укусил?! Мой косяк, не досмотрел! Что и кому, это доказали?! не Вы же подсказали, а ребята которые отозвались!!! или рвет, что не Вы подсказали?!
                Сообщение отредактировано: zhuravlev80 -
                  Цитата zhuravlev80 @
                  Ну бывает! а иронизировать зачем?!

                  Вы немного не так меня поняли. Это косяк не Ваш, а самого грида. Ну нельзя почему-то в нём иметь фикс-строку без строк данных. Иначе получится, что грид автоматом зануляет фикс-счётчик (что для строк, что для столбцов). ЗАЧЕМ?! Ведь заголовки слетают сразу.
                  Windows as usual - my "wau" Windows experience
                    Mr.Delphist, Извините, что "наехал" на Вас! Теперь я Вас понял! И согласен с Вами полностью!
                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script Execution time: 0,0963 ]   [ 18 queries used ]   [ Generated: 22.06.18, 00:02 GMT ]