電話メモ

ちまちま作ってましたがさらすことにしました。463行。相変わらず長いです。

//電話メモ
/*
TODO
・送信前に各種入力チェックをする
・ログイン名からメアドが取得できなかった場合の処理を考える。

・CCや複数宛先が出来るように?

9/10
・客名入力すると宛先(営業名)が自動で出るように。(さんきゅうS氏)
 たいてい営業名より客名を先に言ってくれるよね。時々名乗らずにいきなり営業いますか?って聞く人もいるけど。

9/9
・過去のメールを検索できるようになりました。

8/1
・[仕様変更]SQLITEを使用。
・ログイン名からメアドが取得できなかった場合、終了するように変更。(test=1の時はコレ働かないよ)

7/24
・送信前に内容をファイルに保存。
・タスクトレイに入れるようにした。
 →実行ファイルにしたときはタスクトレイに入らないみたい…
  →むしろ「最小化時」または「非アクティブ時」に「タスクトレイ入れる」がだめっぽい。
・enterで入力移動
・編集メニューを作成。
・リセットメニューを作成。
・本文強制更新メニューを作成。
・各種部品の長さを再調整した。
・送信前にメアドのチェックを入れた。
・ログイン名からメアドが取得できなかった場合送信ボタンの有効をオフに。

7/23
・電話番号入力BOXを作った
・宛先を並べなおした。携帯アドレス→部署順
・母艦のスタイルを変更。
・宛先がPCか携帯かで内容を変更。
・メモの内容が編集されていたら内容更新を行わないようにした。コレは…なくてもいいかなぁ。

7/22
とりあえずつくってみた。

 */
●母艦設計
 母艦について
  タイトルは「電話メモ」
  高さは480+170	//高さ・幅も先に設定しないと部品が置けなかったり表示さされなかったりするよ。
  幅は450//+200
  可視は0

//!変数宣言が必要

#-----------------------------------------------------------------------
////////////////////		変数の設定		////////////////////
#-----------------------------------------------------------------------
testとは変数=0

//ファイル関連変数
データファイルとは変数=母艦パス&「D2.db」
//同時書き込み確認
確認ファイルとは変数=母艦パス&「cfm.txt」

//以下は移行用ファイル
//共通
アドレスファイルとは変数=母艦パス&「アドレス.csv」
//電話メモ
内容表ファイルとは変数=母艦パス&「内容表.csv」

//ヘッダは多分忘れるので変数に入れておく
adress_headとは配列
"ID,name,adress,kana,shineid,busho,shurui,fullname"を","で区切ってadress_headに代入。
mail_headとは配列
"ID,name,sent_name,username,telno,title,content"を","で区切ってmail_headに代入。

//ログイン名
ログイン名とは変数
ログインメアドとは変数

//こまごまとした変数
SQL文とは変数
ハンドルとは変数
内容1とは配列//タイミングの指定
内容2とは配列//内容の指定
一時配列とは配列
WHERE文とは変数

内容1は「戻り次第
昼過ぎに
明日
時ごろ
月曜日
休み明けに
を注文したいので
FAXを送りました。確認次第」
内容2は「折返しお電話ください。
再びお電話します。
メールを送りますのでご覧ください。
FAXを送りましたので御確認ください。」

#-----------------------------------------------------------------------
////////////////////		外部ファイルの確認		////////////////////
#-----------------------------------------------------------------------
データファイルが存在するか
もしそれ=0なら
 データファイルをSQLITE開いてハンドルに代入//これでファイル作ってくれちゃうらしい。私的に衝撃的な仕様です。
 //アドレステーブルの作成
 ハンドルの"adress_table"を"ID,name,adress,kana,shineid,busho,shurui,fullname"でSQLITEテーブル作成
 //メール内容テーブルの作成
 ハンドルの"mail_content"を"ID,name,sent_name,telno,title,content,day,time"でSQLITEテーブル作成
 
 //アドレス帳を取込む
 //csvから取り込むときはやっぱり反復しなくちゃだめみたい。
 アドレスファイルが存在
 もしそれ=1なら
  アドレスファイルを開いてCSV取得
  反復
   もし回数=1なら続ける	//タイトルはデータに入れない。
   //「adress_table」にそれをSQLITEデータ挿入	よくわからなかったのでSQLITE実行を使うことにした
   SQL文は「INSERT INTO adress_table ( name,adress,kana,shineid,busho,shurui,fullname ) VALUES ( "{それ\1}","{それ\2}","{それ\3}","{それ\4}","{それ\5}","{それ\6}","{それ\7}" )」
   ハンドルでSQL文をSQLITE実行
 
 //内容表を取り込む
 内容表ファイルが存在
 もしそれ=1なら
  内容表ファイルを開いてCSV取得
  反復
   もし回数=1なら続ける	//タイトルはデータに入れない。
   SQL文は「INSERT INTO mail_content ( name,sent_name,telno,title,content ) VALUES ( "{それ\1}","{それ\2}","{それ\3}","{それ\4}","{それ\5}" )」
   ハンドルでSQL文をSQLITE実行
違えば
 データファイルをSQLITE開いてハンドルに代入//どっちにしてもSQLITE開くんだけどねww

#-----------------------------------------------------------------------
//ログイン名の取得
#-----------------------------------------------------------------------
ハンドルの「adress_table」で「shineid」からユーザー名取得をSQLITE検索

//見つからなかった場合の処理を考える。
もしそれ=""かつtest<>1なら
 //仮処理
 「ユーザー名が登録されていません。」と言ってSQLITE閉じて終わり

ログイン名はそれ\1\7
ログインメアドはそれ\1\2


#-----------------------------------------------------------------------
////////////////////		GUIの作成		////////////////////
#-----------------------------------------------------------------------
営業名ラベルとはラベル
 その位置は「10,10」
営業名コンボとはコンボ
 その位置は「100,7」
 その編集は0
 その変更した時は
  もし営業名コンボのテキスト=""なら宛先エディタは""
  違えば
   //アドレス帳の1から営業名コンボのテキストを表完全一致ピックアップ
   ハンドルの「adress_table」で"name"から営業名コンボのテキストをSQLITE検索
   宛先エディタはそれ\1\2
   本文更新
 //メアドが入っている行だけピックアップ。
 ハンドルの「adress_table」で"adress"から"@"をSQLITE曖昧検索//本当は空行以外をピックアップしたかったんだけどやり方わかんないなぁ。
 それ\0=""
 それの5を表ソート		//部署でソート
 //それの6を表ソート		//携帯を先に持ってくる
 それの1を表列取得
 営業名コンボのアイテムはそれ
 その値は0
 その幅は200
 そのキー押した時は
  もし営業名コンボの押された仮想キー=13なら
   母艦に"	"をキー送信

客名ラベルとはラベル
 その位置は「10,40」
客名エディタとはエディタ
 その位置は「100,37」
 そのIMEは「IMEオン」
 その幅は200
 その変更した時は
  タイトルエディタは「[TEL] {客名エディタ}様」
  客名エディタのポケットは1//本文更新用フラグ
 そのキー押した時は
  もし客名エディタの押された仮想キー=13なら
   母艦に"	"をキー送信
   //客名入力すると宛先(営業名)が自動で出す
   もし営業名コンボのテキスト=""なら
    //過去に送ったことがある客先か
    ハンドルの「mail_content」で「title」から客名エディタをSQLITE曖昧検索
    2を表重複削除して一時配列に代入する
    もし表行数=2なら
     (営業名コンボのアイテム)の0で一時配列\1\2を0から表検索
     営業名コンボの値はそれ
内容ラベルとはラベル
 その位置は「10,70」
内容コンボとはコンボ
 その位置は「100,67」
 そのアイテムは内容1
 そのIMEは「IMEオフ」
 その幅は325
 そのキー押した時は
  もし内容コンボの押された仮想キー=13なら
   母艦に"	"をキー送信
内容2コンボとはコンボ
 その位置は「100,97」
 そのアイテムは内容2
 そのIMEは「IMEオン」
 その幅は325
 そのキー押した時は
  もし内容2コンボの押された仮想キー=13なら
   母艦に"	"をキー送信
折返しTEL№ラベルとはラベル
 その位置は「10,130」
折返しTEL№エディタとはエディタ
 その位置は「100,127」
 そのIMEは「IMEオフ」
 その幅は325
 そのキー押した時は
  もし折返しTEL№エディタの押された仮想キー=13なら
   母艦に"	"をキー送信

宛先ラベルとはラベル
 その位置は「10,160」
宛先エディタとはエディタ
 その位置は「100,157」
 その幅は325
 そのキー押した時は
  もし宛先エディタの押された仮想キー=13なら
   母艦に"	"をキー送信
タイトルラベルとはラベル
 その位置は「10,190」
タイトルエディタとはエディタ
 その位置は「100,187」
 そのIMEは「IMEオン」
 その幅は325
 そのキー押した時は
  もしタイトルエディタの押された仮想キー=13なら
   母艦に"	"をキー送信

内容メモとはメモ
 その位置は「10,220」
 そのIMEは「IMEオン」
 その幅は420
 その高さは200
 そのスクロールバーは「縦」
 その変更した時は
  内容メモのポケットは(内容メモのポケット)-1

送信ボタンとはボタン
 その位置は「350,5」
 そのクリック時は
  送信イベント


//検索・ログ表示部分	これ本当は左側におきたかったんだよなぁ…でもめんどい。
10,430へ移動
検索ラベルとはラベル
//その位置は「10,430」
検索コンボとはコンボ
これについて
 位置は検索ラベルの右側
 Y=Y-3
 アイテムは「すべて{~}営業名{~}タイトル{~}本文」
 値は0
 編集は0
 キー押した時は
  もし検索コンボの押された仮想キー=13なら
   母艦に"	"をキー送信
検索エディタとはエディタ
これについて
 位置は検索コンボの右側
 IMEは「IMEオン」
 キー押した時は
  もし検索エディタの押された仮想キー=13なら
   母艦に"	"をキー送信
検索ボタンとはボタン
これについて
 位置は検索エディタの右側
 YはY-3
 幅は60
 クリックした時は
  検索イベント
検索結果グリッドとはグリッド
これについて
 位置は検索ラベルの下側
 幅は420
 高さは135
 Y=Y+3
 自動ソート=1
 クリックした時は
  内容表示

履歴表示

//ログインメアドが得られなかったら送信できなくする。
もしログインメアド=""なら送信ボタンの有効は0

#-----------------------------------------------------------------------
//////////////////////		めにゅー		//////////////////////
#-----------------------------------------------------------------------
『#親部品名,部品名,テキスト,ショートカット,オプション,イベント
なし,ファイルメニュー,ファイル(&F),,,
#-,開くメニュー,開く(&O),Ctrl+O,,
-,送信メニュー,送信(&E),Ctrl+Enter,,送信イベント
-,-,,,,
-,閉じるメニュー,閉じる(&C),Alt+F4,,終わる
,編集メニュー,編集(&E),,,
-,本文更新メニュー,本文更新(&R),F5,,本文更新
-,本文強制更新メニュー,本文強制更新,Ctrl+L,,強制更新
-,-,,,,
-,リセットメニュー,リセット(&E),Ctrl+R,,リセット処理
,検索メニュー,検索(&S),,,検索処理
,ヘルプメニュー,ヘルプ(&H),,,
』をメニュー一括作成。


#-----------------------------------------------------------------------
/////////////////////		母艦の設定		////////////////////////////
#-----------------------------------------------------------------------

母艦について
 スタイルは「枠固定」
 背景色は$ddFfFF
 最大化ボタン有効変更(0)
 タスクトレイ入れる
 タスクトレイクリックした時は
  タスクトレイ出して母艦を窓アクティブして母艦に注目
 タスクトレイ右クリックした時は〜終了
 最小化時は
  タスクトレイ入れる  //これうまくいかないんだよねぇ…
 可視は1


#-----------------------------------------------------------------------
/////////////////////		検索関連処理		////////////////////////
#-----------------------------------------------------------------------

●検索処理
 検索エディタに注目

●検索イベント
 もし検索エディタ=""なら
  履歴表示
 違えば
  検索コンボの値で条件分岐
   0なら
    WHERE文は「WHERE sent_name like "%{検索エディタ}%" or title like "%{検索エディタ}%" or content like "%{検索エディタ}%"」
   1なら
    WHERE文は「WHERE sent_name like "%{検索エディタ}%"」
   2なら
    WHERE文は「WHERE title like "%{検索エディタ}%"」
   3なら
    WHERE文は「WHERE content like "%{検索エディタ}%"」
  SQL文は「SELECT ID,sent_name,title,day,time FROM mail_content 」&WHERE文
  
  ハンドルでSQL文をSQLITE実行
  検索結果グリッドのアイテムはそれ

●履歴表示
 "mail_content"から"ID"でSQLITEデータ取得
 
 //必要項目取り出し
 5を表列削除
 3を表列削除
 1を表列削除
 
 検索結果グリッドのアイテムはそれ

●内容表示
 もし(内容メモのポケット="")なら
  一時配列=検索結果グリッドのアイテム
  //ハンドルの「mail_content」で「ID」から(一時配列\(検索結果グリッドの行)\0)をSQLITE検索
  SQL文は「select content from mail_content where ID like "{一時配列\(検索結果グリッドの行)\0}"」
  ハンドルでSQL文をSQLITE実行
  内容メモはそれ\1
  内容メモのポケットは""

#-----------------------------------------------------------------------
////////////////////		送信・本文表示		///////////////////
#-----------------------------------------------------------------------

●本文更新
 //内容を編集してあった場合、本文更新は行わない。
 もし内容メモのポケット<0なら待機
 
 //判断フラグ用
 内容メモのポケットは1
 
 //携帯とPCで動作をわける
 //アドレス帳の1から営業名コンボのテキストを表完全一致ピックアップ
 ハンドルの"adress_table"で"name"から営業名コンボのテキストをSQLITE検索
 もしそれ\1\6="k"なら
  ログイン名を「 」で区切る
  内容メモは「{客名エディタ}様よりお電話がありました。
{内容コンボ}{内容2コンボ} {折返TEL№エディタ}
とのことです。よろしくお願いします。{それ\0}」
 違えば
  もし全角変換(LEFT(営業名コンボのテキスト,1))="("なら
   営業名は営業名コンボ
  違えば
   営業名は営業名コンボ&「さん」
  
  内容メモは営業名&改行&改行&「お疲れ様です。{~}{~}{客名エディタ}様よりお電話がありました。{~}
{内容コンボ}{内容2コンボ}{~} {折返TEL№エディタ}{~}
とのことです。{~}{~}よろしくお願いします。{~}
////////////////////////////////
  {ログイン名}
  {ログインメアド}
////////////////////////////////
」

●強制更新
 内容メモのポケットは「」
 本文更新

●送信イベント
 //各種入力チェック
 もし宛先エディタ=""または何文字目(宛先エディタ,"@")=0なら待機//空欄またはメアドに@が含まれていないと待機
 
 //複数起動で使った場合用の処理
 もし存在(確認ファイル)=1なら0.1秒待つ
 確認ファイルに「」を保存。
 
 //送信前にデータベースに送ったメールを登録する。
 //行番号,入力者,営業名,客名,TEL№,タイトル,内容,日付,時間
 //IDを指定しないと勝手に最終に追加される。
 
 SQL文は「INSERT INTO mail_content ( name,sent_name,telno,title,content,day,time ) 」&
 「VALUES ( "{ログイン名}","{営業名コンボ}","{折返TEL№エディタ}","{タイトルエディタ}","{内容メモ}","{今日}","{今}" )」
 ハンドルでSQL文をSQLITE実行
 
 
 確認ファイルをファイル削除
 
 # サーバーの設定
 
# メールの内容について
 メール差出人はログインメアド
 メール宛先は宛先エディタ
 メール件名はタイトルエディタ
 メール本文は内容メモ
 
# 実際の送信処理
 もしtest=1なら「テストなので{~}メール送信したふり。」と言う
 違えばメール送信。
 
 リセット処理
 
 タイトルエディタは『送信完了』
 1秒待つ
 タイトルエディタは""

●リセット処理
 宛先エディタは""
 営業名コンボの値は0
 客名エディタは""
 内容コンボのテキストは""
 内容2コンボのテキストは""
 折返TEL№エディタは""
 内容メモは""
 内容メモのポケットは0
 タイトルエディタは""