![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Помогите Пожалуйста кто знает.
Я экспортировал из реестра в файл 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 интерпретирует слэши как команды форматирования |
|
#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
Спасибо огромадное!!!! Всё работает, Ура!!! |