아래는 emf 파일을 읽어서...
그 파일에 있는 text를 뽑아내는 예제입니다...
그런데...
넘어온 값이 unicode라서...
어떻게 변환을 해야할지..
WideCharToMultiByte 를 사용해도 안돼네요..
emf 파일도 첨부합니다....
누가 도움을....
코드...
procedure TForm1.Button1Click(Sender: TObject);
var
emf_file : Tfilestream;
emfh : emf_h;
emfr : TEMR;
aaa : array [0..99] of WIDEchar;
ccc : array [0..1023] of widechar;
zzz : widestring;
ddd : string;
h_dc : hdc;
aaa11 : TEMREXTTEXTOUT;
kkk : TEMRTEXT;
e_font : TEMRExtCreateFontIndirect;
begin
if od1.Execute then
begin
emf_file := Tfilestream.Create(od1.FileName,fmOpenRead);
emf_file.Position:=0;
emf_file.Read(emfh,sizeof(emf_h));
emf_file.Position := emfh.offDescription;
emf_file.Read(aaa,100);
ShowMessage(aaa);
emf_file.Position := emfh.mtSize;
emf_file.Read(emfr,sizeof(metarecode));
emf_file.Read(ccc,emfr.nsize-8);
while emfr.itype <>14 do
begin
emf_file.Read(emfr,sizeof(metarecode));
if emfr.nsize-8 > 0 then
begin
if emfr.itype = EMR_EXTTEXTOUTW then
begin
emf_file.Position := emf_file.Position -8;
emf_file.Read(aaa11,sizeof(TEMREXTTEXTOUT));
kkk:=aaa11.emrtext;
emf_file.Read(ccc,emfr.nsize -sizeof(TEMREXTTEXTOUT));
// 여기서 넘어온 값 CCC 가 유니코드...
showmessage(string(ccc));
end else
emf_file.Read(ccc,emfr.nsize - 8);
end;
end;
emf_file.Free;
end;
end;