4
델파이 TRichedit 컨트롤에서 프린터로 텍스트를 출력하고 있습니다. 이 배경 이미지입니다, 그래서 나는이 논리와 EM_FORMATRANGE ...배경색으로 리치 헷드 인쇄
myrichedit.Perform(EM_FORMATRANGE, 1, Longint(@Range));
을 사용하고 있습니다 ... 그리고 텍스트가 항상 관계없이 색상의 흰색 배경이 렌더링 될 때 그 점을 제외하고 잘 작동 부자. 왜 그런가?
편집 : 코멘트에서 게시 :
Range
가 RANGEFORMAT
이며,이 같은 값을 할당됩니다
Range.hdc := aCanvas.Handle;
Range.hdcTarget := aCanvas.Handle;
LogX := GetDeviceCaps(Range.hdc, LOGPIXELSX);
LogY := GetDeviceCaps(Range.hdc, LOGPIXELSY);
Range.rc.Left := x * 1440 div LogX;
Range.rc.Right := (x+re.ClientWidth) * 1440 div LogX; // (1440=twips/inch)
Range.rc.Top := y * 1440 div LogY;
Range.rc.Bottom := 5000 * 1440 div LogY; // Some bigish number
Range.rcPage := Range.rc;
Range.chrg.cpMin := 0;
Range.chrg.cpMax := -1;
'범위'란 무엇입니까? [MSDN] (http://msdn.microsoft.com/en-us/library/windows/desktop/bb788020%28v=vs.85%29.aspx)에 따르면 그것은 'FORMATRANGE'이지만, 우리는 실제로 매개 변수로 전달하는 것에 대한 정보가 없습니다. 자신이하는 일을 우리에게 말하지 않으면 무엇이 잘못 될지 말할 수 없습니다. :) –
@KenWhite 그렇습니다. 형식이고 RichEdit의 배경색이 나오지 않는다는 점을 제외하고는 모두 예상대로 작동합니다. 범위는 어떤 경우에도 핸들과 위치 정보 만 지정합니다. 한 가지 가능한 해결책은 두 번째 매개 변수로 0을 사용하여 크기를 채운 다음 채워진 직사각형을 그려 그 위에 투명하게 텍스트를 그릴 수 있지만 슬그머니 해머로 너트를 부수는 것처럼 보입니다 ... – Terry
다시 말하지만, 당신은 우리가 ** Range **의 내용으로 제공하는 것에 대한 ** 정보를 제공하지 않았습니다. "제발 도와주세요. 내가하는 일을 정확히 말하지는 않겠지 만, 효과가 없습니다." 도움을 제공하기가 정말로 어렵습니다. 그래서 "나는 형식 체계 (format) 안에 뭔가를 전달하고있다. (그러나 올바른지를 알 수 있도록 무엇을 말할 수는 없지만) 작동하지 않는다. 무엇이 잘못 되었는가?" –