Показать сообщение отдельно
  #7  
Старый 09.06.2008, 14:24
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

Вообще то, не просто оказалось удалить ненужную часть строки из 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;
Теперь преобразование нормально работает (D7).
__________________
Не забывайте делать резервные копии
Ответить с цитированием