« 2008年3月 | トップページ | 2008年6月 »

[BCB] 独自のマウスカーソルを使う

----------------
1.まずカーソルデータが含まれたリソースファイルを作成 (参考:独自のリソースを使う

mycursor.rc

MyCursor1 CURSOR "Cursor_1.cur"
MyCursor2 CURSOR "Cursor_2.cur"

このファイルをプロジェクトに追加する。

----------------
2.メインフォームのOnCreateでリソースからカーソルを読み込む

//カーソル定数
static const TCursor crMyCursor1=1;
static const TCursor crMyCursor2=2;

void __fastcall TForm1::FormCreate(TObject *Sender)
{
  Screen->Cursors[crMyCursor1] = LoadCursor(HInstance, "MyCursor1");
  Screen->Cursors[crMyCursor2] = LoadCursor(HInstance, "MyCursor2");
}

カーソル定数はデフォルトの定数(crDefaultなど)と重ならないように定義する。カーソル定数はTCursor型で-32768から32367までの整数であり、BDS2006では-22から0までがデフォルトの定数に使用されている。

注意:カーソルを使い終わってもDestroyCursorを呼び出してはいけない。勝手に開放される。

----------------
3.使いたいことろで、

Image1->Cursor=crMyCursor1;

のように使う。

----------------

[BCB] スクリーンセーバが起動しないようにする

WM_SYSCOMMAND の wParamがSC_SCREENSAVE のとき1を返せばスクリーンセーバの起動を抑制できるようです。

ヘッダ

private:
  void __fastcall WMSysCommand(TMessage &Msg);

  BEGIN_MESSAGE_MAP
    //捕まえたいメッセージと、それを処理する関数を登録
    VCL_MESSAGE_HANDLER(WM_SYSCOMMAND, TMessage, WMSysCommand)
  END_MESSAGE_MAP(TComponent)

ソース

//---------------------------------------------------------------------------
//スクリーンセーバの起動を抑制
void __fastcall TForm1::WMSysCommand(TMessage &Msg)
{
  if (Msg.WParam==SC_SCREENSAVE) {
    Msg.Result=1;
  } else {
    Msg.Result=DefWindowProc(Handle,Msg.Msg,Msg.WParam,Msg.LParam);
  }
}

[LaTeX] eqnarrayの途中で改ページされないようにする

\interdisplaylinepenalty=10000

« 2008年3月 | トップページ | 2008年6月 »