Актуальное обновление StringGrid, когда горизонтальная полоса прокрутки движется? - PullRequest
4 голосов
/ 06 ноября 2010

В Delphi 2010 мне нужно отобразить сетку с горизонтальной полосой прокрутки с примерно 15 столбцами x 5 строк.

Я решил использовать StringGrid.

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

Компонент StringGrid, по-видимому, не прокручивается в реальном времени.Он ждет, пока кнопка мыши не будет отпущена, перед обновлением столбца и прокруткой при необходимости.

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

Это похоже на общие потребности, поэтому я удивился, что не нашел их в TStringGrid.

Есть какие-нибудь предложения по решению этих двух проблем?Я могу использовать DbGrid или другой стандартный компонент, но я предпочитаю не использовать коммерческую сетку, если я могу избежать этого.И я не собираюсь использовать условно-бесплатное или бесплатное ПО ...

TIA

Ответы [ 3 ]

4 голосов
/ 06 ноября 2010

Для первого вопроса вы можете установить goThumbTracking в StringGrid в Options во время разработки или во время выполнения:

StringGrid1.Options := StringGrid1.Options + [goThumbTracking];


По третьему вопросу вы можете предоставить нужные вам функции, используя обработчики событий клавиатуры элемента управления. Пример;

procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  StringGrid: TStringGrid;
begin
  StringGrid := Sender as TStringGrid;
  case Key of
    VK_DOWN:
      if StringGrid.Row = StringGrid.RowCount - 1 then begin
        Key := 0;
        StringGrid.Row := StringGrid.FixedRows;
        if StringGrid.Col = StringGrid.ColCount - 1 then
          StringGrid.Col := StringGrid.FixedCols
        else
          StringGrid.Col := StringGrid.Col + 1;
      end;
    VK_UP:    //...;
    VK_RIGHT: //;
    VK_LEFT:  //;
  end;
end;


По второму вопросу код прокрутки, кажется, скрыт частными методами TCustomGrid. Понятия не имею, как этого добиться ..

3 голосов
/ 06 ноября 2010

Если вы заметили, что вы не заинтересованы в сторонних компонентах - Freeware, мне они тоже не нравятся, но мы все должны иногда идти на жертвы, если хотим решить проблемы.Это одна из этих жертв!Этот компонент хорошо игнорировать.Вы не будете создавать что-то подобное самостоятельно, если у вас нет пары лет свободного времени.

Либо напишите новый компонент на основе TStringGrid (я бы не стал - это не лучший инструмент в коробкедля начала)

Но найдите время и изучите TVirtualStringTree.Компонент на годы опережает TStrignGrid.Источник доступен, и многие его используют.

И уже реализованы события, реагирующие на изменения полосы прокрутки OnScroll, OnShowScrollbar

http://www.delphi -gems.com / index.php? option = com_content & task = view & id = 12 & Itemid = 38

Выполните поиск по стеку и вы можете прочитать намного больше о tvirtualstringtree

0 голосов
/ 06 ноября 2010

Второе предложение использовать TVirtualStringTree.Работа с компонентом TStringGrid - это все равно, что нанести удар в живот ржавыми ножницами.

...