| 
| 
 | Вопрос # 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] [Следующая »]  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |