2002年12月のエントリ

ウェザタイ1.7とかランキングJSP化とか進めたいんだけど,本職(?)と,何故か購入したFlashMXが忙しくて全然更新してなかったりして。


タイピング関連のスレッドを見てて,ウェザタイ作者が書き込んでる? みたいなのがあった。一応私が書き込むとしたらここに書いた報告してると思うので。ま,どうでもいいですけど。

ロビーサーバを再起動しました。その場にいらっしゃった方,ご協力ありがとうございます。

でしばらくロビーにいたのだが,どうもWin98系で開発版を実行するとファイルダイアログ(参照ボタンを押したときのファイルを選ぶダイアログ)が出ないという報告を頂いた。

この辺は全くいじっていないので,コンパイラをVS.NETに変えたことが原因であることは明白。なのでとりあえずGoogleで検索してみるとずばり解決方法が載っている。詳しくは省くが,どうやらCFileDialogのコンストラクタの引数が増えていて,最後の引数をOSによって変えてやらなければならないらしい。この辺はMFCのソース(dlgfile.cpp)を参照。

早速修正したものを開発版にアップしておいた。しかしコンパイルし直しただけでこんなところが動かなくなると困ってしまう。


掲示板でのバグ報告。

時々Qwertyの時と同じ計算方法になっているようです。

こっちも.NETに変えたときに入り込んだバグだった。まあこっちは私がミスしただけなんだけど。

簡単にいうと,.NETはdoubleからintへの変換に警告を出してくれるようになったのだが,それを全部一気に直したときに,変なところでintにキャストしてしまったので入力形式の重みが全て1倍になってしまっていた。これも修正して開発版にアップしてある。


更新内容もかなりたまってきたしそろそろVer1.7にしようかな。

ロビー,スクロールバーが最下部になければスクロールしない機能がようやく実装完了。MFCを使用している場合,下のようなコードで OK と思われる。

// 元々選択されていた部分を保存
long org_start, org_end;
richEdit.GetSel(org_start, org_end);

// スタイルを変更するかどうか
bool modifyStyle = false;

// 変更前のスタイル
LONG style = ::GetWindowLong(richEdit.GetSafeHwnd(), GWL_STYLE);

// スクロールバーが存在
if((style & WS_VSCROLL) != 0)
{
    // スクロール情報を取得
    SCROLLINFO scrollInfo;
    if(richEdit.GetScrollInfo(SB_VERT, &scrollInfo))
    {
        // 選択されているか,最終行でなければスタイルを変更する
        if((org_start != org_end)
            || (scrollInfo.nPos < (scrollInfo.nMax - static_cast<int>(scrollInfo.nPage))))
        {
            modifyStyle = true;
        }
    }
}

if(modifyStyle)
{
    // ECO_AUTOVSCROLL スタイルを解除する
    richEdit.SetOptions(ECOOP_XOR, ECO_AUTOVSCROLL);
}

// カーソルを最後に持っていく
richEdit.SetSel(0x7ffffffe,0x7fffffff);

// 追加部分の開始位置を保存
long start_start, start_end;
richEdit.GetSel(start_start, start_end);

// メッセージを追加
richEdit.ReplaceSel(message);

// 追加部分の終了位置を保存
long end_start, end_end;
richEdit.GetSel(end_start, end_end);

// RichEdit 用フォントフォーマットを作成
CHARFORMAT2 format;
format.cbSize = sizeof(CHARFORMAT);
format.dwMask = CFM_COLOR | CFM_SIZE | CFM_FACE | CFM_BOLD | CFM_ITALIC;
format.yHeight = font_size;
format.dwEffects = (font_bold ? CFE_BOLD : 0) | (font_italic ? CFE_ITALIC : 0);
strcpy(format.szFaceName, font_name.c_str());
format.crTextColor = font_color;

// 追加文字を選択
richEdit.SetSel(start_start, end_start);

// フォントを設定
richEdit.SetSelectionCharFormat(format);

// 選択部分を元に戻す
if(org_start == org_end)
{
    // 選択範囲がなければカレットを最後に置く
    org_start = 0x7ffffffe;
    org_end = 0x7fffffff;
}
richEdit.SetSel(org_start, org_end);

if(modifyStyle)
{
    // ECO_AUTOVSCROLL スタイルを元に戻す
    richEdit.SetOptions(ECOOP_OR, ECO_AUTOVSCROLL);
}

というところでロビークライアントをアップ。変更点は,

  • 発言エディットボックスの自動水平スクロールを外し,俗に言う右端で折り返すようにする
  • スクロールバーが一番下にない,もしくは選択がある場合は自動スクロールしないようにする
  • ロビーに入るときのメッセージを表示
  • 部屋入室メッセージを指定,表示できるようにする
  • 新しいロビークライアントがあった場合,メッセージが出るようにする
  • ゲームクライアントのバージョンを表示するようにする

ただし,上の2つ以外は明日辺りにロビーサーバを再起動した後有効になる。また,旧ロビークライアントでも接続出来るが,メッセージは表示されない。

RichEditのスクロールは今だにうまくいかない。Codeguru に VB 用のサンプルがあって,それでは EM_SCROLLCARET をハンドルしていたが,こんなメッセージこないし。


久々に,というか忘れていたのだが,アクセスグラフをアップ。11月に上がっているのはやっぱりグッジョブ効果でタイピングソフトを探す人が増えた影響なのか。

TOD大会はなかなか面白かった。すっごい(気候が)寒かったけど。

TOD。気付いたこと

  • パーフェクトゲージが99を超えても3桁になってカウントが続く。ちなみに一度100以上になると3桁のまま。
  • ローマ字自動認識の「でぃ」とか「とっつぁん」とかがデフォルトでXを用いたものになってて打ちにくい。どうせなら「ん」の処理を見直してもらいたかった気も
  • 特殊キーの評価が甘くなっていて,私でもオールAが取れるようになった

てなとこ。

denasu.toの回線増強計画が一応完了。パスワードが…で…だったり,何故か外部からつながらなくなったりと問題はあったが,今はなんとか動いてる模様。問題の速度はというと,どうなんだろう。来週のグッジョブで分かるかも。


TOD2003を購入。早くランキングが欲しい。

本日の昼間,ロビーサーバの回線増強を行います。その間ロビーにアクセスできなくなるのでご注意を。結局新機能とかは忙しくてできなかったけど。