このブログを検索

ラベル D言語 の投稿を表示しています。 すべての投稿を表示
ラベル D言語 の投稿を表示しています。 すべての投稿を表示

2010年10月24日

なんだこれ、ねむれん

最近触ってないD情報を求めて本家行ったらVersion D 2.049 Sep 13, 2010なる一文が。
先月かよ!
NeGuiコンパイル通んねーよ!
いつもどーりだくそったれーい!

2010年6月14日

はやぶさが帰ってきた

NeGuiを1.120へバージョンアップ。
今回は以前から気に食わなかったText構造体の前面修正とDateTimeの書式の修正。

そのほかはまぁ色々やった気がせんでもない気がする感じ。

2010年5月16日

髪切った

NeGuiを1.110にバージョンアップ。
今回からバージョン表記変更、一番最後がetc.negui.system.literal.VER.EXに対応するように。

今回試験的に統合アーカイバのラッパークラスを追加。
DLLから動的に呼び出すことを前提にUnlha32を元に設計。
仕様の理解が甘いので微妙なところだけどうまく使えればいいなぁと考えながらコーディング。
一応それぞれのAPIは実行可能のはず。
ラップしたのは単純なものだけでOpenArchiveは未ラップ。

あぁ明日仕事鬱だなぁ。

2010年5月4日

ちょっと風邪が治ってきた!

NeGuiを1.101にバージョンアップ。
プログラム的な部分に大きな修正は無いけどnegui.ddocを大幅書き換え。
今現在はNeGuiの基盤部分であるetc.negui.system.text, etc.negui.system.time等々をちまちま改造中。
DateTime.MODE.FLEXIBLEの挙動が謎過ぎてちょっと面白い。
進むか戻るか適当すぎる。

あとD言語 Part24に書き込んだらDと全然関係ない話題でスレを消費していた。
ほんと申し訳ないなぁ。
もう書き込まない方がいいかもしれんので大人しくROMっとこう。

2010年5月2日

風邪が治らん

NeGuiを公開。
色々バグあるし不完全だけど公開してみた。
一旦区切っておきたかっただけ。

2010年4月10日

分離

NeGuiをネムぃから分離。
分離自体は以前から可能だったんでimport etc.negui.neguiで呼べるように変更。

相変わらずなにやってんのかわからん。

2010年3月12日

作り直したい

ネムぃを作り直したい。
なんかある程度の期間を置くとこの衝動に駆られてる気がする。
取り敢えず衝動に身を任せて作り直したい。
NeGuiも整理して一から作りたい。
あとカレキもなくしてXMLに移行したい。
どうせ趣味だし作り直したい。

そんなこの頃。

2010年1月6日

あけましておめでとうです。

DMD 2.039入れたついでにネムぃコンパイルしてみました。
Bindings for the Windows APIが通らないのはいい、修正されてたしinout->refにするだけだから。
問題はstd.regexで何かしらが死んでたり、deferring EMRPIXELFORMATなるメッセージが表示されるあたり。
いやはや。

2009年11月9日

マシュマロってあんましおいしくないと思った

立て続けにネムぃのバージョンアップ。
1.010にアイテムのメモが保持されないバグがあったので1.020もパッケージにて公開。

最近はネムぃの機能からNeGuiに引越しできそうなmoduleを引越し中。
正直GUI以外のmoduleはあんまし移動させたくなかったんですけど今後NeGuiを使用して別ソフトを作る可能性も考えたらpackageまとめておいたほうがいいかと考え決行。
とはいってもNeGuiはネムぃがつくれりゃそれでいいライブラリという位置づけなんで本当に快適に使用できるかは不明なまま一応検証用としてtest.dを作って実行してみた結果がこの画像。





とまぁこんなかんじ。所要時間は10分くらい。
一応ほかのソフトも作れなくもないかなーと思う今日この頃。
下記がそのソース↓


/**

*/
module nemuxi.negui.test;

import nemuxi.negui.allimport;

version(build) {
 pragma(build_def, "EXETYPE NT");
 pragma(build_def, "SUBSYSTEM WINDOWS,5.0");
}

void main() {
 auto aaa=new TestNeGui;
 aaa.execute;
}

class TestNeGui: MainWindow {
 enum CTRL: ITEM_ID {
  HELLO=1,
  EDIT,
  MSGBOX
 }
 private {
  TextLabel label;
  MultiEdit edit;
  Push button;
  
  Font CtrlFont, EditFont;
 }
 this() {
  GUIINFO g;
  super(&g);
 }
 protected override {
  void OnCreate() {
   // メインウィンドウ処理 -------------------------------
   // タイトルバーあり
   caption = true;
   // システムメニューあり
   systemMenu = true;
   // サイズ変更用境界線あり
   frameSize = true;
   // 表示状態
   setShow(SHOW.SHOWNORMAL);
   // 位置とサイズの設定
   move(0, 0, 200, 200);

   // メインウィンドウを親としてラベル作成 ---------------
   label = new TextLabel(this, CTRL.HELLO);
   // 水平位置設定
   label.horizonAlign   = HORIZON_ALIGN.CENTER;
   // 縦位置
   label.verticalCenter = true;
   // 文字設定
   label.text = Text("はろー わーるど");

   // メインウィンドウを親としてエディットボックス作成 ---
   edit = new MultiEdit(this, CTRL.EDIT);
   // 空白にしておく
   edit.text = Text.emptyText;

   // メインウィンドウを親としてボタン作成 ---------------
   button = new Push(this, CTRL.MSGBOX);
   // 文字設定
   button.text = Text("メッセージ表示");

   // フォント生成 ---------------------------------------
   CtrlFont = new Font(Font.STOCK.MESSAGE);
   EditFont = new Font(Font.STOCK.SYSTEM);
   EditFont.pitchAndFamily(Font.PITCH_FAMILY.MODERN);

   // 一括してフォントの設定 -----------------------------
   auto ctrls = new ControlGroup(label, edit, button);
   ctrls.font = CtrlFont;
   // エディットボックスは等幅
   edit.font = EditFont;

   // パネルの設定 ---------------------------------------
   auto panel = new Line(DIRECTION.VERTICAL);
   // ラベルの設定、 あまりの領域
   panel += label;
   panel.sizeInfo(0).absolute = -1;
   // エディットボックスの設定、50%
   panel += edit;
   panel.sizeInfo(1).percent = 50;
   // ボタンの設定、最低限の高さ
   panel += button;
   panel.sizeInfo(2).absolute = button.minContentHeight;
   // それぞれをウィンドウのパネルに設定
   layoutManager.basePanel = panel;
  }

  bool OnCommand(ITEM_ID Id, MESSAGETYPE MessageType, NeGui Sender) {
   if(Sender is button) {
    if(MessageType == Button.EVENT.CLICKED) {
     // メッセージボックス表示
     ShowMessage();
     return true;
    }
   }

   return false;
  }
 }

 private void ShowMessage() {
  // エディットボックスの文字列取得
  auto EditText = edit.text;
  // エディットボックスの改行数取得
  auto LineCount = edit.lineCount-1;
  // 取得文字列から文字列長取得
  auto TextLength = edit.textLength;

  // ダイアログ生成
  auto dialog = new MessageDialog();
  // 表示メッセージを書式付で
  dialog.message = Text(
   "文字列%s%s%s", Text.newline, EditText, Text.newline,
   "%s%s\n", Text.repeat(Text('-'), 40), Text.newline,
   "改行数 = %s\n", LineCount,
   "文字数 = %s\n", TextLength
  );
  // タイトルバーを日時に
  auto time = new DateTime();
  time.format = "[YY]/[M]/[D], [hh]:[mm]:[ss]";
  dialog.text = Text(time);
  // 表示アイコン
  dialog.icon = MessageDialog.ICON.INFORMATION;
  // ボタンの種類
  dialog.button = MessageDialog.BUTTON.OK;
  // 表示
  dialog.show;
 }
}
一応全部で140行くらいでした。

2009年11月7日

寒いでごわす

DMD2.036入れてみたらコンパイル通った。
あっれー?

2009年11月3日

1.000公開

ネムぃを本意じゃないけどまぁいいやと思ってβから1.000に移行しました。
本来ならば1.00β1Aになっていたはずなんだけどね。

今バージョンもDMD最新版ではコンパイルできず2.032を使用。
各モジュールは可能な限り2.035でコンパイル+単体試験はしてるんで早いこと移行したい限りです。

そんだけ。

2009年10月27日

さぶい

久々に更新で10月もそろそろ終了なわけですが特に書くことがありません。

ネムぃの開発の方は依然よく分からない方向に進んでいてワケ分からん。
何だろう、importでDMDが落ちる。
循環とか関係なさそうなんだけど再現方法が分からないんで再現するための最小コードが書けない。
とりあえず以前書いたとおりコンパイラ以外は最新でコンパイラのみ3.032で行く方針で進めていく予定。

うん、謎だ。

2009年10月7日

コンパイルが通らないので一通りモジュールの整理を実施したけど駄目だった。
NeGui自体は(一部思いっきりネムぃに依存してるけど)単独でコンパイルできる状態になった、が、ネムぃのソースは絶望的に無理状態。
言語リソース用のモジュールが引数の問題でごちゃごちゃ循環してるんでそれが足枷になってコンパイル不能。

仕方ないから2.032に戻すかなぁ、と考えもしてみたんですが戻せば戻したでstd.convが死んでるんでその対処もしなくちゃならん。
というわけで現状はライブラリ2.033、コンパイラ2.032で行くことにしました。

まったくめでたくないけど、めでたしめでたし。

2009年10月5日

DMD 2.033


Assertion failure: 'var' on line 3976 in file 'expression.c'


盛大に死んだ。

2009年9月18日

マウスフックが直ったー②

やっとこさ直った。
訂正、多分直った。

こっからの話は「恐らく」になると思うんですが原因はDMD2.030から扱いの変ったグローバル変数、TLS変数のおかげ。
フックってDLLを使用する場合は共有メモリを使用、共有部分をグローバルに置いとくのが王道だと思うんです。
だたD(2.030以降)ではこのグローバル部分がスレッド別に置かれるんで変になっていたっぽい。

__gsharedしたらきちんと動きました。
しんどかったー。

2009年9月17日

マウスフックがバグってたー

謎が多すぎる。
コマンド型を実装してからマウスフックでネムぃがサヨナラする事象が発生中。

コマンド型で入力補完的なコンボボックスのリスト部分的なものを表示させてからマウスフックを使用すると
Unhandled Exception: EXCEPTION_ACCESS_VIOLATION(0xc0000005) at HOOKER.DLL (0x012b8127) thread(6100)
が発生。
Hooker.dllを使用していなければ大丈夫。
非常に意味が分からない。
DDBGで動きを見る感じでは
  1. ネムぃ起動
  2. 起動の最後にHooker.dllがロードされる

    No symbols available from HOOKER.DLL
    HOOKER.DLL loaded at 0x012b0000
  3.  コマンド入力ウィンドウを表示
  4. 何か入力するとリストが表示され以下がロードされる
    No symbols available from IMJPSQM.dll
    IMJPSQM.dll loaded at 0x3ac70000
    No symbols available from IMJPCD.DIC
    IMJPCD.DIC loaded at 0x3ae00000
  5. ここで分岐。
  6. ①このままリストからアイテムを選択して実行すると以下がロードされて何事も無く動く。
    No symbols available from NETAPI32.dll
    NETAPI32.dll loaded at 0x59250000
    No symbols available from urlmon.dll
    urlmon.dll loaded at 0x442a0000
    No symbols available from iertutil.dll
    iertutil.dll loaded at 0x40930000

    ②リストを無視してデスクトップでホイールクリックすると

    EXCEPTION_ACCESS_VIOLATION
ワケが分からん。

2009年9月16日

いやいやいやいや

Access Violationが発生中。
場所がわかんねー。
DDBG使ってもわけわからん。

Unhandled D Exception (std.contracts.ErrnoException
 "C:\dmd\dmd\src\phobos\std\stdio.d(896):  (Bad file descriptor)") at KERNEL32.dll (0x7c812afb) thread(2632)
->;us
#1 0x004bd728 in __d_throw@4 () from deh
#2 0x004bd538 in extern (C) int rt.dmain2.main(int, char**) . void runMain(void*) () from dmain2
#3 0x004bd575 in extern (C) int rt.dmain2.main(int, char**) . void runAll(void*) () from dmain2
#4 0x004bd2e8 in _main () from dmain2
#5 0x00521695 in _mainCRTStartup () from constart
#6 0x7c817077 in ?? () from KERNEL32.dll
#0 Access Violation

せめて変数名だけでも分からないもんだろうか。

2009年9月12日

DのDLLでかすぎ

β16ぅぅ。

ソースコードの整理が主で特に機能変更等は無し。
マウスフック用のHooker.dllのフック解除時のコードが若干怪しかったんでその部分の修正もあり今回はDLLも配布ということで久々のパッケージ・単独ファイルの公開です。

今後の予定は、
  • β17→コマンド型の実装
  • β18→設定画面のUIをいじる
  • β19→ドキュメントの整備
この流れで行こうかと。

2009年9月9日

電波時計の電池が意外と長持ちでびっくり

ネムぃがバージョンアップした感じです。
ソースがあまりにも汚くなったので次バージョンは機能の追加はせずに整理に重点を置きたいなぁ。

今回の主な変更点はアイテム選択時のコンボボックスやリストボックスに対象アイテムのアイコンを描画するようにしたこと。
今まではアイコン読み込みに掛かる時間等を考えるとあんましやりたくなかったのですが適当にファイルを30個くらい読ませてみたら意外と速く処理できたのでじゃあ実装してみよう、といった感じで進んでいきました。
まぁそのおかげでソースが凄く凄く読み難くなってしまいましたが、、、てか、あれだ、書いてて気付いたけどイメージリストのkill忘れてるわ今回。

他にも色々やったけどアイコン描画がいろんなところに影響しすぎて修正しまくってその過程でなにやったか忘れた。

2009年9月6日

最近コーラがやたらうまい

DMD2.032のtoで泣いたけどD言語 Part22の839氏も死んでたっぽい。
修正パッチへのリンクもあったのでそれを参考にtoで泣かなくてよくなりました。

ネムぃの設定画面で多用しているアイテム一覧のコントロールをそろそろ綺麗にしようと思いコンボボックス→拡張コンボボックスに変更しようと思いましてコード実装してみたらすごく変。
STANDARDなら大丈夫なんですけどDROPDOWNとかを指定すると途端に動かない。
いや、動いてんだけどリスト部分が表示されない。
あっれ~ってなりながらGoogle大冒険した結果MSDNのUsing ComboBoxEx Controlsにあんましよろしくない文が。

hwnd = CreateWindowEx(0, WC_COMBOBOXEX, NULL,
                    WS_BORDER | WS_VISIBLE |
                    WS_CHILD | CBS_DROPDOWN,
                    // No size yet--resize after setting image list.
                    0, // Vertical position of Combobox
                    0, // Horizontal position of Combobox
                    0, // Sets the width of Combobox
                    100, // Sets the height of Combobox
                    g_hwndMain,
                    NULL,
                    g_hinst,
                    NULL);

英語わかんないなりに訳してみるとイメージリスト設定後にリサイズできないの?

とりあえずよく分からんけど適当に実装してみた。
以上、同じ問題で誰かが悩まないようにメモ書きです。



←実装した結果。