2010年6月12日 星期六

在 BCB 上安裝 QuickTime Control

  在 C++Builder 2010 安裝 QuickTime Control 可以讓你在 project 中使用 QuickTime Player 的面板及其支援的功能,基本功能包含:Play, Forward, Rewind, Pause, Resume, Stop, NextFrame, PreviousFrame, GoToStart, GoToEnd, FullScreen, ResizeDisplay, CopyFrameToClipboard, SetAuidoVolume, AudioMute... 等等。支援的檔案格式:MOV, WAV, AIFF, AAC/ADTS, CAF, MP4 (AAC only)。

下列是以 C++Builder 2010 為安裝實例:
  1. 按下功能表: Component\Import component...
  2. 選擇:Import ActiveX Control 並按下 Next
  3. 選擇:Apple QuickTime Control 2.0 (Version 1.0) 並按下 Next
  4. 確認 Palette Page,預設是將 QuickTime Control 放在 ActiveX 這一頁,按下 Next
  5. 選擇:Install to new package 並按下 Next
  6. 輸入 Package name,例如:AppleQuickTime 然後按下 Finish
  7. 接著 BCB 會開始編譯 QuickTime Control 並顯示安裝成功的訊息

  在 project 中使用 TQTControl,若編譯時出現缺少檔案,如 QTOControlLib_OCX.h,一般可以在 ...\My Documents\RAD Studio\7.0\Imports 底下找到,將缺少的檔案加入 project 裡面應該就可以正常編譯了。(若是覺得檔案不好找,可以下載 Everything Serch Engin,它是個小巧好用的免費軟體、支援檔名隨打即找的快速搜尋器,只能找檔案,不能找檔案內容)

2010年6月11日 星期五

Free C/C++ library - Haru Free PDF Library

  免費 PDF Library - Haru  

  這次要介紹的是一個可以在 C++Builder 上使用的 PDF library - Haru Free PDF Library。選擇它的主要原因是它不但 Free、開放原始碼,而且可以在我所熟悉的 C++Builder 上使用。除此之外,也提供各式各樣的 sample code ,且附上每份 sample code 所產生出來的 PDF demo 檔案,讓人在使用它之前就先有了不少安全感。

Haru 的特色:
  1. 免費、跨平台且開放原始碼。
  2. 提供許多有用的說明、連結、範例程式及其結果。
  3. 以 ANSI C 編寫而成的,理論上可支援現代大多數的作業系統。
  4. 你可以使用它來增加 PDF 的特色而不必了解其內部繁雜的結構。

支援的功能:

  1. 可以在 PDF 文件上畫 lines, rectangles, circles, text, images (JPEG, PNG, RAW)
  2. 可以產生大綱 (outline)、文字註釋、連結註釋及投影片的效果。
  3. 可以嵌入 Type1 和 TrueType 字型。
  4. 可以使用 ISO8859 - 1~16,MSCP1250~1258,KOI8 - R 等字符集 (character sets)
  5. 支援中、日、韓 (CJK ) 字型及編碼。
  6. 可以產生出加密的 PDF 文件…等功能。

  在使用 Haru 之前要先到官網下載 source code 或 library (for MSVC),如果是下載 source code 就要自己編譯成 library。我是下載 libharu-2.1.0.tar.gz, 然後用 C++Builder 2010 編譯成 library,如果直接對 source code 編譯可能無法順利完成,原因有下列幾個:
  *1. include\hpdf_config.h.in 這個檔必需改為 hpdf_config.h。
  2. source code 裡面沒有附 png library 和 z library,如果會用到的話,要自己上網找。
  3. 依 hpdf_config.h 裡面提供的項目,看自己需不需要用到,逐一定義它們,若是不清楚如何定義的話,不妨下載 libharu-2.1.0-vc8.zip 參考 MSVC8 的設定值如何設定。
  *4. 若不使用 png 和 z library 的話,hpdf_config.h 要定義 #undef HAVE_LIBPNG#undef HAVE_LIBZ
  5. 若還是編譯不過的話,照著錯誤訊息 debug 一下,應該可以產生 libhpdf.lib。

  因為我之前有一段時間都在畫數位相機的 OSD (OnScreenDisplay),所以這套 library 用起來還滿順手的,只是 y 座標有時候會畫到反方向 (第一象限座標系)…接著談談利用它產生一份 PDF 檔的流程:

待續………

2010年6月10日 星期四

Free installer - Inno Setup

  免費安裝軟體 Inno Setup  

  因為工作上的需求,我得找個安裝程式提供客戶安裝 QuickTime 及一個執行檔(.exe),而這個安裝程式最好是易學、功能良好並且是免費的。後來找著找著,在網路上找到了二個免費安裝軟體,一個是 Inno Setup,另一個是 Nullsoft Scriptable Install System (簡稱 NSIS),這二套看起來似乎都不錯,於是就挑了 Inno Setup 來練習...

  這是我第一次使用 Inno Setup,邊看說明,邊找資訊,後來又加裝一個推薦新手使用的 IS Tool,用著用著,還真的做出了想要的安裝流程。其實我的安裝流程也很單純,就是幫客戶安裝 QuickTime 及一個執行檔 (必需已安裝 QuickTime 才能執行的)。安裝過程就是把這二個檔案複製到客戶的電腦裡,然後執行 QuickTimeInstaller.exe 讓客戶自行決定是否安裝該 QuickTime 版本 (不論客戶是否安裝 QuickTime),最後結束整個安裝流程。

  以上是大致上的安裝流程,待確認完所有的細部安裝流程並且成功實現後,再將用到的功能以 Sample Code 的方式與大家分享。

2010年6月4日 星期五

TImage_BmpResize

/** 將 Image1 的 bmp data 透過 StretchDraw 畫至 Image2 bmp buffer **/
/** Image2 的 Stretch 屬性設為 true, 可將 Image2 bmp data 的寬/高等比例顯示出來 **/
/** Image1 放在 FrmMain, Align=alNone, Stretch=true **/
/** Bn_Resize, Ed_ResizeWidth 及 Ed_ResizeHeight 放在 FrmMain **/
/** Image2 放在 FrmResize, Align=alClient, Stretch=true **/

void __fastcall TFrmMain::Bn_ResizeClick(TObject *Sender) // TButton
{
  TRect resRect;

  if( (Ed_ResizeWidth->Text.ToInt()<=0) || (Ed_ResizeHeight->Text.ToInt()<=0) ){

return;
}

resRect.top=0;
  resRect.bottom=Ed_ResizeHeight->Text.ToInt();
  resRect.left=0;
resRect.right=Ed_ResizeWidth->Text.ToInt();

  FrmResize->Image2->Picture->Bitmap->Width=Ed_ResizeWidth->Text.ToInt();
FrmResize->Image2->Picture->Bitmap->Height=Ed_ResizeHeight->Text.ToInt();
FrmResize->ClientWidth=Ed_ResizeWidth->Text.ToInt();
FrmResize->ClientHeight=Ed_ResizeHeight->Text.ToInt();

FrmResize->Image2->Picture->Bitmap->Canvas->StretchDraw(resRect, FrmMain->Image1->Picture->Bitmap);
  FrmResize->Show();
}

2010年6月3日 星期四

在 BCB 嵌入 QuickTime Player

  在電腦上安裝完 QuickTime 軟體之後,還要在 BCB 上安裝 QuickTime 的 ActiveX 控制元件。接著建立一個 bcb project,在 Form1 上面放一個 TQTControl 並將其 Name 設定為 QT,各項功能的寫法可參考下面連結:

BCB 使用 QuickTime 的 SampleCode