|
Вопрос # 3 451/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
К Вам у меня такой вопрос :
1. Я сперва сохраняю весь реестр в файл 1.reg(вручную)
2. Потом загружаю его в ListBox.
3. Делаю в нём выборку нужного и ненужного.
Как можно ускорить процесс загрузки файла 1.reg в ListBox? ну или может есть другой какой-нибудь вариант по лучше?
Заранее СПАСИБО!
 |
Вопрос задал: 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™ (статус: Доктор наук), 28 ноября 2009, 09:53 [#1]:
Цитата:
ну или может есть другой какой-нибудь вариант по лучше?
А скидывать реестр в файл обязательно?
Может проще работать с реестром напрямую?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
28 ноября 2009, 10:30: Вопрос перемещён из тематического раздела Delphi » Взаимодействие с Windows в раздел Delphi » Работа с компонентами и библиотеками модератором Ерёмин А.А.
|
Ерёмин А.А. (статус: *Администратор), 28 ноября 2009, 10:32 [#2]:
Цитата (min@y™):
Может проще работать с реестром напрямую?
Здравая мысль. А ещё может банально не хватить прав, чтобы залезть во все глубинки реестра.
|
|
unl0K (статус: Посетитель), 28 ноября 2009, 12:45 [#3]:
А зачем делать виртуальный ListView и потом переделывать его под ListBox, если ListBox можно сделать также виртуальным?
Относись к людям так, как хотел бы, чтобы они к тебе относились!
|
|
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 (статус: Посетитель), 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 (статус: Посетитель), 28 ноября 2009, 16:51 [#7]:
Мне интересно сколько времени грузятся данные в ListBox ?
Минутана, больше?
Относись к людям так, как хотел бы, чтобы они к тебе относились!
|
|
eclipse (статус: Посетитель), 28 ноября 2009, 16:53 [#8]:
Блин! Лучше не спрашивай... )))))))))))
|
|
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™ (статус: Доктор наук), 28 ноября 2009, 17:10 [#10]:
Цитата (eclipse):
Блин! Лучше не спрашивай...  )))))))))))
Скажи, уважаемый, ЗАЧЕМ тебе всё это, а?
Для чего будет нужна твоя прога, какие задачи она будет выполнять?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
eclipse (статус: Посетитель), 28 ноября 2009, 17:22 [#11]:
Для удобства!
Чтобы например установить Nero без всяких вмешательств.
Т.е. Устанавливаю прогу вручную, потом нахожу все её файлы и архивирую, и туда же запихиваю тот самый файл реестра, который потом добавляется в реестр.
Вы скажите На кой это всё! есть же команды через которые можно сделать всё предварительно указав их в командной строке... я отвечу - в таких случаях не всё устанавливается так как мне нужно (некоторые компоненты и так далее).
И потом.... при переустановке винды просто дабл клик по файлу этому и усё!
|
|
eclipse (статус: Посетитель), 28 ноября 2009, 17:32 [#12]:
Яху!!! СПАСИБО unlOK! Всё попёрло!
|
|
min@y™ (статус: Доктор наук), 28 ноября 2009, 17:37 [#13]:
Нихрена себе удобство.
Это изобретение велосипеда с квадратными колёсами и с ракетным двигателем (© Вадим К). Таких программ в инете - хренова гора, в них вообще всё одной кнопкой делается. Даже сохранение/восстановление Delphi со всеми левыми компонентами и настройками.
Насчёт неро: я поставил Windows 7 на другой винт и стал из-под него просто запускать программы, установленные под Windows XP с первого винта. 90% программ (в т.ч. неро) без проблем запустились, создали свои настройки по умолчанию и заработали, как родные. Даже зарегистрировали свои расширения файлов, иконки и т.п. Это я так, к слову.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
min@y™ (статус: Доктор наук), 28 ноября 2009, 17:46 [#14]:
Этот вопрос вместе с форумом в точности описывает сага об X-Y-Z.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
eclipse (статус: Посетитель), 28 ноября 2009, 17:46 [#15]:
Нет ты видимо не понял меня я имею в виду ставить таким образом программы на тот комп на котором нет ни единой программы (голый), да к тому же приходится общаться с такими ламерами, которые программу не могут установить и б..я начинают названивать и по сто раз переспрашивать че да как!
|
|
min@y™ (статус: Доктор наук), 28 ноября 2009, 17:49 [#16]:
Цитата (eclipse):
Нет ты видимо не понял меня я имею в виду ставить таким образом программы на тот комп на котором нет ни единой программы (голый), да к тому же приходится общаться с такими ламерами, которые программу не могут установить и б..я начинают названивать и по сто раз переспрашивать че да как!
Всё я понял, а ты внимательно читай мои посты. Цитирую:
Цитата (min@y™):
Таких программ в инете - хренова гора, в них вообще всё одной кнопкой делается.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
unl0K (статус: Посетитель), 28 ноября 2009, 17:52 [#17]:
То есть, вы хотите написать приложение позволяющие создавать "тихую установку" к ПО?
Относись к людям так, как хотел бы, чтобы они к тебе относились!
|
|
Вадим К (статус: Академик), 28 ноября 2009, 17:52 [#18]:
Оригинальный способ устанавливать софт. Я понимаю ещё после установки применить файл для реестра, что бы подкрутить настройки.
То min@y™
Это не велосипед с квадратными колесами Это называется чуточку по другому. "возьмите наш велосипед с ровными колесами и погните их до нужной кондиции". ( (с) разработчики библиотек для Python)
Галочка "подтверждения прочтения" - вселенское зло.
|
|
eclipse (статус: Посетитель), 28 ноября 2009, 17:55 [#19]:
Блин! я всё прочёл внимательно бывают разные случаи!
вот например в этой хреновой тучи всё равно установка хоть и одной кнопкой но в этом паке есть те вещи которые просто я точно знаю что тому кому я ставлю их эти компоненты не нужны.
В одном случае приходилось писать программу такую :
загружается система во весь экран появлялась программа (как меню), и там написано посмотреть фильм, послушать музыку, выключить компьютер и тка далее, т.е. б...я всё тупо для ламеров
|
|
min@y™ (статус: Доктор наук), 28 ноября 2009, 17:57 [#20]:
Не все проги хранят свои настройки в реестре.
Не все проги пользуются относительными путями.
Не на всех компах Windows болтается на диске Ц.
Не все юзеры работают с правами администратора.
Не все программы не зависят от установленного железа и периферии.
Этот список можно продолжать очень долго...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
Страницы: [1] [2] [Следующая »]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|