Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.06.24;
Скачать: CL | DM;

Вниз

Что неверно в этом коде?   Найти похожие ветки 

 
Грициан   (2007-04-25 14:56) [0]


type
 TEditStreamCallBack = function (dwCookie : DWORD; buf : PWideChar;
bytestoread : LongInt; var bytesread : LongInt): DWORD; stdcall;

 TEditStream = record
   dwCookie: Longint;
   dwError: Longint;
   pfnCallback: TEditStreamCallBack;
 end;

 StreamOps = (readop, writeop);

 TRTFCookieData = record
   streamop : readop..writeop;
   UnicodeBuff: PWideChar;
 end;
 PRTFData = ^TRTFCookieData;

function EditStreamCallBack(dwCookie : DWORD; buf : PWideChar;
bytestoread : LongInt; var bytesread : LongInt): DWORD; stdcall;
var
  UnicodeBuff: PWideChar;
  RTFData : PRTFData;
begin
    RTFData := PRTFData(dwCookie);
    UnicodeBuff := RTFData.UnicodeBuff;
    result := S_OK;
    bytesread := 0;
    try
       if RTFData.streamop = readop then
        Move(UnicodeBuff, buf, bytestoread)
       else
         Move(buf, UnicodeBuff, bytestoread);
       bytesread := bytestoread;
    except
       result := S_FALSE;
    end;
end;

procedure RTF_To_Stream(RE : THandle; Buff: PWideChar);
var
  CookieData : TRTFCookieData;
  EditStream : TEditStream;
begin
    CookieData.streamop := writeop;
    CookieData.UnicodeBuff := Buff;
    EditStream.dwCookie := DWORD(@CookieData);
    EditStream.pfnCallback := EditStreamCallBack;
    EditStream.dwError := S_OK;
    SendMessage(RE, EM_STREAMOUT, SF_TEXT or SF_UNICODE, LongInt(@EditStream));
end;

procedure RTF_From_Stream(RE : THandle; Buff: PWideChar);
var
  CookieData : TRTFCookieData;
  EditStream : TEditStream;
begin
    CookieData.streamop := readop;
    CookieData.UnicodeBuff := Buff;
    EditStream.dwCookie := DWORD(@CookieData);
    EditStream.pfnCallback := EditStreamCallBack;
    EditStream.dwError := S_OK;
    SendMessage(RE, EM_STREAMIN, SF_TEXT or SF_UNICODE, LongInt(@EditStream));
end;

function TJvCustomRichEdit.GetTextW(): WideString;
var
 Buff: PWideChar;
begin
   Buff := AllocMem(GetTextLen * SizeOf(WideChar));
   RTF_To_Stream(Handle, Buff);
   Result := Buff;
end;

Хочу получить юникодный текст из RichEdit. В коллбек функции видно, что данные таки передаются. Но при выходе из функции получаю AV. Что тут неправильно?


 
clickmaker ©   (2007-04-25 15:54) [1]

GetTextLen * SizeOf(WideChar) + 1);
на null-терминатор


 
icWasya ©   (2007-04-25 15:58) [2]

по синтаксису Паскаля вместо
Move(UnicodeBuff, buf, bytestoread)
нужно
Move(UnicodeBuff^, buf^, bytestoread)



Страницы: 1 вся ветка

Текущий архив: 2007.06.24;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.013 c
15-1180424184
Int23
2007-05-29 11:36
2007.06.24
Где взять прогнозы погоды за 2005 год?


2-1180686571
KyRo
2007-06-01 12:29
2007.06.24
Частота дискредитации


1-1177588749
Mr.Devil
2007-04-26 15:59
2007.06.24
Текст на фотографии


15-1180109668
ProgRAMmer Dimonych
2007-05-25 20:14
2007.06.24
Подкиньте, пожалуйста, ссылку


3-1175235625
Ulugbek
2007-03-30 10:20
2007.06.24
Как проверить таблицу на запись