Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2009, 22:26   #1
Миша
Пользователь
 
Регистрация: 13.09.2007
Сообщений: 63
Вопрос Конвертировать строку из ANSI в UNICODE

Доброго времени суток. Мне нужно конвертировать строку из ANSI в UNICODE с использованием функции StringToWideChar но я не знаю как эта функция работает. Это нужно чтобы вставить текст из буфера обмена в строчку S а из неё в Memo.

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
S:AnsiString;
begin
S:=ClipBoard.AsText;

{??? Конвертировать строку из ANSI в UNICODE с использованием функции StringToWideChar ???}

Memo1.Text:=S;
end;

Последний раз редактировалось Миша; 27.12.2009 в 22:28.
Миша вне форума Ответить с цитированием
Старый 27.12.2009, 22:33   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Returns a UNICODE string from an AnsiString.

Unit
System

Category
character set conversions

Delphi syntax:

function StringToWideChar(const Source: string; Dest: PWideChar; DestSize: Integer): PWideChar;
Вы что - хэлпом пользоваться не умеете?
mihali4 вне форума Ответить с цитированием
Старый 27.12.2009, 22:44   #3
Миша
Пользователь
 
Регистрация: 13.09.2007
Сообщений: 63
По умолчанию

Может вопрос покажется вам глупим но что ставить вместо PWideChar?
Миша вне форума Ответить с цитированием
Старый 27.12.2009, 23:08   #4
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от Миша Посмотреть сообщение
Может вопрос покажется вам глупим но что ставить вместо PWideChar?
Код:
var
  buffer: array[0..1024] of WideChar;
BOBAH13 вне форума Ответить с цитированием
Старый 27.12.2009, 23:19   #5
Миша
Пользователь
 
Регистрация: 13.09.2007
Сообщений: 63
По умолчанию

Кто небудь может сбросить мне готовый пример где Memo1.Text присваивается уже готовая UNICODE строчка S

Последний раз редактировалось Миша; 27.12.2009 в 23:58.
Миша вне форума Ответить с цитированием
Старый 28.12.2009, 11:21   #6
Marsel737
Форумчанин
 
Аватар для Marsel737
 
Регистрация: 09.11.2009
Сообщений: 669
По умолчанию

Миша, наверна стоило поискать сначала здесь: Яндекс, или вот вам сразу что я нашол Клик-Клак
Я не всегда знаю, о чем говорю, но знаю, что прав. © Мухаммед Али.
К чёрту обстоятельства. Я создаю возможности. © Брюс Ли
Marsel737 вне форума Ответить с цитированием
Старый 28.12.2009, 14:41   #7
Миша
Пользователь
 
Регистрация: 13.09.2007
Сообщений: 63
По умолчанию

Пишу
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  WC: array[0..1024] of WideChar;
   S: String;
begin
  // Задание значения нашей строке
  S:=ClipBoard.AsText;

  // Копирование в формат WideChar в наш массив
  StringToWideChar(S, WC, Length(S)+1);

  // Показываем, что копирование дало
Memo1.Text:=WideCharToString(WC);
end;
но при копировании из блокнота вставляется
Цитата:
1. ??? ????????? ?????? ?????????? PHP
????? ??????? ?????? ????????? ?????? ??? ?????? PHP - ??????????????? ??????????? ???????? mail. ??? ????? ????????? ?????????:
Почему (вместо русских букв) вставляется не текст а знаки вопроса??? В чем проблема???

Последний раз редактировалось Миша; 28.12.2009 в 14:45.
Миша вне форума Ответить с цитированием
Старый 28.12.2009, 16:59   #8
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Посмотрите темку
http://programmersforum.ru/showthread.php?p=333176
mihali4 вне форума Ответить с цитированием
Старый 28.12.2009, 18:23   #9
Миша
Пользователь
 
Регистрация: 13.09.2007
Сообщений: 63
По умолчанию

Делаю всё как в примере
Код:
implementation

{$R *.dfm}

function GetDosOutput(CommandLine: string; Work: string = 'C:\' ): string;
var
  SA: TSecurityAttributes;
  SI: TStartupInfo;
  PI: TProcessInformation;
  StdOutPipeRead, StdOutPipeWrite: THandle;
  WasOK: Boolean;
  Buffer: array[0..255] of Char;
  BytesRead: Cardinal;
  WorkDir: string;
  Handle: Boolean;
begin
  Result := '';
  with SA do begin
    nLength := SizeOf(SA);
    bInheritHandle := True;
    lpSecurityDescriptor := nil;
  end;
  CreatePipe(StdOutPipeRead, StdOutPipeWrite, @SA, 0);
  try
    with SI do
    begin
      FillChar(SI, SizeOf(SI), 0);
      cb := SizeOf(SI);
      dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
      wShowWindow := SW_HIDE;
      hStdInput := GetStdHandle(STD_INPUT_HANDLE); // don't redirect stdin
      hStdOutput := StdOutPipeWrite;
      hStdError := StdOutPipeWrite;
    end;
    WorkDir := Work;
    Handle := CreateProcess(nil, PChar('cmd.exe /C ' + CommandLine),
                            nil, nil, True, 0, nil,
                            PChar(WorkDir), SI, PI);
    CloseHandle(StdOutPipeWrite);
    if Handle then
      try
        repeat
          WasOK := ReadFile(StdOutPipeRead, Buffer, 255, BytesRead, nil);
          if BytesRead > 0 then
          begin
            Buffer[BytesRead] := #0;
            Result := Result + Buffer;
          end;
        until not WasOK or (BytesRead = 0);
        WaitForSingleObject(PI.hProcess, INFINITE);
      finally
        CloseHandle(PI.hThread);
        CloseHandle(PI.hProcess);
      end;
  finally
    CloseHandle(StdOutPipeRead);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
S:String;
begin
S:=ClipBoard.AsText;
 Memo1.Text:=GetDosOutput(S);
end;
результат в Memo вот какой
Цитата:
"1." *¥ ï¥âáï ¢*ãâà¥**¥© ¨«¨ ¢*¥è*¥©
ª®¬**¤®©, ¨á¯®«*塞®© ¯à®£à*¬¬®© ¨«¨ ¯*ª¥â*ë¬ ä*©«®¬.
Когда вместо Buffer: array[0..255] of Char; подставляю Buffer: array[0..255] of AnsiChar; получается что в Мемо вставляется вот что.
Цитата:
"Š®£¤*" *¥ ï¥âáï ¢*ãâà¥**¥© ¨«¨ ¢*¥è*¥©
ª®¬**¤®©, ¨á¯®«*塞®© ¯à®£à*¬¬®© ¨«¨ ¯*ª¥â*ë¬ ä*©«®¬.
Когда вместо Buffer: array[0..255] of Char; подставляю Buffer: array[0..255] of WhideChar; получается что в Мемо вставляется вот что.
Цитата:
??????????????????????????????????? ???????????????????C????D????C ??????
Миша вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ansi в UTF-8 и наоборот UTF-8 в Ansi Alar Работа с сетью в Delphi 3 09.12.2010 17:02
ASCII в ANSI JRcoker Общие вопросы Delphi 5 03.08.2008 15:49
ANSI HunterMan Win Api 2 18.04.2008 23:17
юникод в ANSI techner Общие вопросы Delphi 6 12.12.2007 20:40
Перевод кодов символов формата Unicode в строку sshaitan Общие вопросы Delphi 0 12.09.2007 19:09