...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

D言語

DFL: ToolTip の機能とサンプルコードの追加

ToolTip のサンプルコードを作成するついでに WinForms にあってこちらにない機能をいくつか追加しました。 バルーンタイプのツールチップ アイコンとタイトルの表示 アニメーション表示(フェードイン)なし フェードアウトなし 複数行の表示 &記号がアクセ…

DFL: GetOpenFileName と GetSaveFileName

DFL の OpenFileDialog では GetOpenFileName が使われていて、SaveFileDialog では GetSaveFileName が使われています。それぞれ、表示されるダイアログがプレースバーがないタイプでした。 プレースバーがあるタイプのダイアログにするには OPENFILENAME …

DFL: コモンダイアログのサンプルコード

ボタンの配置が微妙ですが、コモンダイアログのサンプルコードを追加しました。 以下のクラスのサンプルを含みます。 OpenFileDialog SaveFileDialog FolderBrowserDialog FontDialog ColorDialog あと PrintDialog が存在しますが、DFL には実装されていま…

DFL: ImageListのサンプルコード(ComboBoxも)

ここにコードを貼るのは省略しますが、ImageListのサンプルコードを追加しました。 下のリンクから参照してください。 dfl/examples/imagelist at master · Rayerd/dfl · GitHub ついでにComboBoxも使っているので、こちらのサンプルとしても使えます。 挙動…

DFL: ドラッグアンドドロップ(1)~DragAcceptFiles編~

DFL で Drag&Drop がうまくいきません、詳しい人教えてください!テストコードは http://t.co/ngKcdrHTtN #dlang— Seiji Fujita (@sfujita) 2014年2月9日 ソースはリンク切れのため今となっては詳細不明。 DFL のドラッグアンドドロップがうまく動かないとい…

DFL: Splitter コントロールのサンプルコード

github.com Splitter コントロールには最小幅を設定するプロパティがありますが、最大幅を設定するプロパティがないので、サンプルコードでは自前で実装しています。 方法は、Splitter の左又は上にあるパネルのサイズが変更されたときに、所定の最大幅を超…

DFL: ListViewコントロールのサンプルコード

github.com View.DETAILS: View.LIST: ListView コントロールのサンプルですが、アイコンを用意していないので、view プロパティに View.LARGE_ICON と View.SMALL_ICON を設定しても見栄えが悪いです。 あと、リストビューの詳細表示の1列目にはセンタリン…

DFL: ビジュアルスタイルの有効化

追記あり。 続・追記あり。 DFLに限らないけれども。 VisualStyle有効: VisualStyle無効: 以下のコードをソースファイルに追加してdmdでビルドすれば、実行ファイルと同時にマニフェストファイルが生成される。 実行ファイルを起動すれば、ビジュアルスタ…

DFL: StatusBarコントロールのサンプルコード

github.com ウィンドウにステータスバーを表示し、3つのパネルを追加します。 各パネルは borderStyle プロパティに StatusBarPanelBorderStyle を設定することで3種類の見た目に変更できます。 ウィンドウ内を左クリックすると左端のステータスバーにクリ…

DFL: TabContolのサンプルコード

github.com パネルコントロールの一種であるタブコントロールのサンプルコードを追加。 いつもどおり、WinFormsと同じ感じでできた。 パネル系のクラスを使うのは初めて書いたので、初めてついでにDockStyleを設定してみた。 ちゃんと動いているようだ。 imp…

DFL: Button、RadioButton及びCheckBoxのサンプルコード

ダイアログボックス的なやつなので、ウィンドウサイズを変更できないように設定している。 Doneボタンで各種設定を文字列で表示する。このボタンはフォーカスがこのウィンドウ内のどこにあっても、エンターキーで押すことができるように設定している。 Cance…

DFL: Labelコントロールのサンプルを追加

ほとんど又は全く触ったことがないコントロールの動作確認を兼ねて、サンプルコードを書いてみる。 まずは、Label (Static) コントロール。 コードは、本家の下記チュートリアルより。 wiki.dprogramming.com import dfl; version(Have_dfl) // For DUB. { }…

DFLのTextBoxがリターンキーとタブキーを正しく受け付けなかったバグを修正

github.com 全般的なこと 当初の想定よりも大規模な改修になってしまった。 基本的には、WinFormsのキー入力イベントシステムを踏襲した形に修正していく方針とし、DFLが元々使っているFormMessageFilterクラスへの依存を減らした。 キー入力イベントシステ…

vscodeのターミナルに出るdmdのコンパイルエラーからctrl+clickでジャンプできないので拡張機能code-dの最新開発版を取得してインストールする件について

目標 Visual Studio Code (vscode) で、D言語のソースをコンパイルしたときにターミナルに出るファイル名と行番号(マウスホバーで下線が出る部分)を ctrl+click して、そのファイルの該当行へジャンプできるようにする。 試行錯誤 最初から、問題タブでは …

DFLのビルド方法(DUB編)

この記事はD言語 Advent Calendar 2022の10日目の記事です。 ・はじめに 前々回、前回と、DFLのビルド方法について書いてきましたが、今回が完結編となりそうです。 OMF形式に次いで、COFF 32bit、64bit形式のオブジェクトファイルを作成する方法を書きまし…

DFLのビルド方法(32-bit COFF, 64-bit編)

この記事はD言語 Advent Calendar 2022の8日目の記事です。 ・はじめに 6日目の記事では、DFLを32-bit OMF形式でビルドする方法を説明しました。 D言語の公式コンパイラdmdは、元々はオブジェクトファイルをOMF形式で出力していましたが、現在はCOFF形式で出…

DFLのビルド方法

この記事はD言語 Advent Calendar 2022の6日目の記事です。 ・はじめに 先日、DFLをdmd 2.101.0でビルドできるように修正しました。 とうの昔にPhobosのstd.streamが廃止になっているので、代わりにundeaDライブラリのundead.streamを使いましたが、DFLをビ…

DFLをdmd 2.101.0で動くようにしたのとライセンスについて

この記事はD言語 Advent Calendar 2022の5日目の記事です。 DFLは、D言語でGUIアプリケーションを書けるライブラリであり、.NET の Windows Formsライブラリに似た使用感を持っています。 本家DFLの更新が止まっていたので、そこからforkして非公式のリポジ…

DFL

だいたいShooさんのPull Requestです。 Some fix for latest dmd, druntime and phobos. · Rayerd/dfl@a00bffa · GitHub とりあえずコンパイルできるように。 Merge pull request #22 from shoo/add_moving_and_sizing · Rayerd/dfl@93d1fd7 · GitHub ウィン…

DFL for dmd 2.066

久しぶり。 https://github.com/Rayerd/dfl import dfl; pragma(lib, "dfl.lib"); class MainForm : Form { private Button _button; private ListBox _listbox; private MainMenu _menu; this() { _button = new TestButton(); _button.text = "ok"; _butto…

関数と関数テンプレートのオーバーロード

今週の新技術 import std.stdio; class A { void f() { writeln("f()") ;} void f(int) { writeln("f(int)"); } void f(T)(T a){ writeln("f(", typeid(T), ")"); } } void main() { A a = new A; a.f(); a.f(1); a.f("str"); } f() f(int) f(immutable(char…

UFCS

import std.stdio; import std.algorithm; void main() { writeln("aaa".map!(x =>'b')()); /// bbb } ついにあらゆる値に対してメソッドチェインが使えるようになった。やったね。

=>

あけおめ. import std.stdio; int f(alias F)(int x) { return F(x); } int g(int delegate(int) dg, int x) { return dg(x); } int h(int function(int) dg, int x) { return dg(x); } void main() { writeln(f!(x => x + 1)(1)); writeln(g(x => x + 1, 1…

愚直に書くのが最速だった

final class Lexer { private const string source; this(in string source) { this.source = source; } const(string)[] lex() const { static string[] f(string line) { auto app2 = appender!string(); app2.put(line); app2.put(","); app2.put(TOKEN_E…

何だかうまく書けない

final class Lexer { class LexerThread : Thread { private const(string)[] lines; private Appender!(string[]) app; this(const(string)[] lines) { this.lines = lines; app = appender!(string[])(); app.reserve(10000); super(&run); } void run() {…

std.traits.isCovariantWith

import std.traits; interface I { I clone(); } class C : I { override C clone() // I.clone() の共変オーバーライド { return new C; } } void main() { { static assert(isCovariantWith!(typeof(C.clone), typeof(I.clone))); }{ C function() derived…

std.concurrency メモ

import std.stdio; import std.concurrency; void f() { writeln("start"); for (bool f; !f; receive( (int i) { f = true; }, (string s) { writeln(s); }, )) {} writeln("end"); } void main() { auto tid = spawn(&f); send(tid, "a"); write(readln())…

デリゲートと関数ポインタで共変の戻り値(covariance)

import std.stdio; class Base {} class Derived : Base {} void main() { // Covariance { Base delegate() f = delegate Derived() { return new Derived; }; writefln("delegate convariance is <%s>", f().toString() == "a.Derived" ? "OK" : "NG"); }{…

GW

最近,日記らしいことを全然書いていませんでした. ヘッドフォンのコードに足を引っかけて落として壊してしまったので, ついにホットボンドを買ってきました. 強度を持たせようと思って盛りすぎたので少しいびつな形になったけど,使用感はまずまず. こ…

スレッドセーフな銀行クラス(2)

すべてのメソッドの内容を synchronized ブロックに含めるのならクラスを synchronized クラスにしてもよい. synchronized クラスのメンバはそのインスタンスを shared 型で生成しなければ呼び出せないので,この場合には new Bank ではなく new shared(Ban…