На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное 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;

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

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

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


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,0281 ]   [ 16 queries used ]   [ Generated: 29.03.24, 01:35 GMT ]