안녕하세요.. 늘상 질문만 하는 이상한 사람입니다.. --;
저번에 답변주신 최석기님.. 정말 감사합니다.
두가지를 질문했는데 한가지만 알게 되어서 한번 더 질문을 합니다...
질문 : Windows 메모장에서는 실행파일을 불러와도, 깨져서 못알아보기는 하지만..
제대로 불러집니다... ^^
근데 memo 컴포넌트로 만든 델메모장은 안불러지네요...
첫부분 조금만 불러지다가 마는군요... 원래 메모장에서 지원하지 않는건가요?
이건 어케 해결하죠?
하하.. 고수님들의 답변 부탁드립니다...
그것은 델파이의 메모컴포넌트가 자료들을 널종료문자열형태로 다루기 때문입니다.
델파이의 메모컴포넌트도 윈도우의 같은 라이브러리를 사용하니까 두 개는 차이가
없습니다. 단지 메모장에는 널종료문자를 다른문자로 바꾸어서 보여주기 때문에 이진
파일도 제대로 보이는 것이지요. 델파이에서도 이진파일의 널종료문자(#0)를 윈도우의
메모장처럼 다른문자(메모장에서는 스페이스로 변환을 합니다.)로 바꾸어서 보여주면
됩니다. 아래 코드를 이용하시면 이진파일도 잘 읽어들일 것입니다. 메모컴포넌트는
64K가 한계인것은 아시죠? 이진파일은 대부분 64K가 넘어가는 것이 많으니 주의하세요.
var
MemoryStream: TMemoryStream;
I: Integer;
begin
MemoryStream := TMemoryStream.Create;
try
// 문서를 스트림에서 읽는다. 스트림은 이진파일의 널종료문자를 스페이스로
// 바꾸기 위한 버퍼역활을 한다.
MemoryStream.LoadFromFile('c:delphi.exe');
// for 루프를 돌면서 널종료문자(#0)를 스페이스(#32)로 모두 바꾼다.
for I := 0 to MemoryStream.Size - 1 do
if PByteArray(MemoryStream.Memory)[I] = 0 then
PByteArray(MemoryStream.Memory)[I] := 32;
// 메모장에서 문서를 읽는다.
Memo1.Lines.Text := PChar(MemoryStream.Memory);
finally
MemoryStream.Free;
end;
end;
^^ 항상 즐코하세요.
김봉준 wrote:
> 안녕하세요.. 늘상 질문만 하는 이상한 사람입니다.. --;
>
> 저번에 답변주신 최석기님.. 정말 감사합니다.
>
> 두가지를 질문했는데 한가지만 알게 되어서 한번 더 질문을 합니다...
>
>
> 질문 : Windows 메모장에서는 실행파일을 불러와도, 깨져서 못알아보기는 하지만..
>
> 제대로 불러집니다... ^^
>
> 근데 memo 컴포넌트로 만든 델메모장은 안불러지네요...
>
> 첫부분 조금만 불러지다가 마는군요... 원래 메모장에서 지원하지 않는건가요?
>
> 이건 어케 해결하죠?
>
>
>
> 하하.. 고수님들의 답변 부탁드립니다...
>
>