private void Form1_Load(object sender, EventArgs e)
{
// スプラッシュ・スクリーンの表示開始
SplashScreen splash = new SplashScreen();
splash.ProgressMsg = "メールクライアントの初期化中です";
if (File.Exists(@"akanemail.png")) {
try {
splash.BackgroundImage = Image.FromFile(@"akanemail.png");
}
catch {
// 読み込めないときは通常画像を表示するため処理なし
}
}
splash.Show();
splash.Refresh();
// 最大化の時スプラッシュスクリーンよりも先にフォームが出ることがあるので
// それを防ぐために一時的にフォームを非表示にする。
this.Hide();
// 環境設定の読み込み
LoadSettings();
try {
// WinSockの初期化処理
nMail.Winsock.Initialize();
}
catch (Exception exp) {
// 64bit版OSで同梱の32bit版OS用のnMail.dllを使用して起動したときはエラーになるため差し替えのお願いメッセージを表示する
if (exp.Message.Contains("間違ったフォーマットのプログラムを読み込もうとしました。")) {
MessageBox.Show("64bit版OSで32bit版OS用のnMail.dllを使用して実行した場合\nこのエラーが表示されます。\n\nお手数をお掛け致しますが同梱のnMail.dllをnMail.dll.32、nMail.dll.64をnMail.dllに名前を変更してAkane Mailを起動\nしてください。", "Akane Mail", MessageBoxButtons.OK, MessageBoxIcon.Error);
// 致命的なnMail.dllのエラーフラグをOn
nMailError = true;
Application.Exit();
return;
}
}
// nMailのHTML添付ファイルの展開オプションをONにする
Options.EnableSaveHtmlFile();
// ファイル展開用のテンポラリフォルダの作成
if (!Directory.Exists(Application.StartupPath + @"\tmp")) {
Directory.CreateDirectory(Application.StartupPath + @"\tmp");
}
// Threadオブジェクトを作成する
var t = new System.Threading.Thread(new System.Threading.ThreadStart(MailDataLoad));
splash.ProgressMsg = "メールデータの読み込み作業中です";
// スレッドを開始する
t.Start();
// スレッドが終了するまで待機
t.Join();
// メール自動受信が設定されている場合はタイマーを起動する
if (AccountInfo.autoMailFlag) {
// 取得間隔*60000(60000ミリ秒=1分)をタイマー実行間隔に設定する
timer2.Interval = AccountInfo.getMailInterval * 60000;
timer2.Enabled = true;
}
// ツリービューとリストビューの表示を更新する
UpdateTreeView();
UpdateListView();
// ListViewItemComparerの作成と設定
// 受信or送信日時の降順で並べる
listViewItemSorter = new ListViewItemComparer() { Column = 2, Order = SortOrder.Descending };
listViewItemSorter.ColumnModes = new ListViewItemComparer.ComparerMode[] { ListViewItemComparer.ComparerMode.String, ListViewItemComparer.ComparerMode.String, ListViewItemComparer.ComparerMode.DateTime, ListViewItemComparer.ComparerMode.Integer };
// ListViewItemSorterを指定する
listView1.ListViewItemSorter = listViewItemSorter;
// スプラッシュ・スクリーンの表示終了
splash.Close();
if (!splash.IsDisposed)
splash.Dispose();
// 一時的に非表示にした画面を表示させる
if (!(AccountInfo.minimizeTaskTray && WindowState == FormWindowState.Minimized)) {
ShowInTaskbar = true;
this.Show();
}
// ツリービューを展開する
treeView1.ExpandAll();
// メインとなるフォームをアクティブに戻す
this.Activate();
}