Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2018, 22:50   #1
tsar_
Форумчанин
 
Аватар для tsar_
 
Регистрация: 06.01.2011
Сообщений: 369
По умолчанию Особенности виртуального ListBox при отображении больших объемов информации

Всем привет!
Как же давно я тут не был...

А теперь по сути.
Извлек из закромов программку-словарь собственного изготовления (ей лет 5 уже).
На ней виртуальный ListBox для отображения списка терминов, которые хранятся в обычном текстовом файле (структура файла "термин" табуляция "перевод", в листбоксе отображается только "термин").
Когда словарь небольшой, скажем, несколько сотен терминов, - все гут.
Но когда терминов порядка сотни тысяч (переделал какой-то готовый толковый словарь, там термины от "А" до "Я") невозможно прокрутить ListBox до конца, где-то на середине (буква "О") слова начинают повторяться с "А".
Смотрим гифку https://image.ibb.co/nNtF8J/wtf.gif
Компилил в D7 и D2010.
Как бороться?
Программирую по необходимости

Последний раз редактировалось tsar_; 27.05.2018 в 22:55. Причина: Поправил гифку
tsar_ вне форума Ответить с цитированием
Старый 27.05.2018, 23:44   #2
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Искать ошибку у себя.
У меня нормально.


Код:
procedure TForm1.ListBox1Data(Control: TWinControl; Index: Integer;
 var Data: String);
begin
 Data := ListAns[Index];
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 i:Integer;
 str:String;
 Time1,Time2:Integer;
begin
Time1:=GetTickCount;

str:=Edit1.Text;
Search(str,List,ListAns);
ListBox1.Count := ListAns.Count;

Time2:=GetTickCount;

caption:=Format('Ôàéëîâ=%d; âðåìÿ=%d',[ListAns.Count,Time2-Time1]);
end;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 27.05.2018, 23:58   #3
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Давай сюда, буду посмотреть.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 27.05.2018, 23:58   #4
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

PS. 100 000 - это большой словарь. Если он больше 4 ГБ то D7 не умеет правильно делать seek по файлу тут нужен XE.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 28.05.2018, 00:26   #5
tsar_
Форумчанин
 
Аватар для tsar_
 
Регистрация: 06.01.2011
Сообщений: 369
По умолчанию

Архивчик с проектом
https://drive.google.com/open?id=1XY...X1Pyl1lZtYIHxW
Надеюсь правильно выковырял все, что нужно.
Внутри два файлика .vcb - это словари, один маленький, другой тот самый, обезобразивший прекрасную теорию фактом своего существования.
Программирую по необходимости

Последний раз редактировалось tsar_; 28.05.2018 в 16:01. Причина: Обновил ссылку на архив
tsar_ вне форума Ответить с цитированием
Старый 28.05.2018, 09:29   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Цитата:
Сообщение от tsar_ Посмотреть сообщение
Архивчик с проектом
https://drive.google.com/open?id=1Uo...PoeeCCdiEIK2c7
Скачать удалось только через анонимайзер. Факинг роскомпозор сука!

Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 28.05.2018, 09:36   #7
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Скомпилить не удалося.
Ашыпка вот:

Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 28.05.2018, 12:16   #8
tsar_
Форумчанин
 
Аватар для tsar_
 
Регистрация: 06.01.2011
Сообщений: 369
По умолчанию

Очень жаль
Изображения
Тип файла: jpg d5b4496e7fa08e7cf6a5ee843d999151_1.jpg (51.8 Кб, 54 просмотров)
Программирую по необходимости
tsar_ вне форума Ответить с цитированием
Старый 28.05.2018, 12:20   #9
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Цитата:
Сообщение от tsar_ Посмотреть сообщение
Очень жаль
Я честно старался, чувак!

Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 28.05.2018, 14:40   #10
DIONISKA
Форумчанин
 
Регистрация: 07.11.2011
Сообщений: 156
По умолчанию

Попробуй:

Код:
  TListBox = class(stdctrls.TListBox)
  private
    procedure WMVScroll(var Msg: TWMVScroll); message WM_VSCROLL;
  end;

{...}

{ TListBox }

procedure TListBox.WMVScroll(var Msg: TWMVScroll);
var 
   ScrollInfo   :TScrollInfo;
begin
  Msg.Result:=0;
  case msg.ScrollCode of
  SB_THUMBPOSITION: Exit;
   SB_THUMBTRACK:
      begin
          ZeroMemory(@ScrollInfo, SizeOf(ScrollInfo));
          ScrollInfo.cbSize := SizeOf(ScrollInfo);
          ScrollInfo.fMask := SIF_POS or SIF_TRACKPOS;
          if GetScrollInfo(Handle, SB_VERT, ScrollInfo) and
            (ScrollInfo.nTrackPos <> ScrollInfo.nPos) then
           TopIndex := TopIndex + ScrollInfo.nTrackPos - ScrollInfo.nPos;            
      end
   else inherited;    
  end;
end;
DIONISKA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление в бд больших объемов данных Rifmo PHP 2 04.06.2017 16:13
WPF: отображение больших объемов текста D][mon WPF, UWP, WinRT, XAML 4 08.03.2015 18:09
Падает Word при открытии файлов больших объемов 4-5 метров. Денис Алекс Microsoft Office Word 1 25.02.2012 10:33
добавление в TListView больших объемов инфы m_kostik Компоненты Delphi 10 15.03.2011 23:00
Ввод больших объемов данных из файла Molotoff Общие вопросы C/C++ 15 02.04.2009 16:36