|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Помогите прочитать reg файл в RichEdit или ListBox
Помогите Пожалуйста кто знает.
Я экспортировал из реестра в файл zum.reg ключ, но не могу занести строки из него в RichEdit, выдаёт пару символов и кучу пустых строк. Я так понимаю всё дело в кодировке, так как похоже что reg файл в Unicode, но как это добро перекодировать в понятный для RichEdit формат. Если можно, то напишите пример. Заранее спасибо. Я собственно пытался прочитать полученыый reg файл способом написанным ниже, но увы ничего не выходит. Код:
procedure TForm1.Button1Click(Sender: TObject); Var f: TextFile; s: WideString; Begin AssignFile(F, 'zum.reg'); Reset(F); While not Eof(F) Do Begin ReadLn(F, s); RichEdit1.Lines.Add(AnsiString(s)); End; closefile(f); end; Последний раз редактировалось Admin, 08.06.2008 в 11:05. |
#2
|
||||
|
||||
Используем тег [сode]..[/code]!
|
#3
|
|||
|
|||
А почему нельзя прочитать ключ из реестра непосредственно в RichEdit не используя файл? Или так задача поставлена?
Не забывайте делать резервные копии |
#4
|
||||
|
||||
2 Варианта решения данной проблемы:
1. Поставить значение свойства PlainText true. 2. Читать файл построчно и добавлять их - RichEdit.Lines.Add(Stroka); Просто при обыкновенном считывании строк из reg-файла компонент RichEdit интерпретирует слэши как команды форматирования Хорошо написанная программа не требует документации ICQ 9-184-668. |
#5
|
|||
|
|||
Цитата:
Цитата:
Первый вариант не помогает, а вариант номер два я и так использовал в приведённом примере. |
#6
|
|||
|
|||
Код:
procedure TForm1.Button3Click(Sender: TObject); var F : File; Sz : Integer; Str : WideString; begin AssignFile(F, 'zum.reg'); Reset(F, 1); Sz := FileSize(F); setLength(Str, Sz+2); BlockRead(F, Str[1], Sz); CloseFile(F); Memo1.Lines.Add(Str) end; Наверное, эту часть легко отбросить. ИМХО, это лучше, чем многочисленные советы в форумах, где предпочтение отдается сканированию считанной строки unicode в цикле и формированию Ansistring. Не забывайте делать резервные копии Последний раз редактировалось san-46, 09.06.2008 в 14:04. |
#7
|
|||
|
|||
Вообще то, не просто оказалось удалить ненужную часть строки из Unicode. Приходится преобразовывать Unicode в Ansistring.
Помогла функция взятая из DelphiWorld. Код:
function WideStringToString(const ws: WideString; codePage: Word): AnsiString; var l: integer; begin if ws = '' then Result := '' else begin l := WideCharToMultiByte(codePage, WC_COMPOSITECHECK or WC_DISCARDNS or WC_SEPCHARS or WC_DEFAULTCHAR, @ws[1], -1, nil, 0, nil, nil); SetLength(Result, l - 1); if l > 1 then WideCharToMultiByte(codePage, WC_COMPOSITECHECK or WC_DISCARDNS or WC_SEPCHARS or WC_DEFAULTCHAR, @ws[1], -1, @Result[1], l - 1, nil, nil); end; end; procedure TForm1.Button3Click(Sender: TObject); var F : File; Sz : Integer; Str : WideString; S : String; begin AssignFile(F, 'zum.reg'); Reset(F, 1); Sz := FileSize(F); setLength(Str, Sz+2); BlockRead(F, Str[1], Sz); CloseFile(F); S := WideStringToString(Str, CP_ACP); if Length(S) > 10 then begin Sz := Pos('?????', S); if Sz > 0 then S := Copy(S, 1, Sz-1); end; Memo1.Lines.Add(S) end; Не забывайте делать резервные копии |
#8
|
|||
|
|||
san-46
Спасибо огромадное!!!! Всё работает, Ура!!! |