2007-11-29
さらさら
幼女砲はまだ塗れてません。絶対今月中に終わらないですね、これ。今年中には塗りたいところです。平行して某を描いているので塗っても余り長時間置けないかもしれません。某は何度も挫折してるので描きあがるかは謎ですが。
2007-11-27
WPF覚書
WPFの覚書。そのうちWikiに追加するかも。
WPFウィンドウをDWMで透けさせるにはWindow.BackgroundとSystem.Windows.Interop.HwndSource.FromHwnd(hwnd).CompositionTarget.BackgroundColorを透過色にします。Windowを透過しただけでは透き通ってくれません。
this.Loaded += delegate
{
IntPtr hwnd = new System.Windows.Interop
.WindowInteropHelper(this).Handle;
this.Background = Brushes.Transparent;
System.Windows.Interop.HwndSource.FromHwnd(hwnd)
.CompositionTarget.BackgroundColor
= Colors.Transparent;
MARGINS margins = new MARGINS();
margins.cxLeftWidth = margins.cxRightWidth
= margins.cyBottomHeight = margins.cyTopHeight
= -1;
DwmExtendFrameIntoClientArea(hwnd, ref margins);
};
WPFウィンドウに対しSetWindowLong()でウィンドウスタイルを変更すると内部データと矛盾が出るのか描画が壊れます。
System.Drawing.BitmapからImageBrushを作るにはLockBitsでビットマップデータのポインタを取りBitmapSourceを作成します。
System.Drawing.Imaging.BitmapData bd = null;
try {
bd = bmp.LockBits(
new System.Drawing.Rectangle(0, 0, bmp.Width, bmp.Height),
System.Drawing.Imaging.ImageLockMode.ReadOnly,
System.Drawing.Imaging.PixelFormat.Format32bppArgb);
System.Windows.Media.Imaging.BitmapSource bs
= System.Windows.Media.Imaging.BitmapSource.Create(
bmp.Width, bmp.Height, g.DpiX, g.DpiY,
PixelFormats.Pbgra32, null,
bd.Scan0, bmp.Width * bmp.Height * 4, bd.Stride);
ImageBrush new ImageBrush(bs);
// ブラシを使った処理
}
finally {
if(bd != null)
bmp.UnlockBits(bd);
}
2007-11-26
WPFはじめました?
一通り終わったのでVS2008(買うかは未定)もリリースされたことだしWPFなんぞに手を出してみようかと思っております。まだ(今更VS2005の.net 3.0環境を)一通りインストールしてみただけでどこから手をつけたらってとこですが。しかし今までの常識が通用しないのはどうしたものか。
幼女砲は絶賛着色中です。このペースだと今月中に終わるか怪しいですね。ていうか塗り終わるか怪しいです。
2007-11-24
塗れない病
絵チャでここ数年まじめに塗ってないなという話になったので手元にある画像では一番新しい幼女砲を塗っててみようかと思ったわけですよ。
塗れません。自分の塗りを完全に忘却してます。最後にまじめに塗ったのが見返してみると2004年4月。前の鯖に引っ越したときにトップ絵にしてた奴なわけで。実に3年半のブランクがあるわけですよ。コラとかアニメ塗りとかはしてたので写真屋の使い方を覚えていたのは不幸中の幸い。現在試行錯誤してますが完成するのかなぁ、これ。
2007-11-19
glut.hをincludeする前にGLUT_BUILDING_LIBを定義してはいけない
VC8でGLUTを使用する場合exitの再定義エラーが出るので対策としてGLUT_BUILDING_LIBを定義しなさいとかいうのが検索すると引っかかります。
何でglut.hがexitなんかを再定義してるかといいますと、
GLUTAPI int APIENTRY __glutCreateWindowWithExit(
const char *title, void (__cdecl *exitfunc)(int));
#ifndef GLUT_BUILDING_LIB
static int APIENTRY glutCreateWindow_ATEXIT_HACK(const char *title)
{ return __glutCreateWindowWithExit(title, exit); }
#define glutCreateWindow glutCreateWindow_ATEXIT_HACK
#endif
こんな感じで中で3つほどコールバック関数としてexit()を使ってるからなんですね。で例に挙げたこれは何をしてるかといいますと、glutCreateWindow()を__glutCreateWindowWithExit()に置き換えましてウィンドウが閉じられる際にexit()呼んで終了するようにしています。
さて、さきのGLUT_BUILDING_LIBですがこれを定義しているとこの例の場合glutCreateWindow()の置き換えが発生しません。で何が起こるかというとウィンドウを閉じてもプロセスが終了しない事態になるわけです。ええ素直に従ってたらウィンドウ閉じてもプロセスが終了しないものですからこういう仕様だとばかり思い、WM_CLOSEで終了するようにサブクラス化までしてしまいました。完全に無駄なコードです。
でまぁどうすればいいかといいますと少なくともVC8ではglut.hをincludeする前にstdlib.hをincludeすればいいかと。これで再定義されなくなります。
2007-11-18
散財
- 海の大陸NOA#3
- 海の大陸NOA+#3
無印ノア3巻ですよ!やればできるじゃないですか!しかし帯のラインアップを見る限り無印1巻と2巻は再販予定なしですか。いったい誰をターゲットにして出版したのでしょう。
2007-11-17
limewsh.dll
そんなわけで暇ができたので溜まってたものシリーズ第1弾limewsh.dll。溜まってるものでも一番新しいものから出るのは基本です。
limechatの$DllFuncでWSH呼び出すDllです。マクロにDllとか変更するたびにコンパイルしなくちゃだめだし使ってらんないよってことで作ってみました。COMの使用は初めてだったりするんでメモリリークが不安です。ソースコードはサンプルコピペしてリファクタリングした程度なんでNYSLです。お好きにどうぞ。
サンプルとかついていませんが単純だしわかる人ならわかるんじゃないでしょうか。
2007-11-15
先週末はおつかれさまでした
最後に物を言うのは「見た目」悲しいけどこれ現実です。時間かけた割りに技術的には非常に稚拙。グラフィックでごまかしたようなもので関係者には申し訳ない。いやまぁその関係者に言いたいことは結構あるのですが、終わったことですし来年は流石に関わらないでしょうから胸にしまっておくことにします。
2日目非常にバグバグでしたが時間やる気もろもろ足りてないので仕方ないですか。いやでも数分に再起動はないでしょう。都合により最後までかかわれなかったのが残念。まぁ関わってたらどうなってたということはないでしょうけどね。お隣さんとネタかぶってましたがどっちが良かったは第3者にゆだねるとして、やたら3Dをアピールしてたのはなんだったんだろう。
そんな内容を書き溜めておいて後は更新するだけだと思ったら予想外のことに巻き込まれてこんな時間に。Wordでプロッタは無理です。イラレとかPDFとか使いましょう。
2007-11-11
さらさら
ようやく忙しかったアレが終わるので、暇な時間ができるやも知れません。結果?知りませんよそんなの。
とりあえず色んなものが溜まっているので公開できる分は出していきたいとこですがマニュアル書くのとか色々めどいです。
2007-11-02
Nucleus導入メモ
XREAの鯖にutf-8版をそのまま突っ込むと文字化けが発生するのでSQLにデータを投げる部分を修正する必要があります。具体的にはinstall.phpの430行目付近のdoInstall()とnucleus/libs/globalfunctions.php480行目あたりのsql_connect()内にmysql_query("SET NAMES utf8");を追加。
// install.php
// 2. try to log in to mySQL
global $MYSQL_CONN;
$MYSQL_CONN = @mysql_connect($mysql_host, $mysql_user, $mysql_password);
if ($MYSQL_CONN == false) {
_doError('Could not connect to mySQL server: ' . mysql_error() );
}
mysql_query("SET NAMES utf8"); // MEMO:XREA対応追記
// 3. try to create database (if needed)
if ($mysql_create == 1) {
mysql_query('CREATE DATABASE ' . $mysql_database)
or _doError('Could not create database. Make sure you have the rights to do so. SQL error was: '
. mysql_error() );
}
// nucleus/libs/globalfunctions.php
function sql_connect() {
global $MYSQL_HOST, $MYSQL_USER, $MYSQL_PASSWORD, $MYSQL_DATABASE, $MYSQL_CONN;
$MYSQL_CONN = @mysql_connect($MYSQL_HOST, $MYSQL_USER, $MYSQL_PASSWORD)
or startUpError('<p>Could not connect to MySQL database.</p>',
'Connect Error');
mysql_select_db($MYSQL_DATABASE)
or startUpError('<p>Could not select database: '
. mysql_error() . '</p>', 'Connect Error');
mysql_query("SET NAMES utf8"); // MEMO:XREA対応のため追加
return $MYSQL_CONN;
}
Nucleus CMS v3.3は同じ日時で投稿しても投稿毎に日付ヘッダとフッタが生成される(たぶんバグ)のでnucleus/libs/BLOG.phpのBLOG::showUsingQuery()、170行目あたりを下記のように修正。
// loop over all items
$old_date = 0; // MEMO:追加
while ($item = mysql_fetch_object($items)) {
// string timestamp -> unix timestamp
$item->timestamp = strtotime($item->itime);
// action handler needs to know the item we're handling
$actions->setCurrentItem($item);
// add date header if needed
//$old_date = 0; // MEMO:コメントアウト
if ($dateheads) {
$new_date = date('dFY',$item->timestamp);
参考リンク
2007-11-01
散財
- あっちこっち#1
- 二丁目路地裏探偵奇譚#1
- 空想科学X Lesson1
まだ全部読んでいません。時間をください・・・
移転しました
というわけで移転してきました。サイトスペース自体はかなり前に確保していたんで計画立てて何年たってるんでしょうか。時間がないのでトップページのスタイルシートは色だけ使いまわした状態ですが、そのうちトップ絵でも載せようかと思います。
雑記システムはもう他人様製作でいいやってことでNucleus入れてみました。まだ手探りですが、最低限の要求は満たしているのでしばらく使ってみようかと思っています。
Nucleus CMS バージョン3.3へようこそ
用途が思いつきませんでしたか? それならここへ来て正解です。なぜならあなた同様私たちにもわからないのですから。