Як правильно додавати дані до StringGrid

Як правильно додавати дані в StringGrid, якщо початкова кількість рядків не відома? Я роблю так: 1. Збільшити лічильник рядків на 1 2. Вивести дані у рядку 3. йти на п.1

При цьому спостерігається мерехтіння при виведенні великої кількості елементів і повзунок справа весь час намагається встановитися на початок чим заважає переглядати результати. Як можна позбутися цих недоліків.

І ще питання як зробити, щоб скролінг по горизонталі працював плавно а не дискретно на одну колонку?

Palladin (2003-05-14 11:46) [1]

спробуй перед вставкою LockWindowUpdate(TStringGrid.Handle); додавання LockWindowUpdate(0);

Sha (2003-05-14 12:22) [2]

Запам'ятовуйте LeftCol і Col перед вставкою, відновлюй після.

NickBat (2003-05-14 12:25) [3]

> спостерігається мерехтіння при виведенні великої кількості елементів

На екран більше сотні не поміститься, а на сотні не мерехтить. Висновок: виводь на екран лише те, що буде видно користувачеві.

MegaVolt (2003-05-14 12:31) [4]

Не допомагає :( Я при прогортанні виділений рядок не чіпаю а коли відбувається зміна розміру StringGrid-a відбувається переміщення до виділеного елемента а це незручно. Всього цього можна уникнути спочатку виділивши купу рядків, що заздалегідь перевищує кількість рядків, що виводяться, а потім виводити туди рядки. Але при цьому позунок праворуч перестає грати свою роль :( та й некрасиво це як то :(

4G (2003-05-14 12:32) [5]

Ну спочатку можна вичіснити в циклі скільки треба забити в сітку. Створити стільки рядків та стовпців. А потім забивати в сітку все що не попадя. Ось і все. та ще а хтобуде дивитися не твої мерехтіння - всі дивляться на результат, ти ж не мікрософт - тебе не обесруть з ніг до голови, що така потужна контора та ще й із мерехтінням сітку зробила, до того ж зроблено на Delphi :D

MegaVolt (2003-05-14 12:37) [6]

Не допомагає :( Я при прогортанні виділений рядок не чіпаю а коли відбувається зміна розміру StringGrid-a відбувається переміщення до виділеного елемента а це незручно. Всього цього можна уникнути спочатку виділивши купу рядків, що заздалегідь перевищує кількість рядків, що виводяться, а потім виводити туди рядки. Але при цьому позунок праворуч перестає грати свою роль :( та й некрасиво це як то :(

MegaVolt (2003-05-14 12:43) [7]

To 4G: Вся сіль у тому що поки що йде пошук знайдені результати вже видно і людина може їх переглядати. Якщо ж я їх уже все знайшов, то само собою можна малювати як ти пропонуєш. А на рахунок мерехтіння так як раз юзвері і скаржаться але особливо їм не подобається що після кожної зміни розміру відбувається перескок на виділений рядок хоча вона і не була видна :( Сперечатися на тему того, що Delphi не мова не будемо : )

NickBat (2003-05-14 12:46) [8]

Опиши своє завдання, може річ у підході?

MegaVolt (2003-05-14 12:51) [9]

Є 1 прога яка сканує мережу та складає всі імена розміри та дати створення файлів у файл. Є 2 прога яка шукає по цьому файлу на запит наприклад *.avi і виводить результати в СтрінгГрід у міру того як знаходить нові результати. Пошук займає кілька хвилин (більше мільйона файлів) і користувач хоче переглядати результати до закінчення пошуку. Він гортає коліщатком миші список вниз а як тільки відбувається змінарозміру грида додавання наступного елемента прокрутка автоматично стрибає до виділеної строчке тобто. до списку т.к. Користувач ще толком нічого і не вибирав він гортає далі і знову теж саме врешті-решт він приходить до мене і каже прибери баг а я не знаю як :(

Palladin (2003-05-14 12:57) [10]

1 додаєш порціями, а не по одному 2 використовуєш LockWindowUpdate 3 перед додаванням запам'ятовуєш поточний стан і після його відновлюєш

NickBat (2003-05-14 12:59) [11]

Який жах! Цікаво навіщо така "прога"? Якщо є стандартні утиліти пошуку?

Виводь дані користувачеві тільки після того, як все вже проскановано.

AlexSV (2003-05-14 13:06) [12]

ІМХО під таке завдання краще використовувати ListView у віртуальному режимі.

MegaVolt (2003-05-14 13:09) [13]

До Palladin: 1. тоді той самий ефект буде при додаванні порції 2. у мене це не дає ефекту. 3. і кожен раз буде спочатку смикатися туди куди хоче StringGrid а потім туди куди потрібно на мою думку буде ще гірше. І в мене це не заробило чомусь: (

Стрибка зникає якщо я спочатку задаю розмір грида наприклад 100000 рядків і потім туди додавати рядки але на мою це як коряво якщо потрібно вивести 100 рядків робити грид але 100000 на всяк випадок. Чи так треба робити?

MegaVolt (2003-05-14 13:21) [14]

To NickBat: Прога потрібна для сканування мережі розміром більше 250 машин. Звичайні проги сканують її близько 20 хвилин :( А якщо кожен з 250 користувачів буде щось шукати? А якщо сканернути один раз а потім шукати по базі то пошук значно скорочується це раз апо-друге можна знайти ресурси на вимкнених на даний момент машинах. Виводити дані після пошуку не дають юзвері їм вже сподобалося і вони вимагають:(

To AlexSV: Не знаю що таке віртуальний режим але у звичайному режимі виведення великої кількості рядків дуже повільне :(

AlexSV (2003-05-14 14:39) [15]

NickBat (2003-05-14 15:24) [16]

> потім шукати по базі Ось і створи нормальну базу, а чи не текстовий файл. З нею працюватиме і швидше та зручніше. Ось тільки щось не зрозумів: > Визначити ресурси на вимкнених зараз машинах Але ж для запуску ресурсу все одно потрібно "підняти" машину.

Велика у вас там дірка в безпеці, якщо всі машини в мережі розшаровані.

MegaVolt (2003-05-15 17:42) [17]

To NickBat: > З нею працюватиме і швидше та зручніше. Швидше можливо але не набагато це раз а по-друге ставити всім користувачам BDE не бажано і в третіх не вмію я з базами працювати (і взагалі я не програміст за спеціальністю)

> Але для запуску ресурсу все одно необхідно "підняти" машину. Абсолютно вірно але завтра може виявитися що фільму вже і немає на машині наприклад записаний на CD або ще що і тоді залишається можливість домовлятися особисто з людиною.