![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TRichEdit [D6, Win2k]
KA_ © (2003-01-31 17:50:00)Есть форма с RichEdit"ом. У нее есть метод DrawOn. Он должен отрисовывать содержимое RichEdit"a на канве. Только не рисует и все тут. Где я в коде напортачил? Помогите плиз, не то помру от разрыва мозга :)
procedure TfrmMyRichTextEditor.DrawOn(pCanvas: TCanvas; pDrawRect: TRect);
var
mf: TMetafile;
mc: TMetaFileCanvas;
Range: TFormatRange;
OldMap: Integer;
k1, k2: Double;
EditorDC: HDC;
rtfRect: TRect;
begin
EditorDC := GetDC(RichEdit.Handle);
try
with RichEdit, Range do
begin
SendMessage(RichEdit.Handle, EM_FORMATRANGE, 0, 0);
FillChar(Range, SizeOf(TFormatRange), 0);
hdc := EditorDC;
hdcTarget := pCanvas.Handle;
if IsRectEmpty(PageRect) then
begin
SendMessage(RichEdit.Handle, EM_GETRECT, 0, LongInt(@rtfRect));
rc := rtfRect;
end
else begin
rc.left := PageRect.Left;
rc.top := PageRect.Top;
rc.right := PageRect.Right;
rc.bottom := PageRect.Bottom;
end;
rcPage := pDrawRect;
chrg.cpMax := -1;
OldMap := SetMapMode(hdc, MM_TEXT);
SendMessage(RichEdit.Handle, EM_FORMATRANGE, 1, Longint(@Range));
SendMessage(RichEdit.Handle, EM_FORMATRANGE, 0, 0);
SetMapMode(hdc, OldMap);
end;
finally
ReleaseDC(Self.Height, EditorDC);
end;
end;
KA_ (2003-01-31 18:17:00) [1]Спасибо большое!
MBo (2003-01-31 18:02:00) [2]{ set up the parameter record for EM_FORMATRANGE }
FillChar(fmtRange, SizeOf(fmtRange), 0);
with fmtRange do
begin
hDC := yourBitmap.Canvas.Handle;
hdcTarget := hDC;
intPPI := Screen.PixelsPerInch;
rc := Rect(ARect.Left*1440 div intPPI,
ARect.Top*1440 div intPPI,
ARect.Right*1440 div intPPI,
ARect.Bottom*1440 div intPPI);
rcPage := rc;
chrg.cpMin := 0;
chrg.cpMax := -1;
end;
{ format the text }
Flags := 1;
FRichedit.Perform(EM_FORMATRANGE, Flags, Longint(@fmtRange));
{ Free cached information }
FRichedit.Perform(EM_FORMATRANGE, 0, 0);
© Mike Shkolnik