|
> 今確認した限りはまだ31日のままです。
ソースコードを見直しまして、1つ、31日のままになる原因を見つけました。
フォルダごとの設定を開いて、そこでOKを押すと、その瞬間に自動削除のチェ
ックが行われます。なので、そうするとまた「次回のチェック予定」は31日後
に設定されなおします。
なので、毎日「まだかなまだかな?」とフォルダプロパティを開いてはOKと操
作したら、ずっと31日のままです。
ただし、その場合でも、ダイアログボックスをOKした瞬間に自動削除のチェッ
クが働くはずでして、それで実用上は差し支えないはずではあります。
> この数値がカウントダウンされるタイミングはいつでしょうか?
カウントダウンという処理はありません。
自動削除のチェックがされた時刻が、フォルダプロパティ中に8バイトで記録
されます。フォルダを選択したり、フォルダプロパティをOKしたりすると、その
瞬間の時刻と、フォルダプロパティ中の「前回のチェック時刻」に31*24時間足
した時刻を比較して、その差が>0かどうかで判断しているようです。言葉で説明
するのが面倒なので、最後にフォルダプロパティのダイアログボックスプロシジ
ャを書いておきます。
------------
ソースコードを見ていてさらに1つ気づきました。フォルダを選択しても、そ
の瞬間に自動削除のチェックが動く訳じゃなくて、実際にはその0.3秒後です。
なので、フォルダをマウスでクリックして素早く(0.3秒以内に)ほかのフォル
ダを選択したら、たぶん自動削除のチェックは効きません。
------------
int CALLBACK FolderPropDlgProc( HWND hwnd, UINT message, WPARAM wParam,
LPARAM lParam ) {
switch( message ) {
case WM_INITDIALOG:
SendDlgItemMessage2( hwnd, IDE_FOLDER_NAME, EM_LIMITTEXT, sizeof
(pFolderDlg->szNewFolderName) - 1 );
SetDlgItemText( hwnd, IDE_FOLDER_NAME, pFolderDlg->pchBaseName
);
if( !pFolderDlg->fRenameOK ) {
EnableDlgItem( hwnd, IDE_FOLDER_NAME, FALSE );
}
SendDlgItemMessage( hwnd, IDV_RETAIN_MONTH, UDM_SETRANGE, 0,
MAKELPARAM( 999, 1 ) );
if( pFolderDlg->data.autodel_nMonth != 0 ) {
CheckDlgButton( hwnd, IDB_LOG_AUTO_DELETE, TRUE );
SetDlgItemInt( hwnd, IDE_RETAIN_MONTH, pFolderDlg->data.
autodel_nMonth, FALSE );
CheckDlgButton( hwnd, IDB_AUTODEL_CONFIRM, ! pFolderDlg->
data.autodel_fDontConfirm );
} else {
SetDlgItemText( hwnd, IDE_RETAIN_MONTH, "12" );
CheckDlgButton( hwnd, IDB_AUTODEL_CONFIRM, TRUE );
}
{
char sz[128];
DWORDLONG ftLimit;
GetSystemTimeAsFileTime( (FILETIME*)&ftLimit );
ftLimit -= 32 * 24 * 60 * 60 * (DWORDLONG)10000000;
ftLimit = pFolderDlg->data.autodel_ftLast - ftLimit;
int cDay = (int)(ftLimit / ((DWORDLONG)24 * 60 * 60 *
(DWORDLONG)10000000));
if( (DWORD)cDay > 31 ) {
cDay = 31;
}
wsprintf( sz, "(削除確認の予定日 = あと%u日)", cDay );
SetDlgItemText( hwnd, IDT_AUTODEL_WILL, sz );
}
SendMessage2( hwnd, WM_COMMAND, IDB_LOG_AUTO_DELETE );
{
HWND hwndMemo = GetDlgItem( hwnd, IDE_MEMO );
SubclassNonSelectEdit( hwndMemo );
SetWindowText( hwndMemo, pFolderDlg->signs.strMemo.Direct()
);
SendMessage2( hwndMemo, WM_SETFONT, (WPARAM)hfontFixed );
}
break;
//return TRUE;
case WM_COMMAND:
if( LOWORD(wParam) == IDOK ) {
pFolderDlg->signs.strMemo.GetDlgItemText( hwnd, IDE_MEMO );
BOOL fTemp;
if( IsDlgButtonChecked( hwnd, IDB_LOG_AUTO_DELETE ) ) {
int nMonth = GetDlgItemInt( hwnd, IDE_RETAIN_MONTH, &
fTemp, FALSE );
if( nMonth < 1 ) {
nMonth = 1;
} else if( nMonth > 999 ) {
nMonth = 999;
}
pFolderDlg->data.autodel_nMonth = nMonth;
GetSystemTimeAsFileTime( (FILETIME*)&pFolderDlg->data.
autodel_ftLast );
CListWnd* pwnd = title.GetListWnd( &pFolderDlg->folpa,
FALSE );
if( pwnd != NULL ) {
pwnd->listcache.fWantCheckAutoDel = TRUE;
pwnd->listcache.fSelectionChanged = TRUE;
SetTimer( hwndTitleDlg, IDTIMER_CHECKAUTODELETE, 300,
NULL );
}
} else {
pFolderDlg->data.autodel_nMonth = 0;
}
pFolderDlg->data.autodel_fDontConfirm = ! IsDlgButtonChecked
( hwnd, IDB_AUTODEL_CONFIRM );
if( pFolderDlg->fRenameOK ) {
GetDlgItemText( hwnd, IDE_FOLDER_NAME, pFolderDlg->
szNewFolderName, sizeof(pFolderDlg->szNewFolderName) );
StripTrailSpace( pFolderDlg->szNewFolderName );
if( pFolderDlg->szNewFolderName[0] == '\0' ) {
ErrorMessage( IDS_E_LACK_FILENAME );
SetFocus( GetDlgItem( hwnd, IDE_FOLDER_NAME ) );
fCancelOK = TRUE;
break;
}
char szErrorOut[80];
if( !IsValidFileName( pFolderDlg->szNewFolderName,
szErrorOut ) ) {
char szMessage[256];
strcpy( szMessage, GetStrRes( IDS_E_FILENAME_INVALID
) );
strcat( szMessage, szErrorOut );
ErrorMessage( szMessage );
SetFocus( GetDlgItem( hwnd, IDE_FOLDER_NAME ) );
fCancelOK = TRUE;
break;
}
}
if( config.folpa.szSubFolder[0] != '\0' ) {
if( strcmp( pFolderDlg->pchBaseName, pFolderDlg->
szNewFolderName ) != 0 ) {
if( ! CheckTransmitting( 0 ) ) {
fCancelOK = TRUE;
break;
}
if( folder.IsLongFolderName( pFolderDlg->
szNewFolderName ) ) {
ErrorMessage( IDS_E_FOLDERNAME_TOOLONG );
SetFocus( GetDlgItem( hwnd, IDE_FOLDER_NAME ) );
fCancelOK = TRUE;
break;
}
title.SaveAll();
CAddedFolder::SaveAll();
CFolderProp::SaveAll();
char szNewPath[MAX_PATH];
strcpy( szNewPath, pFolderDlg->szPath );
strcpy( szNewPath + strlen(szNewPath) - strlen
(pFolderDlg->pchBaseName), pFolderDlg->szNewFolderName );
if( !MoveFile( pFolderDlg->szPath, szNewPath ) ) {
int nError = GetLastError();
char szError[256];
wsprintf( szError, GetStrRes(
IDS_E_FOLDER_RENAME ), nError );
ErrorMessage( szError );
SetFocus( GetDlgItem( hwnd, IDE_FOLDER_NAME ) );
fCancelOK = TRUE;
break;
}
folder.NotifyFolderNameChanged( pFolderDlg->
szNewFolderName );
strcpy( pFolderDlg->pchBaseName, pFolderDlg->
szNewFolderName );
strcpy( pFolderDlg->szPath, szNewPath );
char szNewSubFolder[MAX_SUBFOLDER_LENGTH];
{
char szBasePath[MAX_PATH];
FOLPA folpaBase;
folpaBase.Init( pFolderDlg->folpa.szUser,
pFolderDlg->folpa.iFolder ).MakeFullPath( szBasePath );
strcpy( szNewSubFolder, szNewPath + strlen
(szBasePath) + 1 );
}
CFolderProp* pProp = CFolderProp::GetFolderProp(
&pFolderDlg->folpa );
strcpy( pProp->folpa.szSubFolder, szNewSubFolder );
strcpy( pFolderDlg->folpa.szSubFolder,
szNewSubFolder );
}
}
} else if( LOWORD(wParam) == IDB_LOG_AUTO_DELETE ) {
BOOL fEnable = IsDlgButtonChecked( hwnd,
IDB_LOG_AUTO_DELETE );
EnableDlgItem( hwnd, IDE_RETAIN_MONTH, fEnable );
EnableDlgItem( hwnd, IDT_RETAIN_MONTH, fEnable );
EnableDlgItem( hwnd, IDB_AUTODEL_CONFIRM, fEnable );
ShowWindow( GetDlgItem( hwnd, IDT_AUTODEL_WILL ), fEnable ?
SW_SHOW : SW_HIDE );
} else if( LOWORD(wParam) == IDB_AUTODEL_CONFIRM ) {
if( ! IsDlgButtonChecked( hwnd, IDB_AUTODEL_CONFIRM ) ) {
if( MessageBox2( hwnd, IDS_QUERY_AUTODEL_CONFIRM_OFF
, szTuruKameTitle, MB_ICONQUESTION | MB_YESNO |
MB_DEFBUTTON2 ) != IDYES ) {
CheckDlgButton( hwnd, IDB_AUTODEL_CONFIRM, TRUE );
}
}
} else if( LOWORD(wParam) == IDB_HELP ) {
HelpSub( IDH_FOLDER_PROP );
}
break;
}
return 0;
}
struct FOLDERPROPDATA {
WORD division; // V2.03からdivisionが4バイ
トから2バイトになった。
WORD version; // V2.03から1。
DWORD cbSizeLimit; // 1ファイルの最大サイズ
char szPrefix[80]; // ファイル名の前に付ける文
字列
char szExt[20]; // ファイルの拡張子
BYTE fOverrideAccount; // アカウント設定の上書き、
2の場合は上位階層の設定に従う
BYTE fOverrideTemplate; // 定型文字列設定の上書き、
2の場合は上位階層の設定に従う
BYTE fReplySignature; // 返信メールにも署名を入れ
る
BYTE fForwardSignature; // 転送メールにも署名を入れ
る
char szName[80]; // 上書き用
char szEmail[80]; // 上書き用
char szReply[80]; // 上書き用
char szTo[80]; // 新規メール時のTo:の初期値
char szMacro_NewMail[80]; // 使わない
char szMacro_Reply[80]; // 使わない
char szMacro_Forward[80]; // 使わない
BYTE fBccAlways; // 自分のメールアドレスを
Bcc:ヘッダに入れる
BYTE abReserved[3]; // 境界合わせ用。
char szOrganization[80]; // V0.84 所属
int autodel_nMonth; // nヶ月以上前の古いデータを
自動削除する V1.50〜
BOOL autodel_fDontConfirm; // 削除する時に警告メッセー
ジを表示しない
DWORDLONG autodel_ftLast; // 最後に削除または警告を出
した日付
char szBookGroup[128]; // アドレス帳を出した時に選
択するグループ
int nLastFileNumber; // V1.59
int nLastFileNumberDate; // V1.59
char szBccEmail[80]; // V1.59 fBccAlways時のメー
ルアドレス、ここが存在しなかった場合はszEmailを入れる。
};
|
|