Форум: "Основная";
Текущий архив: 2003.06.30;
Скачать: [xml.tar.bz2];
ВнизТребуется справка по справке Найти похожие ветки
← →
Volly (2003-06-17 10:11) [0]В одном help-е есть такая заметка:
Вопрос: Как вставить в нужное место Rich Text в TRichEdit?
Ответ: Вы можете послать сообщение EM_STREAMIN с параметром SFF_SELECTION методом Perform для замены текущего Selection.
А где определять этот самый Rich Text? Пробовал третьим параметром вставлять LongInt(@S), где S - это обычный string. Не помогает. Пожалуйста помогите. Thanks!
P.S. А может я не так понял смысл вопроса?
← →
MBo (2003-06-17 11:37) [1]я вот твоего вопроса смысл не понял - ты этому хелпу удивляешься платонически или у тебя задача стоит RTF вставлять? Если второе, то достаточно внимательно прочитать хелп по EM_STREAMIN и See Also
← →
Volly (2003-06-17 12:27) [2]Да... кажется я еще больший чайник нежели представлял раньше... :0)
← →
Volly (2003-06-17 12:52) [3]> или у тебя задача стоит RTF вставлять
Да.
А где этот хелп отыскать? Ищу в своем дельфийском хелпе но слову em_streamin, нет результатов...
← →
MBo (2003-06-17 13:30) [4]WinSDK Help
← →
Volly (2003-06-17 14:09) [5]
> MBo © (17.06.03 13:30)
Нашел. Прочитал. Умоляю! Напиши(те) example, а? PLEASE!!! Буду безмерно благодарен.
← →
MBo (2003-06-17 14:28) [6]Дык... Прочитал же, вот и пиши, как в хелпе.
Пошли соообщение, указав последним параметром адрес структуры TEditStream, содержащей в себе адрес callback-функции (именно так описанной, как в richedit.pas, НЕ МЕТОД класса и stdcall)
в callback pbBuff заполняй RTF-данными.
← →
Volly (2003-06-17 14:56) [7]Короче, либо я тупой, либо тупой Delphi, либо я полный ноль в английском языке, но в конце концов у меня получилось:
procedure TForm1.Button1Click(Sender: TObject);
var es:TEditStream;
s:string;
begin
s:="TEST";
es.pfnCallback(1,PByte(4),4,LongInt(@string(s)));
SendMessage(RichEdit1.Handle,EM_STREAMIN,SF_RTF,LongInt(@es))
end;
При попытке запуска выдает ошибку: Constant object cannot be passed as var parameter. Что делать не знаю.
Как я понял, то четвертый параметр в pfnCallBack служит для указания на переменную, указать которую я и пытался. Назначение третьего параметра мне понимается как указание на число байтов (символов) для вставки в RichEdit. Назначение первых двух параметров я не понял вообще :0(.
← →
MBo (2003-06-17 16:15) [8]набросок
procedure TForm1.FormCreate(Sender: TObject);
begin
richedit1.Lines.Text := "111222333444";
richedit2.Lines.Text := "aaabbbccc";
richedit2.selstart := 3;
richedit2.sellength := 3;
richedit1.selstart := 3;
richedit1.sellength := 3;
richedit2.SelAttributes.Size := 16;
richedit2.SelAttributes.Color := clBlue;
end;
function EditStreamInCallback(dwCookie: Longint; pbBuff: PByte;
cb: Longint; var pcb: Longint): DWORD; stdcall;
begin
//здесь, возможно, понадобится анализ Position и Size потока
pcb := TStream(dwCookie).Read(pbBuff^, cb);
Result := 0; // Ord(pcb <> cb);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
ms: TMemoryStream;
est: TEditStream;
begin
Richedit2.PlainText := False;
ms := TMemoryStream.Create;
Richedit2.Lines.SaveToStream(ms);
ms.Position := 0;
est.dwCookie := Integer(ms);
est.dwError := 0;
est.pfnCallback := @EditStreamInCallBack;
SendMessage(RichEdit1.Handle, EM_STREAMIN, SF_RTF or SFF_SELECTION,
LPARAM(@est));
ms.Free;
end;
← →
Volly (2003-06-17 16:37) [9]Огромное, преогромное и гиперогромное спасибо!!! :0)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.06.30;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c