Форум: "Основная";
Текущий архив: 2007.06.24;
Скачать: [xml.tar.bz2];
ВнизЧто неверно в этом коде? Найти похожие ветки
← →
Грициан (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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.041 c