|
SaxWebster HTML컨트롤
Animated GIF
인터넷에서 구현할 수 있는 애니메이션 기법은 무궁무진하다. 그중 가장 주목을 받았던 매크로미디어사의 플래시가 가장 유명하며, 쇼크웨이브는 멀티미디어 저작도구인 디렉터나 오소웨어, 프리핸드로 제작한 CD 타이틀을 네트워크를 통해 인터넷 브라우저로 다운로드받아 구동시킬수 있도록 한다. 매크로미디어사이외에도 라이브픽처, 툴북 플러그인등 천차만별의 플러그인들이 등장하고있다. 광고영역에서도 플래시가 단연 돋보이는데, 웹브라우저에 필요한 플러그인 소프트웨어를 웹브라우저에 따로 설치해야 하는 부담과 워낙 커다란 용량으로 인해서 전자신문이나 언론사의 홈페이지의 배너광고에는 아직도 간간히 "움직이는 GIF" 방식을 보여주고 있다.
"움직이는 GIF"는 다중프레임 방식으로 여러장의 GIF 파일들을 하나의 GIF 파일로 묶어둘 수가 있는데다가 GIF89a 포맷 자체가 LZ 압축 알고리즘을 사용해 용량도 작고, 알파채널이라는 배경색의 투명처리 구현도 단지 배경컬러를 원하는 색으로 선택해주면 투명이 되는 쉬운 방식이므로 웹 페이지의 으뜸가는 단골메뉴로 자리잡았다.
다만 GIF라는 포맷은 라이선스 문제가 걸려있어서 자신의 응용 프로그램에 GIF나 TIFF 포맷을 지원할 생각이라면 미국 Unisys사와 라이선스 계약을 맺어야 하며, GIF 포맷의 단점은 256컬러 이상의 표현을 할 수 없어서 질이 떨어진다는 것이다.
넷스케이프 브라우저 오른쪽 상단의 유성이 떨어지는 그림이라든지 유니윈의 로고가 뱅글뱅글 도는 것을 보면 자신이 제작한 프로그램에서도 자기 자신만의 로고가 돌아가도록 만들고 싶다는 충동을 느끼게 한다. 그런데, 비주얼베이직을 비롯한 파워빌더 개발툴, 오소웨어 저작도구 등에서 이 "Animated GIF"를 바로 넣을수 있게 해주는 ActiveX 컨트롤이 있어 소개한다.
AniGIF라는 이름으로 통신망에서 배포되고 있으며, 인터넷에서 구할수 있는 배포버전을 설치해서 AniGIF.LIC 파일만 윈도 시스템 디렉토리에 따로 복사해둔다. 정식버전은 아니므로 등록키를 입력하라는 메시지가 계속 뜰 것이다. AniGIF의 정식버전은 유니윈 98 버전을 설치하면 바로 얻을수 있으나, AniGIF.LIC 파일이 들어있지 않으므로 앞에서 따로 복사해둔 파일이 필요할 것이다.
유니텔 로고처럼 움직이는 AniGIF 예제 프로그램 제작이다.
①⸁ 미리 유니윈 2.0의 \Uniwin\mbmp\ani 아래의 이미지들은 비트맵이지만 페인트샵프로나 포토샵에서 GIF89a 포맷으로 바꾸어준다. 페인트샵 프로의 Batch Conversion으로 금방 바꿀수있다.
⸂ "GIF Construction Kit"에서 하나의 "움직이는 GIF"로 만들수 있는데, 생성된 GIF는 페인트샵같은 일반 그래픽툴에서는 제대로 볼수 없으며, 넷스케이프나 익스플로러 브라우저에서 실행결과를 살펴보아야 한다.
⸃ 비주얼 베이직을 가동시키고, AniGIF 컨트롤을 등록한다. 폼 위에 AniGIF 컨트롤을 그려준뒤, 프로퍼티 상자에서 움직이려는 GIF파일을 하나 선택해준다. (예제에서는 Unitel.gif)
⸄ 비주얼베이직이라면 소스코드 작성도 간단하여 Form_load()에 다음과 같은 코드 한줄을 추가하면 끝이다.
ANIGIF1.PLAY
⸅ 파워빌더 5에서는 open() 이벤트에 다음과 같은 코드를 넣어준다.
OLE_1.OBJECT.PLAY
⸆ 윈도 운영체제에선 MDI 프레임 윈도우에는 원래 아무 객체도 놓을 수 없지만 파워빌더 5에서 AniGIF OCX를 윈도우 상단에 넣을수 있다. MDI 프레임 윈도우에서는 차일드 윈도우를 띄운다고해도 AniGIF가 계속 루프를 돌면서 포커스를 가지고 있기 때문에 차일드 윈도우가 나타나지 않는다. (전혀 포커스를 가지지 못한다) 이때는 메뉴에서 차일드 윈도우를 여는 코드를 다음처럼 처리하면 완벽하다.
Opensheet(w_child1, ...)
w_child1.setfocus()
프로퍼티 |
리턴값 |
설 명 |
.BackColor |
COLOR값 |
배경색 |
.Frame |
Integer |
현재 보이는 프레임번호를 세팅하거나 리턴한다. |
.Frames |
Integer |
GIF파일의 전체 프레임수를 리턴한다 |
.GIF |
String |
빈칸으로 두면 현재저장된 GIF 파일이 지워진다 |
.Playing |
Boolean(TRUE/FALSE) |
GIF 파일이 실행중인지 아닌지를 리턴 |
.Transparent |
Boolean(TRUE/FALSE) |
TRUE이면 GIF의 배경색이 컨테이너의 배경색으로 바뀐다. |
메소드 |
리턴값 |
파워빌더에서 사용법 |
설 명 |
GetFrame |
Picture |
AniGif1.GetFrame (frame As Integer) |
현재 GIF의 한 개의 프레임을 얻는다. |
Play |
Boolean |
Anigif1.play - 비주얼베이직 4에서 |
움직이는 GIF 파일을 play시킨다. |
ole_1.object.play - 파워빌더 5에서 |
|||
ReadGIF |
Boolean |
AniGif1.ReadGIF (filename As String) |
GIF파일을 읽어들인다. GIF87a, GIF89a 모두가능 |
Stop |
Boolean |
Anigif1.stop |
움직이는 GIF 파일을 Stop시킨다. |
VBA Companion OCX Edition
VBA 컴패니언은 엑셀이나 MS 액세스같은 OLE 컨테이너에 의해서 재사용되는 OLE 객체들을 100% 활용하기 위한 OLE 브라우저이다. 비단 OCX뿐만 아니라 시스템 레지스트리 어디엔가 깊이 숨어있는 OLE 오브젝트들에 대한 상수선언, 메소드, 프로퍼티, 이벤트 타입같은 프로그래밍에 필요한 정보들을 명료한 보고서로 만들어낸다. 단지 OCX에 대해서만 한정된 보고서를 작성하는 OCX 에디션이지만 정식버전에서는 엑셀의 차트라든가 넷스케이프의 하이퍼텍스트 타입라이브러리, 데이터 컬렉션 (예를들어 엑셀 95의 시트)등에 대해서도 보고서가 만들어진다.
PC 통신 비베관련 게시판에서 OCX에 관한 질문을 검색해봐도 비베의 오브젝트 브라우저나 파워빌더 5의 간략하게 보여주는 OCX 정보로는 프로그래밍이 거의 불가능하니 눈치껏 때려맞추라는 식의 대답밖에 얻을수 없었다. 비베 5의 "Quick Info" 기능은 펑션 타입에 대한 풍선도움말 방식의 정보를 제공한다고 하지만 한눈에 일목요연하게 모두 보여주는 기능은 없다.
VBA컴패니언은 윈도 95 탐색기같은 인터페이스를 하고 있으며, 디렉토리 폴더에 해당되는 오브젝트 트리에서 프로그래밍 가능한 컴포넌트들을 클릭하면 오른쪽 창에서 데이터그리드 형태로 프로퍼티, 메소드에 대한 파라미터 타입, 리턴값, 펑션 타입 예제를 VBA 포맷/워드베이직 포맷으로 보여준다.
인터넷에서 구한 OCX가 헬프파일이 없어도 어느정도 프로그래밍에 적절히 활용할 수가 있다. 예를들어 WANG의 Imaging for Windows 샘플 프로그램은 불완전한 소스코드지만 VBA 컴패니언에서 얻은 메소드나 프로퍼티에 관한 부가 정보를 가지고 비주얼 베이직 코드를 작성해 RIGHT 마우스 처리나, OCR기능에 대한 코드를 지속적으로 추가해 나갈수 있을것이다.
HOTDOG Webster 1.2
핫도그는 나모웹에디터처럼 인터넷에서 HTML 에디터의 대명사로 손곱히며, 98년에 60만달러어치를 팔아 소시지(?)의 명성을 전세계에 알린 제품이다. "HotDog 3.0 Pro"를 설치하면 시스템에 여러개의 ActiveX 컨트롤들이 설치되는데, HTML 에디터에서 꼭 필요한 기능들을 가진 군계일학들임을 능히 짐작할 수 있다.
먼저 가장 중요한 웹 브라우저 컨트롤인 SaxSoft사의 SaxWebster ( 지금은 판매대행사였던 SaxSoft사의 손을 떠나 원저작자인 www.Homepagesw.com으로 다시 돌려줬다.), GIF와 JPG 파일을 읽을 수 있는 LeadTools 6.1N, 틀린 단어를 체크하는 VisuaSpeller 같은 유명 개발사의 컨트롤이 들어있다. FTP 클라이언트 컨트롤인 Catalyst CsFTP32, HotDog 개발사가 직접 제작한 CtrlInfo, Valkey 같은 자잘한 컨트롤까지 많은 ActiveX를 포함하고 있다.
Hotdog 3.0 이전 버전에서는 HTML 태그를 작성한 뒤, 실제모습을 보기위해서 Preview버튼을 누르면 넷스케이프 브라우저를 직접 실행시켰다. 그러나, 핫도그 3.0 버전에선 HTML 소스를 번역하는 컨트롤인 SaxWebster 32비트 컨트롤을 포함시켰다.
SaxWebster 컨트롤은 소스코드 한줄 없이도 웬만한 웹브라우저 하나는 그 자리에서 뚝딱하고
만들어 낼 수 있을정도로 막강하다. 단지 .PageURL 프로퍼티에 URL만 설정하면 웹 페이지를 읽어들이고, 출력하는 모든일은 SaxWebster가 알아서 하는 것이다. 응용분야도 무한한데, 인트라넷에서 제한된 사용자만 사용하는 전용 브라우저, GVA처럼 어학교재에서 HTML 문서를 보여주는로그램에도 사용할 수 있다.
하지만 핫도그 3.0 프로버전에 들어있는 Webster 컨트롤은 라이선스 프로텍트가 걸려있어서 비주얼 베이직 디자인 타임에서는 아쉽게도 사용할 수가 없다. 일정기간후에 계속 업그레이드 되어야 하는 트라이얼 버전이 homepageSW홈페이지를 통해 계속 공급되고 있다.
눈을 돌려 유니텔 전용 유니윈 2.0 에뮬레이터를 주목하자. 유니텔이 유니윈 개발을 위해 Visual Component사에서 번들한 16비트 정품 Webviewer OCX가 들어있다. SaxSoft사의 Webster 1.2와 Visual Component사(지금은 TideStone으로 이름이 바뀌었다)의 WebViewer 1.2버전은 서로 이름은 다르지만 완전히 동일한 제품이다.
VBA 컴패니언에서 읽어본 두 개의 컨트롤은 개발자가 누가 먼저인지를 떠나서 프로퍼티와 메소드가 완전히 동일한 것이었다.
SaxSoft사가 Homepage사로부터 소스를 사들여 나름대로 꾸준히 개선해나가고 있고, 비주얼컴포넌트사(Visual Component - 지금은 TideStone)의 WebViewer도 비주얼 스위트 딜 패키지의 일부로 재판매하는 전략을 세운 후 서로 다른 방향으로 버전업이 되고있다. 마치 Microsoft SQLServer랑 Sybase SQLServer가 모체는 SQLServer 1.0으로 같지만 서로 다르게 버전업되는 것처럼 말이다.
비주얼컴포넌트 Webviewer가 16비트 OCX이긴해도 어떤 기능이 있는지 충분히 검토해보는 기회를 가지게 해줄 것이다. 실험을 해 본 결과 자바 컨트롤도 Webster상에서 제대로 동작했고, HOME 버튼, URL 입력하기, 히스토리같은 넷스케이프의 툴바와 비슷한 버튼들을 프로그래밍으로 제어할수 있었다. 연결하고 있는 웹서버의 정보를 얻어내는 부가 기능도 있었지만 Webster 버전이 1.2 버전이라서 그런지 "자바스크립트", "움직이는 GIF"를 비롯해 HTML 3.x등을 완벽하게 지원하진 못했다.
Page Status
Title
URL : 'xxjavascript:///openVDO(
status : Failed - unsupported scheme "'xxjavascript".
HTTP/1.0 200 ok
Server: Netscape-Enterprise / 2.0a
Content-length 23172
Content-type : text/html
SAX WEBSTER / 비주얼 컴포넌트 WEBVIEWER 프로퍼티
.PageURL : 새로운 페이지를 로드한다.
웹브라우저에서 URL을 입력하는 것과 같으며, VC WebViewer에는 URL 입력 창이
나타난다. SaxWebster는 입력창이 없으므로 InputBox$()를 통해 입력받아야 한다.
.ButtonMask : 타이틀 윈도우 버튼을 동작/정지시킨다.
.HomePage : 집모양 컨트롤을 눌렀을 때 읽어들여지는 URL이다.
.DownloadDir : 사용자가 웹페이지를 저장할 때 경로명을 지정한다.
.AuthenticName,
.AuthenticPassword : 사이트에 접속할 때 로그인 과정을 거치는 것은 이곳에 값을 설정한다.
.ImageCacheKB : 이미지 캐쉬의 사이즈를 KB로 표시한다.
.LoadImages : 임베드되어있는 이미지를 로드할 것인지 결정한다.
.IgnoreBaseInFile : BASE 태그를 무시한다.
라면 링크는 http://www.ubc.co.kr/images/index.html가 된다.
하지만
붙게된다.
즉, 링크는 http://www.ubc.co.kr/doc/images/index.html가 된다.
.IgnoreBaseInFile 속성은 URL을 읽어들일때 BASE 태그를 무시한다.
.LoadStatus : 현재 페이지에 대한 Webster 브라우저의 현재상태가 어떠한지를
제공하는 속성이다.
설정치 |
설명 |
0 |
페이지를 완전히 읽어들였습니다. |
1 |
호스트로 접속중입니다. |
2 |
접속되었고, 대기중입니다. |
3 |
페이지 텍스트를 읽어들였습니다. |
4 |
이미지를 읽어들이고 있습니다. |
5 |
읽기 동작이 실패했습니다. |
6 |
알 수 없는 에러로 URL을 읽어들이는데 실패했습니다. |
.MaxPageLoads : 동시에 로드할 수 있는 페이지의 최대수를 나타낸다.
.MaxSockets : 활성화 소켓의 최대수를 나타낸다. 소켓이란 네트워크 서비스를
사용중인 두 컴퓨터간의 한번의 접속을 의미한다.
.PagesToCache : 얼마나 메모리 캐쉬에 방문했던 페이지를 저장할 것인지 결정한다.
.PageTitle : 현재 페이지의 타이틀,
반환한다.
.ProxyPortHTTP : 프록시 서버명, 프록시 서버 포트값을 결정한다.
.ProxyServerHTTP
DismissPage 메소드 : 메모리 캐쉬에서 페이지를 제거한다.
GetContent 메소드 : 현재 읽어들인 페이지나 캐쉬로부터 있는 데이터를
그대로 반환한다.
페이지내에서 시작할 바이트 오프셋과 길이를
파라미터로 넘긴다.
GetContentSizeRead : 특정 페이지에서 가능한 실제 바이트수를 리턴한다.
GetHiddenFlag 메소드 : 페이지의 상태가 숨겨졌는지 나타나있는지를 가리키는
플래그를 리턴한다.
GetLinkCount 메소드 : 지정된 페이지에 포함된 하이퍼링크의 갯수를 리턴한다.
GetLinkURL 메소드 : 지정된 페이지에 포함된 URL을 얻는다.
GoHome 메소드 : .Homepage 속성에 설정한 Homepage URL
LoadPage 메소드 : 새로운 URL, 캐쉬로부터 webster 컨트롤이 지정된 페이지를
읽도록 한다.
PageBack 메소드,
PageForth : 히스토리 리스트에서 앞뒤에 놓인 URL을 읽도록 한다.
SaveToDisk 메소드 : SaveDir 프로퍼티에 설정한 디렉터리로 현재 페이지를
저장한다.
ShowHistory 메소드 : 히스토리 리스트를 출력한다.
* ShowOpenFileDialog : URL대신 디스크의 파일을 열수 있도록 대화상자가 나타난다.
* ShowURLDialog : URL 입력창이 나타난다. VC Webviewer에만 있고,
Webster에는 없는 메소드이다.
웹스터 컨트롤의 화면을 프린터로 인쇄하려면 DoPrint 메소드를 쓰지만 VC WebViewer에는 없는 메소드이다.
Private Sub mnuPrint_Click()
Webster1.DoPrint True, 0, 0
End Sub
Webster 컨트롤이 읽어들인 HTML 소스의 내용을 텍스트 박스에 한줄씩 보여주려면 다음과 같은 코드를 참조하면 된다.
Private Sub Form_Load()
Dim aLine As String
Text1.Text = ""
Me.Caption = "View Source: " & Form1.Caption
Open Form1.Webster1.DownloadDir & "\ToOpen.htm" For Input As #1
Do Until EOF(1)
Line Input #1, aLine
Text1.Text = Text1.Text & Chr(13) & Chr(10) & aLine
Loop
Close #1
End Sub
Leadtools 6.1N
HotDog 3.0 프로버전에 들어있는 LEADTOOLS/OCX는 LTOCX61N.OCX라는 컨트롤 파일과 다수의 이미지용 런타임 DLL을 함께 가지고 있는데, 라이선스 파일이 들어있지 않아 비주얼 베이직의 디자인에 사용할 수가 없다. 하지만 도서출판 대림의 "한번 더 생각한 VBX/OCX 해킹"의 CD부록에서 LEADTOOLS 5.0의 익스프레스 평가 버전을 먼저 설치하고 나서 "HotDog 3.0 Pro"를 구해서 설치한다면 언제 그랬냐는 듯 개발 목적에 버전업된 LEADTOOLS 6.1N을 이용할 수 있을 것이다.
LEADTOOLS 5의 DLL들은 6.1 버전의 OCX와도 호환이 되기 때문이다. 비주얼 C++ 정품 CD 안에서 리드툴 5 익스프레스를 포함하고 있지만 C++에 특화된 것이라 조금 용도가 다르다. LEADTOOLS 인터넷 홈페이지에서는 리드툴 5 익스프레스를 더 이상 구할 수 없으므로 대신 LEADTOOLS 8 평가버전을 얻을 수 있다.
마무리
지난해는 IMF 금융위기가 눈앞의 현실이 되었고, 달러모으기 운동도 전개되었다. ActiveX 컨트롤은 거의 외산이며, 개발 프로젝트를 위해 구입을 한다면 아마도 많은 외화가 국외로 빠져나갈 것이다. "빈깡통공작"이란 원래 폐품을 활용한 멋진 물건을 만들어 쓰는 것을 지칭한다. 필자는 제목에 걸맞게 유니윈이나 핫도그에서 바로 꺼내 쓸수 있는 (주로 인터넷에서 무료로 쉽게 구할수 있는) 깜찍한 방법을 알려주려 애쓰고 있다.
계속되는 연재에서도 알려지지 않은 비법들을 몇가지 더 더 선보일 예정이다. 그리고, 프로그래밍 경험이 없는 독자를 위해서도 AniGIF처럼 한가지씩 작고 가벼운 컨트롤도 함께 소개하는 방향으로 진행하도록 하겠다.
참고문헌
한번 더 생각한 VBX/OCX 해킹 도서출판 대림 비주얼베이직 웹 프로그래밍 정보문화사 프로그램세계 96년 8월호 리뷰기사 SaxSoft http://www.saxsoft.com 비주얼컴포넌트사 http://www.visualcomp.com Sausage Soft http://www.sausage.com ApexSoft http://www.apexsc.com
|