|
Вопрос # 4 806/ вопрос решён / |
|
Здравствуйте, уважаемые эксперты! В реестре есть такая запись REG_MULTI_SZ, т.е. это мультистроковая запись или если говорить проще то много строковая. Так вот собственно вопрос состоит в том, что как можно этот параметр прочесть... например , насколько я визуально это представляю сходство, в ListBox. Ну или на худой конец в строку. Заранее спасибо.
 |
Вопрос задал: eclipse (статус: Посетитель)
Вопрос отправлен: 11 декабря 2010, 10:32
Состояние вопроса: решён, ответов: 1.
|
Ответ #1. Отвечает эксперт: Мережников Андрей
Здравствуйте, eclipse!
Вот такой код приведен в DelphiWorld (см.приложение)
Приложение: Переключить в обычный режим-
- --------------------------------------------------------------------------------
-
-
-
- function ReadMultirowKey(reg: TRegistry; Key: string): TStrings;
- const
- bufsize = 100;
- var
- i: integer;
- s1: string;
- sl: TStringList;
- bin: array[1..bufsize] of char;
- begin
- try
- result := nil;
- sl := nil;
- sl := TStringList.Create;
- if not Assigned(reg) then
- raise Exception.Create('TRegistry object not assigned.');
- FillChar(bin, bufsize, #0);
- reg.ReadBinaryData(Key, bin, bufsize);
- i := 1;
- s1 := '';
- while i < bufsize do
- begin
- if ord(bin[i]) >= 32 then
- s1 := s1 + bin[i]
- else
- begin
- if Length(s1) > 0 then
- begin
- sl.Add(s1);
- s1 := '';
- end;
- end;
- inc(i);
- end;
- result := sl;
- except
- sl.Free;
- raise;
- end;
- end;
-
-
-
 |
Ответ отправил: Мережников Андрей (статус: Абитуриент)
Время отправки: 12 декабря 2010, 18:17
Оценка за ответ: 5
Комментарий к оценке: робит!
|
Мини-форум вопроса
Всего сообщений: 11; последнее сообщение — 17 марта 2012, 18:33; участников в обсуждении: 2.
|
min@y™ (статус: Доктор наук), 11 декабря 2010, 10:37 [#1]:
Не знаю, может ли работать с такими параметрами TRegistry и TRegIniFile, а вот функция RegQueryValueEx() - точно может.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
eclipse (статус: Посетитель), 11 декабря 2010, 10:47 [#2]:
Хм... проверю.
|
|
min@y™ (статус: Доктор наук), 11 декабря 2010, 10:56 [#3]:
А чо проверять-то? В хэлпе написано жеж.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
eclipse (статус: Посетитель), 11 декабря 2010, 10:59 [#4]:
Дык ни разу не пользовался... только TRegistry
|
|
min@y™ (статус: Доктор наук), 11 декабря 2010, 11:05 [#5]:
Теперь придётся...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
min@y™ (статус: Доктор наук), 11 декабря 2010, 11:06 [#6]:
Кстати, а что возвращает TRegistry при чтении параметра такого типа? Эксперименты проводились?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
eclipse (статус: Посетитель), 11 декабря 2010, 11:12 [#7]:
Да пипец! Там целая наука! Не помню точно но там сперва надо определить тип параметра потом ещё чё - то тока потом попытаться считать данные , и то такой функции нету нифига... тока read string, boolea, и ещё какие - то левые... я в общем парился почти день с этакой ерундой пока не плюнул на TRegistry
|
|
min@y™ (статус: Доктор наук), 11 декабря 2010, 11:20 [#8]:
Напиши свой класс-наследник TRegisry и счтением/записью параметров типа REG_MULTI_SZ и выложи на сайт. Выйдешь из минуса по репутации. ))
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
eclipse (статус: Посетитель), 11 декабря 2010, 11:28 [#9]:
Да пофиг не репу
|
|
eclipse (статус: Посетитель), 11 декабря 2010, 11:29 [#10]:
как сделаю всеравно кину
|
12 декабря 2010, 19:27: Статус вопроса изменён на решённый (изменил автор вопроса — eclipse)
|
eclipse (статус: Посетитель), 17 марта 2012, 18:33 [#11]:
Вот нашёл единственно верное и правильно работающее решение:
function ReadMultirowKey(Reg: TRegistry; ValueName: string): TStrings;
var valueType: DWORD;
valueLen: DWORD;
p, buffer: PChar;
key: HKEY;
Strings: TStrings;
begin
if RegOpenKeyEx(Reg.RootKey, PChar(Reg.CurrentPath), 0, KEY_READ, key) = ERROR_SUCCESS then
begin
SetLastError(RegQueryValueEx(key, PChar(ValueName), nil, @valueType, nil, @valueLen));
if GetLastError = ERROR_SUCCESS then
if valueType = REG_MULTI_SZ then
begin
Strings:= TStringList.Create;
GetMem(buffer, valueLen);
try
RegQueryValueEx(key, PChar(ValueName), nil, nil, PBYTE(buffer), @valueLen);
p := buffer;
while p^ <> #0 do
begin
Strings.Add(p);
Inc(p, lstrlen(p) + 1)
end
finally
FreeMem(buffer);
Result:= Strings;
end;
end;
end;
end;
min@y™: что ты там говорил...?
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|