Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 451

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
К Вам у меня такой вопрос :

1. Я сперва сохраняю весь реестр в файл 1.reg(вручную)
2. Потом загружаю его в ListBox.
3. Делаю в нём выборку нужного и ненужного.

Как можно ускорить процесс загрузки файла 1.reg в ListBox? ну или может есть другой какой-нибудь вариант по лучше?

Заранее СПАСИБО!

eclipse Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: eclipse (статус: Посетитель)
Вопрос отправлен: 27 ноября 2009, 20:22
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, eclipse!
Вся проблема в том, что время загрузки данных в ListBox/Memo и подобных компонентов не прямо пропорционально кол-ву строк, а в геометрической прогрессии. Но есть один надежный способ загрузить хоть миллион строк в ListView (а его, чуточку подконфигурировав, можно сделать неотличимым ListBox). Для этого надо перевести его в виртуальный режим. Прочитайте мою стратью Виртуальный ListView и все станет на свои места.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 27 ноября 2009, 20:52
Оценка за ответ: 5

Комментарий к оценке: Спасибоооо! Ваш сайт самый лучший!

Мини-форум вопроса

Всего сообщений: 34; последнее сообщение — 28 ноября 2009, 21:44; участников в обсуждении: 5.

Страницы: [1] [2] [Следующая »]

min@y™

min@y™ (статус: Доктор наук), 28 ноября 2009, 09:53 [#1]:

Цитата:


ну или может есть другой какой-нибудь вариант по лучше?


А скидывать реестр в файл обязательно?
Может проще работать с реестром напрямую?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

28 ноября 2009, 10:30: Вопрос перемещён из тематического раздела Delphi » Взаимодействие с Windows в раздел Delphi » Работа с компонентами и библиотеками модератором Ерёмин А.А.

Ерёмин А.А.

Ерёмин А.А. (статус: *Администратор), 28 ноября 2009, 10:32 [#2]:

Цитата (min@y™):

Может проще работать с реестром напрямую?

Здравая мысль. А ещё может банально не хватить прав, чтобы залезть во все глубинки реестра.
unl0K

unl0K (статус: Посетитель), 28 ноября 2009, 12:45 [#3]:

А зачем делать виртуальный ListView и потом переделывать его под ListBox, если ListBox можно сделать также виртуальным?
Относись к людям так, как хотел бы, чтобы они к тебе относились!
min@y™

min@y™ (статус: Доктор наук), 28 ноября 2009, 13:05 [#4]:

Цитата (unl0K):

А зачем делать виртуальный ListView и потом переделывать его под ListBox, если ListBox можно сделать также виртуальным?


Да если вопрос читать между строк, то создаётся впечатление, что челу нужно просто найти и дёрнуть нужную инфу из реестра. Для этого не надо ни файла REG, ни листбокса, ни листвью.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Вадим К

Вадим К (статус: Академик), 28 ноября 2009, 16:33 [#5]:

Цитата (unl0K):

А зачем делать виртуальный ListView и потом переделывать его под ListBox, если ListBox можно сделать также виртуальным?

Тут все просто. Это как в анекдоте - "что бы закипятить воду в чайнике, надо налить туда воды и поставить на плиту. А если чайник уже с водой? вылить воду, а дальше по накатанному алгоритму!".
Здесь таже история. Для ListView есть накатанное решение. Для ListBox надо отлаживать (хотя там не все так сложно). Плюс, судя по вопросу, может захотется и ключи и значение отображать, а тут уже ListView самое оно.
Галочка "подтверждения прочтения" - вселенское зло.
eclipse

eclipse (статус: Посетитель), 28 ноября 2009, 16:44 [#6]:

Полностью согласен С Ерёминым. теперь полностью раскрываю свою задумку :
1.Создаётся программа в которой 2 ListBox, и кнопочки.
2.В первый загружаем (ну пока вручную экспортированный файл реестра).
3.Затем по введённому слову начинаем искать то что удовлетворяет запросу и найденное добавляется во второй ListBox.
4.Затем всё это сохраняется в файл.

Я же писал что ели есть мысль по-лучше то подскажите!

ВОТ КОД :

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
lst1: TListBox;
btn1: TButton;
btn2: TButton;
btn3: TButton;
edt1: TEdit;
lbl1: TLabel;
lst2: TListBox;
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure btn3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
z:Integer;
implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
begin
Lst1.Items.BeginUpdate;
try
lst1.items.LoadFromFile('1.reg');
finally
Lst1.Items.EndUpdate;
end;
end;

procedure TForm1.btn2Click(Sender: TObject);
begin
lst2.Items.SaveToFile('Generated.reg');
end;

procedure TForm1.btn3Click(Sender: TObject);
var i,x:Integer;
begin
for i:=0 to lst1.Items.Count-1 do
begin
if (Pos(edt1.text, lst1.Items.Strings[i])<>0) then
begin
x:=i;
if (lst1.Items.Strings[x]<>'') and (Pos('[HKEY_', lst1.Items.Strings[x])<>0) then begin
if lst1.Items.Strings[x+1]='' then
begin
lst2.Items.Add(lst1.Items.Strings[x]);
lst2.Items.Add('');
lst1.ItemIndex:=x;
end;
end else
if (lst1.Items.Strings[x-1]<>'') then
begin
while lst1.Items.Strings[x]<>'' do
begin
x:=x-1;
lst1.ItemIndex:=x;
end;
x:=x+1;
lst2.Items.Add(lst1.Items.Strings[x]);
lst1.ItemIndex:=x;
while lst1.Items.Strings[x]<>'' do
begin
x:=x+1;
lst2.Items.Add(lst1.Items.Strings[x]);
lst1.ItemIndex:=x;
end;

end;
end;

end;
end;

end.

Использую Delphi Lite
unl0K

unl0K (статус: Посетитель), 28 ноября 2009, 16:51 [#7]:

Мне интересно сколько времени грузятся данные в ListBox ?
Минутана, больше?
Относись к людям так, как хотел бы, чтобы они к тебе относились!
eclipse

eclipse (статус: Посетитель), 28 ноября 2009, 16:53 [#8]:

Блин! Лучше не спрашивай... :))))))))))))
unl0K

unl0K (статус: Посетитель), 28 ноября 2009, 17:03 [#9]:

Сделайте так:
Объявите глобальную переменную List:TStringList;
Загружайте данные не в ListBox а именно в этот List
//Загрузка
List:=TStringList.Create; //Создаем
List.LoadFromFile('C:\test.reg'); //Загружаем
//
ListBox1.Style:=lbVirtual; //Виртуальный ListBox
ListBox1.Count:=List.Count; //Задаем кол-во элементов
//В обработчике OnData отображаем элементы
Data:=List[Index];
//На OnClose убиваем List
List.Free;
---------
Но по моему вам не за чем отображать первый ListBox, а заначит можно работать чисто с TStringList, делать запросы и ссылаться на него, а не на ListBox, хотя и в том случае который я описал, тоже нужно работать с TStringList.
Но скорость будет заметно быстрее.
Относись к людям так, как хотел бы, чтобы они к тебе относились!
min@y™

min@y™ (статус: Доктор наук), 28 ноября 2009, 17:10 [#10]:

Цитата (eclipse):

Блин! Лучше не спрашивай... :))))))))))))


Скажи, уважаемый, ЗАЧЕМ тебе всё это, а?
Для чего будет нужна твоя прога, какие задачи она будет выполнять?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
eclipse

eclipse (статус: Посетитель), 28 ноября 2009, 17:22 [#11]:

Для удобства!
Чтобы например установить Nero без всяких вмешательств.
Т.е. Устанавливаю прогу вручную, потом нахожу все её файлы и архивирую, и туда же запихиваю тот самый файл реестра, который потом добавляется в реестр.

Вы скажите На кой это всё! есть же команды через которые можно сделать всё предварительно указав их в командной строке... я отвечу - в таких случаях не всё устанавливается так как мне нужно (некоторые компоненты и так далее).

И потом.... при переустановке винды просто дабл клик по файлу этому и усё!
eclipse

eclipse (статус: Посетитель), 28 ноября 2009, 17:32 [#12]:

Яху!!! СПАСИБО unlOK! Всё попёрло!
min@y™

min@y™ (статус: Доктор наук), 28 ноября 2009, 17:37 [#13]:

Нихрена себе удобство.
Это изобретение велосипеда с квадратными колёсами и с ракетным двигателем (© Вадим К). Таких программ в инете - хренова гора, в них вообще всё одной кнопкой делается. Даже сохранение/восстановление Delphi со всеми левыми компонентами и настройками.

Насчёт неро: я поставил Windows 7 на другой винт и стал из-под него просто запускать программы, установленные под Windows XP с первого винта. 90% программ (в т.ч. неро) без проблем запустились, создали свои настройки по умолчанию и заработали, как родные. Даже зарегистрировали свои расширения файлов, иконки и т.п. Это я так, к слову.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 28 ноября 2009, 17:46 [#14]:

Этот вопрос вместе с форумом в точности описывает сага об X-Y-Z.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
eclipse

eclipse (статус: Посетитель), 28 ноября 2009, 17:46 [#15]:

Нет ты видимо не понял меня я имею в виду ставить таким образом программы на тот комп на котором нет ни единой программы (голый), да к тому же приходится общаться с такими ламерами, которые программу не могут установить и б..я начинают названивать и по сто раз переспрашивать че да как!
min@y™

min@y™ (статус: Доктор наук), 28 ноября 2009, 17:49 [#16]:

Цитата (eclipse):

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


Всё я понял, а ты внимательно читай мои посты. Цитирую:

Цитата (min@y™):

Таких программ в инете - хренова гора, в них вообще всё одной кнопкой делается.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
unl0K

unl0K (статус: Посетитель), 28 ноября 2009, 17:52 [#17]:

То есть, вы хотите написать приложение позволяющие создавать "тихую установку" к ПО?
Относись к людям так, как хотел бы, чтобы они к тебе относились!
Вадим К

Вадим К (статус: Академик), 28 ноября 2009, 17:52 [#18]:

Оригинальный способ устанавливать софт. Я понимаю ещё после установки применить файл для реестра, что бы подкрутить настройки.

То min@y™
Это не велосипед с квадратными колесами:) Это называется чуточку по другому. "возьмите наш велосипед с ровными колесами и погните их до нужной кондиции". ( (с) разработчики библиотек для Python)
Галочка "подтверждения прочтения" - вселенское зло.
eclipse

eclipse (статус: Посетитель), 28 ноября 2009, 17:55 [#19]:

Блин! я всё прочёл внимательно бывают разные случаи!

вот например в этой хреновой тучи всё равно установка хоть и одной кнопкой но в этом паке есть те вещи которые просто я точно знаю что тому кому я ставлю их эти компоненты не нужны.

В одном случае приходилось писать программу такую :

загружается система во весь экран появлялась программа (как меню), и там написано посмотреть фильм, послушать музыку, выключить компьютер и тка далее, т.е. б...я всё тупо для ламеров
min@y™

min@y™ (статус: Доктор наук), 28 ноября 2009, 17:57 [#20]:

Не все проги хранят свои настройки в реестре.
Не все проги пользуются относительными путями.
Не на всех компах Windows болтается на диске Ц.
Не все юзеры работают с правами администратора.
Не все программы не зависят от установленного железа и периферии.

Этот список можно продолжать очень долго...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

Страницы: [1] [2] [Следующая »]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 1 апреля 2023, 20:23
Выполнено за 0.02 сек.
Рейтинг@Mail.ru