Swanman's Horizon

性欲をもてあましつつなんらかの話をするよ。

DTween 110819版。

今回は2010やXEを使っている方にとっては内部処理の変更だけですが…。DTweenをダウンロード 新しい機能 Delphi 2009以前のバージョンに対応(ただし制限付き) ということで、今まで比較的新しめのDelphiでしか動かなかったDTweenですが、それ以外のバージョ…

DTween 110818版。

トゥイーンがひとつも実行されていないときは内部タイマーを止めるようにしました。DTweenをダウンロード

DTween 110817版。

とりあえずこの辺で安定する…はず。DTweenをダウンロード 仕様変更 単一パラメータ版のTween(To, From)メソッドを廃止 開発途中でパラメータがひとつしか指定できない頃の名残だったというか、リリース時に消し忘れてたというか…。 今の段階で「DTween使い…

DTween 110815版。

今回はTEasing.Combineのバグ修正だけです。DTweenをダウンロードと、これだけでは寂しいので、今っぽいUIにありがちな動きのデモを1つ増やしておきました。こんなの。 パネルに別々の色付けておけば良かったな。

DTween 110814版。

昨日の今日で仕様変わってますけどまあそれはそれで。DTweenをダウンロード 仕様変更 プロパティ値取得のタイミングを変更 値の相対指定時や、省略されたプロパティ値の取得のタイミングを「Tweenメソッドのコール時」から「初めてトゥイーンを実行した時」…

Delphi用トゥイーンライブラリ「DTween」できました。

Twitter上でデモ動画を2つほど公開してきたけど、最低限公開できそうな感じにはなったと思うので出してみるよ!DTweenをダウンロードDTweenとは何かというと、簡単に言えば下の動画のような動きが実質一行で書けちゃうようなライブラリです。具体的な書き方…

アドホック版アプリをWi-Fi経由でiPhoneにインストールする方法

アドホックビルドしたアプリをWi-Fi経由で配布する、いわゆるOTA配布というのは他のサイトでも散々やり方が書かれてるけど、それとは微妙に違う話。 WindowsでiOSアプリが開発できる! AppleがObjective-CやC/C++以外の言語によるアプリは認めねえ!という強…

STRONGLINKTYPESコンパイラ指令からみる日本語版docwikiの酷さ。

ネタはさておき まあ使ってる使ってないにかかわらず強制リンクしちゃうよっていう、スマートリンク?何それ食えんの?的な機能だけど、こいつの威力はさておき、何が酷いかってdocwikiっすよ。 一応これXEでの新機能ってことになってるんだけど*1、英語版で…

エターナルストロングリンクタイプ!

一瞬でusesしたユニットごと型をリンクしexeサイズを肥大化させる。 相手は死ぬ。

docwikiでは教えてくれない演算子オーバーロード。

In演算子 Inをオーバーロードすると、集合演算子としてのinの動作を定義できるようになる*1。 // サンプル type TStrRec = record public Value: TArray<string>; class operator In(const A: string; const B: TStrRec): Boolean; end; class operator TStrRec.In(c</string>…

他に見つけたもの。

まあこちらはdocwikiにも載ってたんだけど。 experimental指令 ユニット全体、あるいは特定のシンボルがテスト用であることを示す指令。 次のように使う(と、コンパイル時に「これはテスト中のもんやで!」と出る)。 unit Unit1 experimental; // 「W1007 …

TVirtualMethodInterceptorを試す。

と思ったのに たった1日でdocwikiから消されとるがなwwwww まあせっかく調べたし書こう…。 そもそもTVirtualMethodInterceptorって何よ 動作検証をしたところ、仮想メソッドの呼び出しをフックし、呼び出し前と呼び出し後にイベントを発生させることの…

カスタム属性とRTTIを使ったCSVファイルのロード@Delphi2010。

1月1エントリ 順調に達成してるな…!と思ったらすでに4月に破綻してた。 そんなことよりカスタム属性やろうぜ! 先日カスタム属性とRTTIを利用したCSV読み込みクラスを作る機会があったので、それらの利用サンプルとして多少汎用化しつつ公開してみる。C#は…

メソッド解決節にジェネリックメソッドを指定できない。

たぶん バグじゃなくて仕様なんだろうけどね。 指定できたらどうなるの? 例えばTStreamにReadInt8やReadUInt64みたいなサイズ別読み取りメソッドを実装したいときなんかに、実装部の記述量の大幅削減が期待できる。 指定できない場合 type THogeStream = cl…

知られざるTHashedStringListの事実。

ハッシュテーブルといえば Delphiにジェネリクスが導入される以前、ハッシュテーブル(らしきもの)を使おうと思うと、標準VCLではIniFilesユニットに含まれるTHashedStringListしかなかった*1。一方、導入後はGenerics.CollectionsユニットのTDictionaryが…

for-in-doにもっと頑張ってもらう。

var s: string; for s in ['a', 'b'] do ... ふと何気なくこのようなコードを書いたら構文チェックが通ったので、「あれ?これ何気に便利じゃね?」と思ったら致命的エラーとやらでコンパイルは通らず。がっかり。でももしやと思い次のようなコードを試して…

配列の添字にスコープ付き列挙型が使えないバグ。

まず列挙型と配列のおさらい type TGender = (Male, Female); // これが列挙型 var population: array[TGender] of UInt64; // こうやって添字に指定できる begin population[Male] := 15; population[Female] := 20; end; 列挙型の一部を添字にしたいとき t…

カスタム属性でクラス定数っぽいものの振る舞いを継承先で変えたりしてみる。

事の発端 http://pc12.2ch.net/test/read.cgi/tech/1259667697/312-315n 312 :デフォルトの名無しさん:2010/02/26(金) 13:16:25 TBase = class public class const Value: Integer; abstract; end; TBaseClass = class of TBase; TExtend1 = class(TBase) …

バンクーバーオリンピックとDelphi。

この一見関係ないような組み合わせ、実は巨大五輪のLED制御部分がDelphiで書かれているらしい。こういう表舞台で使われることってまだあるんだなーとか書いちゃうと怒られそうだけど、それにしても今まで書かれたDelphiプログラムで一番巨大なんじゃないかな…

クラスメソッド版TThread.Synchronizeの使いどころ。

無名メソッドの導入によってSynchronizeメソッドが拡張されたのは知ってる人も多いだろうけど、ついでにクラスメソッド版のSynchronizeも作られたことは俺以外に2人くらいは知らないかもしれない。宣言部を引用してみるとこんな感じ。 type TThread = class …

TStringListのささやかな新機能。

エターナルフォースOwnsObjects*1! type TStringList = class(TStrings) ... constructor Create(OwnsObjects: Boolean); overload; ... end; Create時にTrueを指定しておくと、Freeをしたその一瞬でObjectsプロパティに含まれるインスタンスを解放させる*2…

準公式(?)イベントハンドラを無名メソッドで書く方法。

Entropy Overload: Using anonymous methods in method pointers リンク先の記事でやってることは前書いたのとほぼ同じなんだけど、そこはかとなくあちらの方が華麗なコードぽくて悔しいです>< ただ、参照カウントの問題も同じく解決されてなかったので、…

プロパティのオーバーロード。

本来同名で複数定義することのできないプロパティを、default指定した場合に限りオーバーロードできちゃう、という小ネタ。 type TFoo = class private function GetItem(Index: Integer): string; overload; function GetItem(const Name: string): string;…

呼び出し規約を指定して無名メソッドを書く。

var func: TFunc<Integer,BOOL>; begin func := // NG function(Data: Integer): BOOL stdcall begin Result := True; end; このように書こうとすると、コンパイラに「互換性ねーよ糞が」とか怒られるんだけど、そもそもTFunc<>の宣言を見てみると、 type TFunc<T,TResult> = referenc</t,tresult></integer,bool>…

イベントハンドラを無名メソッドで書く。

2ヶ月ちょっとくらい放置だったのはこの際忘れるとして。C#では次のように無名のイベントハンドラを記述できるので、 wahaa.Click += delegate { MessageBox.Show("わはー"); }; Delphiに無名メソッドが実装された時、きっとできるんだろうと甘く考えてたら…

無名メソッドをその場で呼び出す。

無名メソッドは変数に代入したり、関数に渡して使うものだから、その場で呼び出しちゃうってことは一度きりの使い捨て?再利用できなくね?何の意味があるの?という疑問をお持ちの方もいるかもしれないけど、例えばクロージャを作りたい場合なんかは「クロ…

基本の再確認2 CPUの数。

System.pas内にCPUCount変数が宣言されていて、これを参照することでCPUの数が取得できる。中身はGetSystemInfoで取得した値。 2006のソースを見たところまだ存在しなかったので、2009辺りで導入されたのかな?

基本の再確認1 for..in..doあれこれ。

var c: Char; s: string; arr: TArray<string>; begin s := 'Hello, Wahaa world'; for c in s do { 1文字ずつ取り出す }; for c in Copy(s, 8, Length(s)) do { 8文字目から1文字ずつ取り出す }; arr := TArray<string>.Create('Hello', 'Wahaa', 'world'); for s in arr do</string></string>…

定期ゴミ拾いのお知らせ。

レジストリの"HKEY_CURRENT_USER\Software\CodeGear*1\BDS\x.0*2\Globals"内に"CollectGarbageInterval"という文字列値を作って、ミリ秒で時間を指定するとその間隔でIDEで使ってる.NETに対して強制的にGCを発動してくれるみたい。 ガリレオIDE系で有効だと…

拡張識別子。

海外のDelphiブログを色々見てる時に、変数名だか関数名の頭に&記号が付いてるのを(どこでだったか忘れたけど)目にして、さっき何となくヘルプ見たらあれは拡張識別子というものだった。 拡張識別子(というか&演算子)は予約語を識別子としてコンパイラに…