2002/9/15 Ver.1.0
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using WebDictionary.jp.co.est.btonic;
namespace WebDictionary
{
/// <summary>
/// Form1 の概要の説明です。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private NetDicV06 netDicV06 = null; // Web Service インスタンス
private DicInfo[] dicInfoList = null; // 辞書情報の配列(出力)
private DicInfo currentDict = null; // 辞書
private DicItem[] itemList = null; // 辞書項目の配列(出力)
private string errorMessage; // エラーメッセージ
private System.Windows.Forms.ComboBox cbDicInfo;
private System.Windows.Forms.TextBox tbSearchText;
private System.Windows.Forms.Button bSearch;
private System.Windows.Forms.ListBox listBox1;
private System.Windows.Forms.RichTextBox richTextBox1;
private System.Windows.Forms.Label labelMessage;
private System.Windows.Forms.Label label1; //エラーメッセージ(出力)
/// <summary>
/// 必要なデザイナ変数です。
/// </summary>
private System.ComponentModel.Container components = null;
public Form1()
{
//
// Windows フォーム デザイナ サポートに必要です。
//
InitializeComponent();
}
/// <summary>
/// 使用されているリソースに後処理を実行します。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// デザイナ サポートに必要なメソッドです。このメソッドの内容を
/// コード エディタで変更しないでください。
/// </summary>
private void InitializeComponent()
{
this.cbDicInfo = new System.Windows.Forms.ComboBox();
this.tbSearchText = new System.Windows.Forms.TextBox();
this.bSearch = new System.Windows.Forms.Button();
this.listBox1 = new System.Windows.Forms.ListBox();
this.richTextBox1 = new System.Windows.Forms.RichTextBox();
this.labelMessage = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// cbDicInfo
//
this.cbDicInfo.Location = new System.Drawing.Point(16, 16);
this.cbDicInfo.Name = "cbDicInfo";
this.cbDicInfo.Size = new System.Drawing.Size(296, 20);
this.cbDicInfo.TabIndex = 0;
this.cbDicInfo.SelectedIndexChanged += new System.EventHandler(this.OnDictionaryChanged);
//
// tbSearchText
//
this.tbSearchText.Location = new System.Drawing.Point(16, 56);
this.tbSearchText.Name = "tbSearchText";
this.tbSearchText.Size = new System.Drawing.Size(296, 19);
this.tbSearchText.TabIndex = 1;
this.tbSearchText.Text = "";
//
// bSearch
//
this.bSearch.Location = new System.Drawing.Point(336, 56);
this.bSearch.Name = "bSearch";
this.bSearch.TabIndex = 2;
this.bSearch.Text = "検索";
this.bSearch.Click += new System.EventHandler(this.bSearch_Click);
//
// listBox1
//
this.listBox1.ItemHeight = 12;
this.listBox1.Location = new System.Drawing.Point(16, 168);
this.listBox1.Name = "listBox1";
this.listBox1.Size = new System.Drawing.Size(168, 124);
this.listBox1.TabIndex = 4;
this.listBox1.SelectedIndexChanged += new System.EventHandler(this.OnSelectedIndexChanged);
//
// richTextBox1
//
this.richTextBox1.Location = new System.Drawing.Point(200, 168);
this.richTextBox1.Name = "richTextBox1";
this.richTextBox1.Size = new System.Drawing.Size(288, 128);
this.richTextBox1.TabIndex = 5;
this.richTextBox1.Text = "";
//
// labelMessage
//
this.labelMessage.Location = new System.Drawing.Point(24, 96);
this.labelMessage.Name = "labelMessage";
this.labelMessage.Size = new System.Drawing.Size(456, 23);
this.labelMessage.TabIndex = 6;
//
// label1
//
this.label1.Location = new System.Drawing.Point(208, 144);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(48, 16);
this.label1.TabIndex = 7;
this.label1.Text = "意味";
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);
this.ClientSize = new System.Drawing.Size(504, 310);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.label1,
this.labelMessage,
this.richTextBox1,
this.listBox1,
this.bSearch,
this.tbSearchText,
this.cbDicInfo});
this.Name = "Form1";
this.Text = "Form1";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void Form1_Load(object sender, System.EventArgs e)
{
// Web辞書検索サービスのインスタンスを作成する。
this.netDicV06 = new NetDicV06();
// 辞書のリストを取得する。
bool success = netDicV06.GetDicList(out dicInfoList, out errorMessage);
#region ComboBox に辞書リストを設定する。
if (success)
{
foreach (DicInfo dicInfo in dicInfoList)
{
int index = this.cbDicInfo.Items.Add(dicInfo.FullName);
}
this.cbDicInfo.SelectedIndex = 0;
}
else
{
MessageBox.Show("接続に失敗しました。",
this.Text, // キャプション
MessageBoxButtons.OK,
MessageBoxIcon.Error);
Close();
}
#endregion
}
private void bSearch_Click(object sender, System.EventArgs e)
{
DicInfo d = this.currentDict;
int reqItemIndex = 0; // 取得する辞書項目の開始インデックス
int reqItemTitleCount = 10; // 取得する辞書項目の数
int reqItemContentCount = 10; // 内容も同時に取得する辞書項目の数
int itemCountTotal; // 見つかった辞書項目数(出力)
int itemCountInList; // 実際に取得した辞書項目数(出力)
Cursor cursor = this.Cursor;
this.Cursor = Cursors.WaitCursor; // Wait Cursor にする。
bool success = netDicV06.SearchDicItem(
d.DicID, // 辞書ID
this.tbSearchText.Text, // 検索語
ScopeOption.HEADWORD, // 見出し語検索(HEADWORD)/索引語検索(KEYWORD)/全文検索(ANYWHERE)
MatchOption.CONTAIN, // 完全一致(EXACT)/部分一致(CONTAIN)/前方一致(STARTWITH)/後方検索(ENDWITH)
FormatOption.HTML, // HTML形式(V06はこれのみ)
ResourceOption.URI, // バイナリデータの取得方式指定 ハイパーリンク(URI)で指定(V06はこれのみ)
CharsetOption.UNICODE, // 使用文字セット指定
reqItemIndex, // 取得する辞書項目の開始インデックス
reqItemTitleCount, // 取得する辞書項目の数
reqItemContentCount, // 内容も同時に取得する辞書項目の数
out itemCountTotal, // 見つかった辞書項目数(出力)
out itemCountInList, // 実際に取得した辞書項目数(出力)
out itemList, // 辞書項目の配列(出力)
out errorMessage // エラーメッセージ(出力)
);
this.Cursor = cursor; // Cursor を元に戻す。
this.labelMessage.Text = itemCountTotal.ToString() + "件みつかりました。最大10件まで表示します。";
this.listBox1.Items.Clear();
foreach(DicItem dicItem in itemList)
{
this.listBox1.Items.Add(dicItem.Title);
}
}
// 辞書が変更になった。
private void OnDictionaryChanged(object sender, System.EventArgs e)
{
this.currentDict = this.dicInfoList[this.cbDicInfo.SelectedIndex];
}
// 検索結果のリストをセレクトしたので、詳細を表示する。
private void OnSelectedIndexChanged(object sender, System.EventArgs e)
{
this.richTextBox1.Text = this.itemList[this.listBox1.SelectedIndex].Body.InnerText;
}
}
}
|
日付 | バージョン | コメント |
2002/9/16 | V1.0 | 初期バージョン。意味の表示を HTML 一時ファイルに落として表示する方法。 |
2002/9/28 | V1.1 | 意味の表示を オンメモリで表示する方法に変更。 |
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using WebDictionary.jp.co.est.btonic;
namespace WebDictionary
{
/// <summary>
/// Form1 の概要の説明です。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private NetDicV06 netDicV06 = null; // Web Service インスタンス
private DicInfo[] dicInfoList = null; // 辞書情報の配列(出力)
private DicInfo currentDict = null; // 辞書
private DicItem[] itemList = null; // 辞書項目の配列(出力)
private System.Windows.Forms.ComboBox cbDicInfo;
private System.Windows.Forms.TextBox tbSearchText;
private System.Windows.Forms.Button bSearch;
private System.Windows.Forms.ListBox listBox1;
private AxSHDocVw.AxWebBrowser axWebBrowser1;
private System.Windows.Forms.StatusBar statusBar1;
private System.Windows.Forms.ComboBox cbScope;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label3;
private AxSHDocVw.AxWebBrowser axWebBrowser2;
private System.Windows.Forms.StatusBarPanel statusBarPanel1; //エラーメッセージ(出力)
/// <summary>
/// 必要なデザイナ変数です。
/// </summary>
private System.ComponentModel.Container components = null;
public Form1()
{
//
// Windows フォーム デザイナ サポートに必要です。
//
InitializeComponent();
}
/// <summary>
/// 使用されているリソースに後処理を実行します。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// デザイナ サポートに必要なメソッドです。このメソッドの内容を
/// コード エディタで変更しないでください。
/// </summary>
private void InitializeComponent()
{
System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Form1));
this.cbDicInfo = new System.Windows.Forms.ComboBox();
this.tbSearchText = new System.Windows.Forms.TextBox();
this.bSearch = new System.Windows.Forms.Button();
this.listBox1 = new System.Windows.Forms.ListBox();
this.axWebBrowser1 = new AxSHDocVw.AxWebBrowser();
this.cbScope = new System.Windows.Forms.ComboBox();
this.statusBar1 = new System.Windows.Forms.StatusBar();
this.statusBarPanel1 = new System.Windows.Forms.StatusBarPanel();
this.label2 = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.axWebBrowser2 = new AxSHDocVw.AxWebBrowser();
((System.ComponentModel.ISupportInitialize)(this.axWebBrowser1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.statusBarPanel1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.axWebBrowser2)).BeginInit();
this.SuspendLayout();
//
// cbDicInfo
//
this.cbDicInfo.Location = new System.Drawing.Point(72, 16);
this.cbDicInfo.Name = "cbDicInfo";
this.cbDicInfo.Size = new System.Drawing.Size(360, 20);
this.cbDicInfo.TabIndex = 0;
this.cbDicInfo.SelectedIndexChanged += new System.EventHandler(this.OnDictionaryChanged);
//
// tbSearchText
//
this.tbSearchText.Location = new System.Drawing.Point(72, 48);
this.tbSearchText.Name = "tbSearchText";
this.tbSearchText.Size = new System.Drawing.Size(144, 19);
this.tbSearchText.TabIndex = 1;
this.tbSearchText.Text = "";
//
// bSearch
//
this.bSearch.Location = new System.Drawing.Point(8, 120);
this.bSearch.Name = "bSearch";
this.bSearch.Size = new System.Drawing.Size(208, 64);
this.bSearch.TabIndex = 2;
this.bSearch.Text = "検索";
this.bSearch.Click += new System.EventHandler(this.bSearch_Click);
//
// listBox1
//
this.listBox1.ItemHeight = 12;
this.listBox1.Location = new System.Drawing.Point(8, 200);
this.listBox1.Name = "listBox1";
this.listBox1.Size = new System.Drawing.Size(208, 124);
this.listBox1.TabIndex = 4;
this.listBox1.SelectedIndexChanged += new System.EventHandler(this.OnSelectedIndexChanged);
//
// axWebBrowser1
//
this.axWebBrowser1.Enabled = true;
this.axWebBrowser1.Location = new System.Drawing.Point(232, 48);
this.axWebBrowser1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axWebBrowser1.OcxState")));
this.axWebBrowser1.Size = new System.Drawing.Size(200, 136);
this.axWebBrowser1.TabIndex = 10;
//
// cbScope
//
this.cbScope.Items.AddRange(new object[] {
"見出し語検索",
"キーワード検索",
"全文検索"});
this.cbScope.Location = new System.Drawing.Point(72, 80);
this.cbScope.Name = "cbScope";
this.cbScope.Size = new System.Drawing.Size(144, 20);
this.cbScope.TabIndex = 11;
//
// statusBar1
//
this.statusBar1.Location = new System.Drawing.Point(0, 344);
this.statusBar1.Name = "statusBar1";
this.statusBar1.Panels.AddRange(new System.Windows.Forms.StatusBarPanel[] {
this.statusBarPanel1});
this.statusBar1.ShowPanels = true;
this.statusBar1.Size = new System.Drawing.Size(448, 22);
this.statusBar1.SizingGrip = false;
this.statusBar1.TabIndex = 12;
//
// statusBarPanel1
//
this.statusBarPanel1.Width = 400;
//
// label2
//
this.label2.Location = new System.Drawing.Point(8, 80);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(56, 16);
this.label2.TabIndex = 13;
this.label2.Text = "検索範囲";
//
// label1
//
this.label1.Location = new System.Drawing.Point(8, 48);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(56, 16);
this.label1.TabIndex = 14;
this.label1.Text = "検索語句";
//
// label3
//
this.label3.Location = new System.Drawing.Point(8, 16);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(56, 16);
this.label3.TabIndex = 15;
this.label3.Text = "辞書選択";
//
// axWebBrowser2
//
this.axWebBrowser2.Enabled = true;
this.axWebBrowser2.Location = new System.Drawing.Point(232, 200);
this.axWebBrowser2.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axWebBrowser2.OcxState")));
this.axWebBrowser2.Size = new System.Drawing.Size(200, 128);
this.axWebBrowser2.TabIndex = 16;
this.axWebBrowser2.DocumentComplete += new AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEventHandler(this.OnDocumentComplete);
//
// Form1
//
this.AcceptButton = this.bSearch;
this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);
this.ClientSize = new System.Drawing.Size(448, 366);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.axWebBrowser2,
this.label3,
this.label1,
this.label2,
this.statusBar1,
this.cbScope,
this.axWebBrowser1,
this.listBox1,
this.bSearch,
this.tbSearchText,
this.cbDicInfo});
this.Name = "Form1";
this.Text = "辞書検索 Web Service";
this.Load += new System.EventHandler(this.Form1_Load);
((System.ComponentModel.ISupportInitialize)(this.axWebBrowser1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.statusBarPanel1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.axWebBrowser2)).EndInit();
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void Form1_Load(object sender, System.EventArgs e)
{
// Web辞書検索サービスのインスタンスを作成する。
this.netDicV06 = new NetDicV06();
string errorMessage; // エラーメッセージ
// 辞書のリストを取得する。
bool success = netDicV06.GetDicList(out dicInfoList, out errorMessage);
#region ComboBox に辞書リストを設定する。
if (success)
{
foreach (DicInfo dicInfo in dicInfoList)
{
int index = this.cbDicInfo.Items.Add(dicInfo.FullName);
}
this.cbDicInfo.SelectedIndex = 0;
}
else
{
this.statusBarPanel1.Text = errorMessage;
MessageBox.Show("接続に失敗しました。",
this.Text, // キャプション
MessageBoxButtons.OK,
MessageBoxIcon.Error);
Close();
}
this.cbScope.SelectedIndex = 0;
#endregion
}
private void bSearch_Click(object sender, System.EventArgs e)
{
DicInfo d = this.currentDict;
int reqItemIndex = 0; // 取得する辞書項目の開始インデックス
int reqItemTitleCount = 10; // 取得する辞書項目の数
int reqItemContentCount = 10; // 内容も同時に取得する辞書項目の数
int itemCountTotal; // 見つかった辞書項目数(出力)
int itemCountInList; // 実際に取得した辞書項目数(出力)
string errorMessage; // エラーメッセージ
ScopeOption scopeOption = ScopeOption.HEADWORD;
switch (this.cbScope.SelectedIndex)
{
case 0:
scopeOption = ScopeOption.HEADWORD;
break;
case 1:
scopeOption = ScopeOption.KEYWORD;
break;
case 2:
scopeOption = ScopeOption.ANYWHERE;
break;
}
Cursor cursor = this.Cursor;
this.Cursor = Cursors.WaitCursor; // Wait Cursor にする。
bool success = netDicV06.SearchDicItem(
d.DicID, // 辞書ID
this.tbSearchText.Text, // 検索語
scopeOption, // 見出し語検索(HEADWORD)/索引語検索(KEYWORD)/全文検索(ANYWHERE)
MatchOption.CONTAIN, // 完全一致(EXACT)/部分一致(CONTAIN)/前方一致(STARTWITH)/後方検索(ENDWITH)
FormatOption.HTML, // HTML形式(V06はこれのみ)
ResourceOption.URI, // バイナリデータの取得方式指定 ハイパーリンク(URI)で指定(V06はこれのみ)
CharsetOption.UNICODE, // 使用文字セット指定
reqItemIndex, // 取得する辞書項目の開始インデックス
reqItemTitleCount, // 取得する辞書項目の数
reqItemContentCount, // 内容も同時に取得する辞書項目の数
out itemCountTotal, // 見つかった辞書項目数(出力)
out itemCountInList, // 実際に取得した辞書項目数(出力)
out itemList, // 辞書項目の配列(出力)
out errorMessage // エラーメッセージ(出力)
);
if (success)
this.statusBarPanel1.Text = itemCountTotal.ToString() + "件みつかりました。最大10件まで表示します。";
else
this.statusBarPanel1.Text = errorMessage;
this.Cursor = cursor; // Cursor を元に戻す。
this.listBox1.Items.Clear();
foreach(DicItem dicItem in itemList)
{
this.listBox1.Items.Add(dicItem.Title);
}
}
// 辞書が変更になった。
private void OnDictionaryChanged(object sender, System.EventArgs e)
{
this.currentDict = this.dicInfoList[this.cbDicInfo.SelectedIndex];
object flags = null;
object targetFrameName = null;
object postData = null;
object headers = null;
this.axWebBrowser1.Navigate(this.currentDict.LogoURL, ref flags, ref targetFrameName, ref postData, ref headers);
}
// 以下のコードは、C# メイリングリスト CS:02128 を参考にしてください。
// 皆さんよく知ってますね!
// ちょっとトリッキーだけど、一時ファイルに落とさないだけまし。
//
// Body.InnerXml で、単語の意味が HTML の body 部分が返される。
// その文字列を AxSHDocVw.AxWebBrowser で、HTML 表示する。
// このとき、HTML ストリングを一時ファイルに落とさず、メモリ上で処理する。
//
// mshtml.IHTMLDocument2 は参照の追加が必要です。
// tlbiml を使う必要はなく、
// 参照の追加より、C:\WINDOWS\system32\mshtml.tlb を追加すればOK。
private mshtml.IHTMLDocument2 document;
private string htmlString;
// 検索結果のリストをセレクトしたので、詳細を表示する。
private void OnSelectedIndexChanged(object sender, System.EventArgs e)
{
htmlString = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">" +
"<HTML><HEAD>" +
"<META http-equiv=\"Content-Type\" content=\"text/html; charset=Shift_JIS\">" +
"</HEAD><BODY>" +
this.itemList[this.listBox1.SelectedIndex].Body.InnerXml +
"</BODY></HTML>";
object o = null;
this.axWebBrowser2.Navigate("about:blank", ref o,ref o, ref o, ref o);
// Navigate ("about:blank"...) を呼び出し、OnDocumentComplete イベントを発生させる。
// OnDocumentComplete イベント中で、htmlString を IHTMLDocument2 インターフェースの
// Document プロパティにライトすることにより、HTML ドキュメントを書き換えてしまう。
}
private void OnDocumentComplete(object sender, AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEvent e)
{
document = (mshtml.IHTMLDocument2)this.axWebBrowser2.Document;
document.write(htmlString);
}
}
}
|