![]() |
|
||||||||
경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지 |
|
음.. 코드를 짜볼 정신은 없고..
또 아래아 한글이나 훈민정음이 없기도 하고 해서 대략 생각만 해보면... CreateComObject와 CreateOleObject 호출 두가지로 나뉘어진 걸 하나로 합치는 것이 중요할 거 같은데.. 둘다 ProgID 기반, 그러니까 CreateOleObject로 통일하는 편이 좋겠네요. CLASS_HwpCtrl이나 CLASS_IF_ 둘다 해당 ProgID 문자열이 있을테니까요. 그런 후에 각 ProgID와 필터 문자열, TDocKind의 레코드 혹은 클래스를 만들고 각 문서 타입에 해당하는 값들을 집어넣으면 될 듯... 그리고 RemoveFileDocKind()를 봐서는, 미리 TDocKind 들을 몽땅 다 등록된 것으로 간주한 다음 CreateOleObject 확인이 실패할 때마다 제거하는 방식으로 코딩한 거 같은데.. 저라면 except에서 이미 등록된 TDocKind 값들을 '제거'하기보다는 except 바로 앞에서 TDocKind 값을 추가하는 쪽으로 코딩하겠습니다. function GetFileFilter():String;
function AddWordFiler(classid:TGUID;filter:string;docktype:TDockType;var filterlist:string) :string; overload; var checkVal :OleVariant; begin try checkVal := CreateComObject(classid); checkVal := Unassigned; Result := filter; except RemoveFileDocKind(docktype); Result :=''; end; end; function AddWordFiler(classname:string;filter:string;docktype:TDockType;var filterlist:string) :string; overload; begin result :=AddWordFiler(ProgIDToClassID(classname),filter,docktype,filterlist); end; begin result :='Image All(*.jpg;*.jpeg;*.gif;*.png;*.bmp;*.pcx;*.tif;*.tiff;*.psd;*.pdd)|*.jpg;*.jpeg;*.gif;*.png;*.bmp;*.pcx;*.tif;*.tiff;*.psd;*.pdd|'; AddWordFiler(CLASS_HwpCtrl,'HWP Document(*.hwp)|*.hwp|',dkHwp,Result); AddWordFiler('WORD.Application','MS-Word(*.doc)|*.doc|',dkMsWord,Result); AddWordFiler('Excel.Application','MS-Excel(*.xls)|*.xls|',dkMsExcel,Result); AddWordFiler('PowerPoint.Application','PowerPoint(*.ppt)|*.ppt|',dkMsPPt,Result); AddWordFiler(CLASS_IF_,'HunminWord Document(*.gul)|*.gul|',dkHun,Result); result :=result + 'Adobo PDF File(*.pdf)|*.pdf|PostScript(*.ps)|*.ps|Encapsulated PostScript(*.eps)|*.eps|'; end; function GetFileFilter:String;
type TDocType = Record docId : String; filter : string; dockKind : integer; IsOle: Boolean; end; const docTypes : array[0..2] of TDocType = ( (docId:'WORD.Application'; filter:'MS-Word(*.doc)|*.doc|'; dockKind:dkWord; IsOle:true), (docId:'Excel.Application'; filter:'MS-Excel(*.xls)|*.xls|'; dockKind:dkExcel; IsOle:true), (docId:'{26319A34-0ADB-4F04-8EFD-4E6679644879}'; filter:'HWP Document(*.hwp)|*.hwp|'; dockKind:dkHwp; IsOle:false) ); function checkFileServer(docId: string; docKind: integer; IsOle: Boolean): boolean; var checkVal: OleVariant; begin result:= false; try try if IsOle then checkVal:= CreateComObject(docId) else checkVal:= CreateOleObject(StringToGuid(docId)); result:= true; except RemoveFileDocKind(docKind); end; finally checkVal:= Unassigned; end; end; begin Result := 'Image All(*.jpg;*.jpeg;*.gif;*.png;*.bmp;*.pcx;*.tif;*.tiff;*.psd;*.pdd)|*.jpg;*.jpeg;*.gif;*.png;*.bmp;*.pcx;*.tif;*.tiff;*.psd;*.pdd|'; for I := Low(docTypes) to High(docTypes) do begin if checkFileServer(docTypes[i].oleType, docTypes[i].docKind, docTypes[i].IsOle) then begin Result := Result + docTypes[i].filter; end; end; Result := Result + 'Adobo PDF File(*.pdf)|*.pdf|PostScript(*.ps)|*.ps|Encapsulated PostScript(*.eps)|*.eps|'; end; type
TDocumentType = (dtHWP, dtWord, dtPowerpoint, dtExcel, dtHunminWord); TDocumentFilter = class private FDocumentType: TDocumentType; public class function DocumentFilter(Filter: TDocumentType): string; function GetDocumentFilter: string; property DocumentType:TDocumentType read FDocumentType write FDocumentType; end; const DocumentType: array [1..5] of TDocumentType = (dtHWP, dtWord, dtPowerpoint, dtExcel, dtHunminWord); implementation { TDocumentFilter } class function TDocumentFilter.DocumentFilter(Filter: TDocumentType): string; begin case Filter of dtHWP: Result:= 'HWP Document(*.hwp)|*.hwp|'; dtWord: Result:= 'MS-Word(*.doc)|*.doc|'; dtExcel: Result:= 'MS-Excel(*.xls)|*.xls|'; dtPowerpoint: Result:= 'PowerPoint(*.ppt)|*.ppt|'; dtHunminWord: Result:= 'HunminWord Document(*.gul)|*.gul|'; else result:= ''; end; end; function TDocumentFilter.GetDocumentFilter: string; begin Result:= DocumentFilter(FDocumentType); end; function GetFileFilter:String; var I: Integer; begin Result:= 'Image All(*.jpg;*.jpeg;*.gif;*.png;*.bmp;*.pcx;*.tif;*.tiff;*.psd;*.pdd)|*.jpg;*.jpeg;*.gif;*.png;*.bmp;*.pcx;*.tif;*.tiff;*.psd;*.pdd|'; for I := Low(DocumentType) to High(DocumentType) do Result:= Result + TDocumentFilter.DocumentFilter(DocumentType[I]); Result:= Result + 'Adobo PDF File(*.pdf)|*.pdf|PostScript(*.ps)|*.ps|Encapsulated PostScript(*.eps)|*.eps|'; end; 관련 글 리스트
|
Copyright © 1999-2015, borlandforum.com. All right reserved. |
-- 가장 잘 정리한 사람에게는 큰절로 보답함과 더불어서,
-- 공약일 가능성이 매우 농후하지만, 대구에 방문시
-- 귀빈 대접을 받을 수 있는 영광을 드리도록 하겠다
싫다 니가 하라.