コンポーネント - Indy
Lazarusでネットの操作ができるコンポーネントです
ライセンス
MPL(Mozilla Public License)Indyの準備
インストール
オンラインパッケージマネージャーを用いてインストールします
旧バージョン
表示する
ver 10.2.0.3
Indyのダウンロード
http://www.indyproject.org/Sockets/fpc/index.en.aspx
Indyコンポーネント登録
- Lazarusのメインメニューから[プロジェクト(P)]-[プロジェクトオプション...]を選択します
- 左のメニューツリーで[パス]を選択し、[その他のユニットファイル]に、展開したIndyのfpcパスを設定し、[OK]ボタンをクリックしてプロジェクトのオプションを閉じます
例:
/home/hoge/Lazarus Libraries/indy/indy-10.2.0.3/fpc;.
- Lazarusのメインメニューから[パッケージ(P)]-[パッケージファイル(.lpk)を開く]を選択し、[indylaz.lpk]を開きます
- パッケージ[lnetvisual]が開くので、[オプション]を選択します
- 左のメニューツリーで[パス]を選択し、[その他のユニットファイル]に、fpcのパスを設定し、[OK]ボタンをクリックしてパッケージののコンパイラオプションを閉じます
例:
../fpc;.
- [コンパイル]を選択して、パッケージをコンパイルします
- もう一度、コンパイル(4〜実行)します。もう一度コンパイルしないとIdStreamVCLが見つからないとエラーが帰ってきます
- このコンポーネントは、Lazarusのビジュアルコンポーネントを持つので、[使用...]-[インストール]を選択し、Lazarusに組み込みます
- [はい]ボタンをクリックし、パッケージのコンパイルとLazarusの再構築を実行します
Indyヘルプのダウンロード
http://mediaserver.fh-wedel.de/public/labp/indy/downloads.html
Indyを使用する時
[プロジェクトオプション]を選択し、左のメニューツリーで[パス]を選択し、[その他のユニットファイル]に、Indyのfpcパスを設定します
Windows64bit版で正常にコンパイルできない
IdAntiFreeze.pasファイルを以下の様に修正します
[修正前] type TIdAntiFreeze = class(TIdAntiFreezeBase) public procedure Process; override; end;
[修正後] type TIdAntiFreeze = class(TIdAntiFreezeBase) public {$IFDEF WIN32} procedure Process; override; {$ENDIF} end;
lazcontroldsgnが見つからないメッセージが出て、Indyがインストールできない(Lazarus 1.8以降)
以下のメッセージが表示された場合
Lazarus.pp(1,1) Fatal: Cannot find lazcontroldsgn used by Lazarus. Check if package LazControlDsgn creates lazcontroldsgn.ppu, check nothing deletes this file and check that no two packages have access to the unit source..
- Lazarusを起動します
- 以下のパッケージファイルを開いてコンパイル、及びインストールします
/usr/lib/lazarus/1.8.x/components/lazcontrols/design/lazcontroldsgn.lpk
(1.8.x ... Lazarusのリリース番号) - Lazarusを終了します
- 端末を使って、以下のコマンドを実行します
sudo cp ~/.lazarus/lib/LazControlDsgn/lib/i386-linux/gtk2/* /usr/lib/lazarus/1.8.x/components/lazcontrols/lib/i386-linux/gtk2/
(1.8.x ... Lazarusのリリース番号) - Indyをインストールします
参考: http://forum.lazarus.freepascal.org/index.php/topic,39894.0.html
トラブルシューティング
IdFTPで例外クラス'EIdFTPListPaserError'が発生
現象
IdFTP1.DirectoryListing.Countを使用すると以下のメッセージが出ます
対策
IndyパッケージにIdAllFTPListParsers.pasを追加します- [パッケージ(C)]→[読み込まれているパッケージを開く...]を選択します
- パッケージ名から[indylaz]を選択し、[開く]をクリックします
- [+追加]ボタンをクリックし、[ファイルシステムからファイルを追加]を選択します
- [Protocols/IdAllFTPListParsers.pas]を選択し、[開く(O)]ボタンをクリックします
- [保存(S)]ボタンをクリックし、[コンパイル]ボタンをクリックします
- [パッケージindylaz v10.x.x]ダイアログを閉じます
IdThreadComponentでイベントが指定できない
現象
以下のメッセージが現れて、イベントが指定できませんIdGlobal.pas(1925,108) Error: expected ;, but deprecated found
対策
以下のファイルの指定した行を修正します- IdThread.pas (311行)
GThreadCount: TIdThreadSafeInteger deprecated = nil; // GThreadCount: TIdThreadSafeInteger = nil{$IFDEF HAS_DEPRECATED}{$IFDEF USE_SEMICOLON_BEFORE_DEPRECATED};{$ENDIF} deprecated{$ENDIF};
- IdGlobal.pas (1925行)
GOffsetFromUTC: TDateTime deprecated = 0; // GOffsetFromUTC: TDateTime = 0{$IFDEF HAS_DEPRECATED}{$IFDEF USE_SEMICOLON_BEFORE_DEPRECATED};{$ENDIF} deprecated{$ENDIF};