【A5】Delphiテクニカルセッション

知って得する！現役ヘルプデスクが答える
Delphiテクニカルエッセンス 3.0
株式会社ミガロ RAD事業部
技術支援課 顧客サポート主任
吉原 泰介

アジェンダ

• ミガロについて• VCL for the Web基礎知識• VCL for the Webのよくある問合せQ&A【Q1】戻るボタンの対応方法【Q2】Cookieを利用した制御【Q3】IWTextの右寄せ表示【Q4】開発モードの変更方法【Q5】IIS上での動作の違い
お持ち帰り資料
お持ち帰り資料••【QA】GUIアプリからWEBサイトの呼出【QA】GUIアプリからWEBサイトの呼出••【QB】デバッグ実行の判断【QB】デバッグ実行の判断

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

21

ミガロについて
株式会社ミガロ －A 100% IBM i Company－
ミガロについて
会社情報
会社情報
所在地：本社 大阪市浪速区湊町2-1-57
所在地：本社 大阪市浪速区湊町2-1-57
難波サンケイビル13F難波サンケイビル13F
東京事業所 東京都港区麻布台1-4-3
東京事業所 東京都港区麻布台1-4-3
エグゼクティブタワー麻布台11F
エグゼクティブタワー麻布台11F
事業内容
事業内容
IBM i 向けのソフトウェア・ツール販売および技術サポート
IBM i 向けのソフトウェア・ツール販売および技術サポート【開発ツール】【災害対策ソフト】【開発ツール】【災害対策ソフト】
・Delphi/400
・*noMAX・Delphi/400
・*noMAX・JACi400
・JACi400【アプリケーション･ライフサイクル・マネージメント】【アプリケーション･ライフサイクル・マネージメント】
・MKS・MKS•••

Delphi/400
DelphiをIBM iに完全対応させたミドルウェア
国内約600社、全世界約5,000社の導入実績

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

3

VCL for the Web基礎知識

2

VCL for the Web基礎知識
WEBサーバアプリケーションとはWEBブラウザ

①

②

⑤

④
WEBサーバー③
WEBサーバ

データベースアプリケーション

処理手順① WEBブラウザは、URLを指定することにより、検索等の処理などを要求② WEBサーバーは、指定されたURLより対象のWEBサーバアプリケーションをCALL③ WEBサーバアプリケーションは処理を実行し、データ等を抽出④ WEBサーバアプリケーションは処理結果をHTMLとしてWEBサーバーに返す⑤ WEBサーバーは、リクエストしたブラウザに対し、処理結果HTMLを返す

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

5VCL for the Web基礎知識
一般的なWEBサーバアプリケーションの仕組み

要求

実行

応答

結果

WEBサーバアプリケーション① 処理の振り分けアクセス② フォームデータ等の取得③ 処理実行
④ 結果よりHTML作成⑤ HTMLをWEBサーバーに渡す

処理手順① 検索処理や登録処理等の各処理をPathInfo部を使用して振り分ける② GETメソッドやPOSTメソッドを使いブラウザから要求された変数を受け取る③ ①と②で得られた情報より処理（データ取得など）を実行する④ 処理結果を元に結果値を含むHTMLを作成する⑤ HTTP応答ヘッダ及び作成したHTMLを標準出力を使ってWEBサーバーに渡す

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

63

VCL for the Web基礎知識
C/SアプリケーションとWEBサーバアプリケーションの違い
C/Sアプリが２層構造なのに対しWEBサーバアプリは３層構造になる
C/S

SQL等でデータを要求

データ抽出結果が返却
ロジック・画面生成

データ格納

WEB

表示機能のみ処理自体を要求

SQL等でデータを要求

画面を返却

データ抽出結果が返却
ロジック・画面生成

データ格納

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

7

VCL for the Web基礎知識
VCL for the Webサーバアプリケーション作成時の３つのモード•

スタンドアロンモード• 単体で動作するモード（WEBサーバー自体もVCL for the Webを利用）
WEBサーバ

•Web
Application

アプリケーションモード
• 市販のWEBサーバーを利用し、WEBアプリ部分の全てをVCL for the Webで作成
Web
Application•

HTML（フォーム）

HTML（フォーム）

ページモード• WebSnapを使ってWEBアプリを構築し、画面生成部分をVCL for the Webで作成
WebSnap

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

HTML（フォーム）

8

4

VCL for the Web基礎知識
VCL for the Webアプリケーションの構成•

ServerControllerオブジェクト• VCL for the Webの管理を行うオブジェクト• WebApplicationオブジェクトとフォームオブジェクトの管理を行う•

WebApplicationオブジェクト• WEBブラウザ毎の情報を管理するオブジェクト• 複数ページにまたがるデータ（グローバル変数等）の保持を行う•

Formオブジェクト• ブラウザ画面からの入力を受け付けたり、画面を作成したりするオブジェクト• GUIアプリケーションと同様にフォームにプログラムを行う

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

9

VCL for the Web基礎知識
VCL for the Webアプリケーションの開発手順
スタンドアロン/アプリケーションモード手順① 新規プロジェクトの作成② フォームにコンポーネントを貼り付けてプロパティの設定③ 必要に応じてイベントハンドラを作成④ コンパイル⑤ 実行（テスト）

GUIアプリケーションと同じような手順で開発が可能
GUIアプリケーションと同じような手順で開発が可能
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

105

VCL for the Web基礎知識
VCL for the Webプロジェクトの新規作成
VCL for the Webプロジェクトの作成手順
1. ファイル⇒新規作成⇒その他 を選択
2. Delphiプロジェクト⇒VCL for Web より、[VCL for the Web Application Wizard] を選択
3. ウィザード画面より作成モード、保存先、ファイル名等を指定
スタンドアロンモードの場合StandAlone Application
アプリケーションモードの場合
ISAPI Extension

Create User Sesseion にチェック（ユーザーセッションを使う）

プロジェクトの保存先、プロジェクト名を指定

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

11

VCL for the Web基礎知識
コンポーネントの配置
コンポーネントの貼り付けおよびプロパティの設定
1. ウィザードにて作成されたプロジェクトよりUnit1を選択し、フォームを表示
2. [IWStandard]ページより、IWLabel、IWEdit、IWButton をフォームに貼り付け プロパティをセット

IWLabel1コンポーネント
Captionプロパティ = ‘メッセージ’

IWEdit1コンポーネント
Textプロパティ = ‘’(空文字)

IWButton1コンポーネント
Captionプロパティ = ‘表示’

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

126

VCL for the Web基礎知識
イベントの作成～コンパイル
イベントハンドラの設定とコンパイル/実行
1. IWButton1コンポーネントのonClickイベントハンドラを設定し、下記コードを入力
procedure TIWForm1.IWButton1Click(Sender: TObject);
begin
WebApplication.ShowMessage(IWEdit1.Text);end;

2. コンパイル ⇒ 実行 （起動するフォームからブラウザ起動ボタンを押下し動作確認）
ボタンクリックにより、エディットボックスの入力
文字列がメッセージボックスに出力

Execute ボタン押下

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

13

VCL for the Web基礎知識
データベース接続
DB連結用コンポーネント• データベース接続はDBExpress等、GUIと同様に使用することができます。
データベースに連結した画面を作成したい場合[IW Data]ページにコンポーネントが用意されています。
（[Data Control]ページのコンポーネントに相当）
例えばDataSet->
DataSource->
IWDBGridによってデータを一覧表示

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

147

VCL for the Web基礎知識
画面遷移
画面の遷移方法• Delphiプロジェクト⇒ VCL for the Web より、[New Form] を選択して追加• 次画面呼び出し元の処理• Createメソッドでオブジェクトを生成• Showメソッドで遷移• 次画面の処理• 画面終了時にReleaseメソッド呼び出しにより、元のフォームに戻る
procedure TfrmMain.btnGoFrm2Click(Sender: TObject);var
frmDetail: TfrmDetail;beginfrmDetail := TfrmDetail.Create(WebApplication);frmDetail.Show;end;

フォーム変数はGlobal定義されていないので、ローカル変数として定義

procedure TfrmDetail.btnBackClick(Sender: TObject);
begin
Release;end;

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

15

VCL for the Web基礎知識
グローバル変数
グローバル変数の扱い• WEBアプリケーションの場合、WEBブラウザ単位に変数を保持しなければならない。
• VCL for the Webの場合、UserSessionユニットのIWUserSessionクラスに変数を定義し、UserSessionオブジェクトとして利用する。
TIWUserSession = class(TIWUserSessionBase)
sesSession: TSession;
グローバル変数
dbAS: TDatabase;
WEBブラウザ毎に
qrySelectData: TQuery;
変数が別々に保持さprivate
れる{ Private declarations }public{ Public declarations }LogOnUserID: String;// ログオンユーザーID
LogOnUserName: String;// ログオンユーザー名
end;
procedure TfrmMain.IWAppFormRender(Sender: TObject);begin// ログオンユーザー名の表示
lblLogOnUser.Caption := UserSession.LogOnUserName;end;
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

168

よくある問合せQ&A

よくある問合せQ&A【Q1】戻るボタンの対応方法【質問】
IE上の戻るボタンを制御する方法にはどのようなものがあIE上の戻るボタンを制御する方法にはどのようなものがあるのでしょうか。
るのでしょうか。
【回答】
バージョンにもよりますが、ブラウザの戻るボタンの動作バージョンにもよりますが、ブラウザの戻るボタンの動作
はIWServerControllerのOnBackButtonイベントで処はIWServerControllerのOnBackButtonイベントで処理を行うことができます。
理を行うことができます。
¥Demos¥IntraWeb¥Win32¥BackButtonにサンプルも¥Demos¥IntraWeb¥Win32¥BackButtonにサンプルも用意されています。（バージョンによって異なります。）
用意されています。（バージョンによって異なります。）
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

189

よくある問合せQ&A【Q1】戻るボタンの対応方法
サンプル¥Demos¥IntraWeb¥Win32¥BackButton

procedure TIWServerController.IWServerControllerBaseBackButton(if WebApplication.FindComponent(AFormName) <> nil thenASubmittedSequence, ACurrentSequence: Integer; AFormName: String;begin

var VHandled, VExecute: Boolean);ディフォルトにするフォーム

const

WebApplication.SetActiveForm(WebApplication.FindComponent(AFormName) as

DefaultFormName = 'MainForm';

TIWContainer);type

end else begin

TIWFormClass = class of TIWForm;tryvar指定されたフォーム名をWebApplicationの中で探して存在すればアクティブにする。

LForm : TIWForm;

LForm := TIWFormClass(FindClass('T' +AFormName)).Create(WebApplication);

begin

WebApplication.SetActiveForm(LForm);// This is a generic back-button handler that can easily be adapted toexcept
VHandled := false;// your application
VHandled := True;
VExecute := True;

フォーム名が取得できない場合はディフォルトのフォームを指定

end;
end;

指定されたフォーム名をWebApplicationの中で探して存在しなければ生成してアクティブにする。

end;
if AFormName = '' then
AFormName := DefaultFormName;

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

19

よくある問合せQ&A【Q2】Cookieを利用した制御【質問】
Cookieを利用して当日限りで1回目以降のログイン入力にCookieを利用して当日限りで1回目以降のログイン入力に初期値を設定することはできますか？
初期値を設定することはできますか？
【回答】
CookieはTWebRequesのCookieFieldsプロパティやCookieはTWebRequesのCookieFieldsプロパティやTWebResponseのSetCookieFieldメソッドで扱うことがTWebResponseのSetCookieFieldメソッドで扱うことができます。
できます。
扱えることとは別にセキュリティ的な配慮は必要です。
扱えることとは別にセキュリティ的な配慮は必要です。

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

20

10

よくある問合せQ&A【Q2】Cookieを利用した制御
２回目以降ログイン時

初回ログイン時ログインでCookie書込み

Cookieから初期値取得

Cookie

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

21

よくある問合せQ&A【Q2】Cookieを利用した制御
ログイン時にCookieの作成
procedure TIWForm1.IWButton1Click(Sender: TObject);var
slstCookie: TStringList;
begin
slstCookie := TStringList.Create;trywith slstCookie do
begin
Clear;
Append('USER=' + IWEdit1.Text);
Append('PASS=' + IWEdit2.Text);

ログインでCookie書込み

end;
webapplication.Response.SetCookieField(slstCookie, '', '', (Now + 1), False);
finally
slstCookie.Free;
end;end;

SetCookieFieldメソッドについては次ページ参照

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

2211

よくある問合せQ&A【Q2】Cookieを利用した制御
SetCookieFieldメソッドとCookieの扱い
procedure SetCookieField(Values: TStrings; const ADomain: string; const APath: string; AExpires:TDateTime; ASecure: Boolean);【パラメータ】
Values：Cookieの格納内容
複数のCookieをまとめて書き込むことができます。
ADomain:Cookie送信先のドメイン名
省略時は使用している場合、Cookie応答を生成したサーバのホスト名です。
APath: Cookie送信先のパス
URLのドメイン以降のパス。
取得時にはこのパスが前方一致で一致するCookieを扱います。
実際にアクセスを行うURLの考慮が必要です。
Aexpires: Cookie有効期限
削除する場合は過去の日付を設定したりもします。
Asecure:セキュリティの確保
セキュリティが確保された接続の使用時に Cookie をクライアントによってのみ渡すかどうかを設定します。

例えばこのURLであれば動的生成部分を含めないように配置先を指定する。
‘/DelphiISAPI’と指定しておくと前方一致するURL上で格納したCookieを扱うことができます。

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

23

よくある問合せQ&A【Q2】Cookieを利用した制御
画面起動時にCookieの取得

Cookieに格納された値

procedure TIWForm1. IWAppFormCreate(Sender:TObject);
beginwith webapplication.Request.CookieFields do
begin
IWEdit1.Text := HttpDecode(Values['USER']);
IWEdit2.Text := HttpDecode(Values['PASS']);
end;

Cookie上の値
USER%82%E6%82%B5%82%ED%82%E7
PASSMIGARO
そのまま取得すると・・・

end;デコードして値を取得。

Cookieから初期値取得

空白や特殊記号、日本語等の全角文字
はHTTPAppユニットのHTTPDecodeでデコードして取得する必要があります。

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

2412

よくある問合せQ&A【Q3】IWTextの右寄せ表示【質問】
IWTextでの表示内容を右寄せで表示したいのですが、IWTextでの表示内容を右寄せで表示したいのですが、可能でしょうか？
可能でしょうか？
【回答】
IWText、IWMemo、IWButton等には残念ながらIWText、IWMemo、IWButton等には残念ながらAlignmentプロパティは存在しません。
Alignmentプロパティは存在しません。
右寄せに表示を行いたい場合はstyleタグを利用する方右寄せに表示を行いたい場合はstyleタグを利用する方法が考えられます。
法が考えられます。

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

25

よくある問合せQ&A【Q3】IWTextの右寄せ表示
ExtraTagParamsプロパティにStyleタグを記述

Delphi7で附属していたIWEditもAlignmentプロパティがないので同じような対処ができます。

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

26

13

よくある問合せQ&A【Q4】開発モードの変更方法【質問】
スタンドアロンで開発してISAPIアプリケーションに変更
スタンドアロンで開発してISAPIアプリケーションに変更
することはできますか？
することはできますか？
【回答】
ISAPIアプリケーションで新規作成したプロジェクトにISAPIアプリケーションで新規作成したプロジェクトにスタンドアロンで作成モジュールを取り込みを行うことでスタンドアロンで作成モジュールを取り込みを行うことで簡単に作り変えることができます。
簡単に作り変えることができます。
テスト/本番用にプロジェクトファイルを用意すると便利です。
テスト/本番用にプロジェクトファイルを用意すると便利です。

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

27

よくある問合せQ&A【Q4】開発モードの変更方法
ISAPIへの変更手順①メニューの[ファイル｜新規作成｜その他]を選び、表示されたツリーの中から「Delphi プロジェクト-VCL for the Web」を選択します。
次に表示されたアイコンの中から「VCL for the Web Application Wizard」を選択します。
「Application Type」で「ISAPI Extension」を選択します。

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

28

14

よくある問合せQ&A【Q4】開発モードの変更方法② IWForm1、UserSessionUnitの、ServerControllerのファイルが作成されます。
デフォルトで作成されたこれらのファイルが不要ならば、メニューの「プロジェクト|プロジェクトから削除」で削除します。

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

29

よくある問合せQ&A【Q4】開発モードの変更方法③メニューの「プロジェクト|プロジェクトに追加」を選択し、スタンドアロンモードのユニットのあるフォルダを指定し、必要なユニットを追加します。

④ メニューの「ファイル｜すべて保存」を選びます。
⑤メニューの「プロジェクト|XXXXX（プロジェクト名）をコンパイル」を行うと、ISAPIのdllファイルが作成されます。

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

30

15

よくある問合せQ&A【Q5】IIS上での動作の違い【質問】
スタンドアロンモードで動作した処理やタイムアウトの動作
スタンドアロンモードで動作した処理やタイムアウトの動作が、ＩＩＳ上ではうまくいきません。
が、ＩＩＳ上ではうまくいきません。
【回答】
IIS上で動作を行う場合、スタンドアロンモードと違い、IIS上で動作を行う場合、スタンドアロンモードと違い、IISのユーザーでプログラムが実行されることになります。
IISのユーザーでプログラムが実行されることになります。
環境上の権限やIISの制御の設定などの実行環境との環境上の権限やIISの制御の設定などの実行環境との違いを確認する必要があります。
違いを確認する必要があります。

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

31

よくある問合せQ&A【Q5】IIS上での動作の違い
実行ユーザーの権限
IISが稼動しているOSはディフォルトでは「IUSR_サーバー名」アカウントのユーザーとして、匿名アクセスを認識しています。ISAPIアプリケーションもこのユーザーで実行されることになります。
この「IUSR_サーバー名」アカウントはディフォルトではローカルログオン権限とゲスト権限しか割り当てられていないません。スタンドアロンモードとの動作の違いをISAPIの実行ユーザーの権限によるものかを確認する必要があります。
Webサーバ
IIS

例えばプリンタに対する権限

ブラウザ
アクセス

ISAPI
アプリケーション

アプリケーションの実行ユーザーは「IUSR_サーバー名」

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

処理

プリンタ

32

16

よくある問合せQ&A【Q5】IIS上での動作の違い
セッションのタイムアウトについて【アプリケーション側】
IWServerControllerのSessionTimeOutプロパティで設定することができます。
またSessionTimeOutURLプロパティでのURLやファイルを設定しておくことで、セッションアウト時の遷移先とすることもできます。（URLとファイルは片方しか設定できません）
見落とし易い【IIS側】
バージョンによって設定も異なりますが、通常の「接続のタイムアウト」の設定の他、アプリケーションプール上のアイドルタイムアウトなどの設定も管理する必要があります。
IIS側でセッションが切断されてしまうと、アプリケーション側もセッションを保つことはできません。

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

33

番外Q&A

【QA】GUIアプリからWEBサイトの呼出【質問】
GUIアプリケーション内で検索Webサイトを呼び出してGUIアプリケーション内で検索Webサイトを呼び出して結果を表示するようなことはできますか？
結果を表示するようなことはできますか？
【回答】
検索パラメータなどをURLエンコードで変換して、検索パラメータなどをURLエンコードで変換して、サイトにあわせた指定を行い、呼出を行うことができます。
サイトにあわせた指定を行い、呼出を行うことができます。
WebBrowserコンポーネントで結果をアプリケーション
WebBrowserコンポーネントで結果をアプリケーション画面内に取り込むことも可能です。
画面内に取り込むことも可能です。

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

34

17

番外Q&A【QA】GUIアプリからWEBサイトの呼出WEBサーバーへの問い合わせ
WEBブラウザからWEBサーバーへの問い合わせ
HTTP要求メッセージをWEBブラウザからWEBサーバーへ送る（ヘッダ部）
URL情報、ブラウザ情報等（エンティティ部）
フォーム情報問い合わせ方法
２種類の方法が存在• GETメソッド• POSTメソッド

HTTP要求メッセージ

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

35

番外Q&A

【QA】GUIアプリからWEBサイトの呼出GETメソッドとPOSTメソッド
それぞれの特徴
GETメソッド

POSTメソッド

パラメータセット方法

URL内のQuery部

エンティティ部

WEBブラウザの表示

アドレス部にQuery部が付加されて送信

表示は不変

パラメータの大きさ大きなデータ送信は不向き

大きなデータを送信可能

POSTメソッドは、フォームデータ内部にデータを持つ為、URLでの指定は不可能だが、GETメソッドの場合、URL自体にパラメータが記述できるため、比較的容易に問い合わせが可能⇒ GETメソッドの場合、URLにパラメータを指定した問い合わせが可能
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

3618

番外Q&A【QA】GUIアプリからWEBサイトの呼出GETメソッドによる問い合わせ例（１）
日本郵便 郵便番号検索 （GETメソッド）

http://search.post.japanpost.jp/cgi-zip/zipcode.php?zip=5560017
プロトコル

ホスト名

スクリプト名

問い合わせ
QUERY

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

37

番外Q&A

【QA】GUIアプリからWEBサイトの呼出GETメソッドによる問い合わせ例（２）
http://www.google.co.jp/search?num=30&q=%E3%83%9F%E3%82%AC%E3%83%AD
google検索 （GETメソッド）

問い合わせQUERY
結果件数=30件＆検索語＝ミガロ

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

3819

番外Q&A【QA】GUIアプリからWEBサイトの呼出
URLエンコード
ブラウザから送信するデータは、URLエンコードが必要
URLエンコード ・・・ 空白や特殊記号、日本語等の全角文字を符号化するルール
使用する文字コード体系により値が決定例） 「ミガロ」– Shift-JIS「%83%7E%83K%83%8D」– UTF-8「%E3%83%9F%E3%82%AC%E3%83%AD」
Delphiでは、HTTPAppユニットにあるHTTPEncode関数で変換可能• Shift-JIS の場合 HTTPEncode(Avalue)• UTF-8 の場合
HTTPEncode(AnsiToUtf8(Avalue))

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

39

番外Q&A

【QA】GUIアプリからWEBサイトの呼出
GoogleMapの呼出例

Delphiで入力した住所をURLエンコードし、URLを送信応答されたHTMLをWebBrowser
コンポーネント上に表示

procedure TfrmMain.button1Click(Sender: TObject);var
sText: String;
begin
sText :=
Format('http://www.google.co.jp/maphp?hl=ja&tab=wl&q=%s',[HTTPEncode(AnsiToUtf8(edtAddress.Text))]);
WebBrowser1.Navigate(sText);
end;

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

4020

番外Q&A【QB】デバッグ実行の判断【質問】
開発環境でテストで実行する際のＤＢ接続のログイン
開発環境でテストで実行する際のＤＢ接続のログインを省くことはできませんか？
を省くことはできませんか？
【回答】
実際のアプリケーションの実行とデバッグ実行では実際のアプリケーションの実行とデバッグ実行ではSystem.DebugHook
System.DebugHook変数の値が異なります。
変数の値が異なります。
System.DebugHook
System.DebugHook変数で判断して、ログインの省略変数で判断して、ログインの省略を用意しておけば、デバッグ実行の省略ができます。
を用意しておけば、デバッグ実行の省略ができます。

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

41

番外Q&A

【QB】デバッグ実行の判断
SQLConnectionのDebugHook制御例
with SQLConnection1 do
begin//デバッグ実行であればユーザー/パスワードを自動設定
if DebugHook <> 0 then
begin
LoginPrompt := False;
Params.Values['User_Name'] := 'ユーザー名';

DebugHook
デバッグ実行時:1
EXE実行時：0

Params.Values['Password'] := 'パスワード';
endelsebeginLoginPrompt := True;
Params.Values['User_Name'] := '';開発環境デバッグ実行時だけ暗黙のログインを行うことで、開発上での手間を省きます。
その他デバッグ実行時のみ扱うデータを切り替えるなどにも便利です。

Params.Values['Password'] := '';end;

Connected := True;end;

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

4221