안녕하세요? 홍환민입니다.
리치에디트에서 64KB 이상을 읽지 못하는 걸로 알고 있습니다.
물론 LoadFormFile을 이용하면 메모리 할당을 해주지만 말입니다.
64KB이상을 제가 만든 루틴으로 읽어서 리치에디트(정확히 말하면 RxRichEdit)
에 표시하려고 여러 글을 찾아보았는데
가장 확실해 보이는 놈이 EM_SETLIMITTEXT를 이용한 방법이었습니다.
그런데 제 경우에는 되지 않더군요.
다음은 제가 사용한 소스입니다.
(Editor가 TRxRichEdit 클래스이고, ReadFile은 제가 제작한 루틴입니다.)
유의하셔야 할 것은 아시겠지만 RichEdit 2.0을 지원하는 RxRichEdit를
사용한다는 점입니다.(2.0이라서 안될 가능성이 있다고 그러더라고요.)
--------------------------------------------------------------------------
Buf: string;
Buf := Editor.ReadFile(OpenDialog.FileName);
SendMessage ( Editor.Handle, EM_SETLIMITTEXT, 0, Length(Buf) );
Editor.Text := Buf;
--------------------------------------------------------------------------
Length(Buf) <- 이 부분의 문제는 아닌 듯 싶습니다. Length(Buf) + 10
으로 하거나 큰 값 여러개를 넣어서 테스트를 해보았는데 안되더군요.
ReadFile 함수부분도 보실 필요가 있을지 모르니 올립니다.
--------------------------------------------------------------------------
function THongRichEdit.ReadFile( FileName: string ) : PChar;
var
F: file of Byte;
FSize: Integer;
BufferStartPoint: PChar;
Buffer: PChar;
begin
AssignFile(F, FileName);
Reset(F);
FSize := FileSize(F);
GetMem(Buffer, FSize + 1);
BufferStartPoint := Buffer;
BlockRead(F, Buffer[0], FSize);
Inc(buffer, FSize);
buffer^ := #0;
CloseFile(F);
Result := BufferStartPoint;
end;
--------------------------------------------------------------------------
소스가 델파이군요. 양해바랍니다.
그럼 행복하세요~
|