タグ

ブックマーク / lyna.hateblo.jp (5)

  • ジェネリクスを使って少しだけ手軽に列挙型の値を文字列に変換する。 - Swanman's Horizon

    これとは関係ないネタを書いてたんだけど、全然まとまりそうにないのでわりとどうでもいいネタでお茶を濁す。 列挙型を文字列に 例えば列挙型の値をiniファイルなどに保存したい場合、Ordで整数値を取り出す、Integerでキャストする、という選択肢のほかに、列挙型をそのまま文字列化するという方法があります。 古くからあるRTTIを利用する方法で、コードとしてはこんな感じのものです。 S := GetEnumName(TypeInfo(TAlign), Integer(alTop)); // S => 'alTop' 型名が必要なんですって この方法は型名を書かなくてはいけないだけでなく、RTTIを取り出すためのTypeInfoやIntegerによるキャストも毎回毎回書かなくてはならず、結構面倒です。 (個人的にはそこまで面倒だと思ったことはないですが、ここは面倒という方向でひとつ…) そこで、

    ジェネリクスを使って少しだけ手軽に列挙型の値を文字列に変換する。 - Swanman's Horizon
  • TMessageManagerってこんなの。 - Swanman's Horizon

    あっとうてきなどきゅめんとぶそく\(^o^)/ TMessageManagerとはなんぞや TMessageManagerは、FMX.Messagesユニット内にある200行足らずの小さなクラスで、FireMonkey内における簡単なメッセージング機構を提供しているようです(推測) 使い方は簡単で、 TMessageクラスを継承したメッセージクラスを作る TMessageManager.DefaultManager.SubscribeToMessageでハンドラを登録 TMessageManager.DefaultManager.SendMessageでメッセージを送る といった感じです。 1.TMessageを継承したメッセージクラスを作る TMessage自体は「TMessage = class abstract end;」だけの中身の無いクラスです。 単純にタイミングだけを伝えたい場

    TMessageManagerってこんなの。 - Swanman's Horizon
  • 未確認で16進数。 - Swanman's Horizon

    うまく言えないのでインストールして確認してください╭( ・ㅂ・)و ダウンロード 16進数表示プラグイン for Delphi ver.1.0 をダウンロード これは何? 設計時に定数の識別子上にマウスカーソルを置くとツールチップが出ますよね*1。これ、昔はその定数が宣言されたユニット等を表示する程度の役に立たない内容だったのが、いつからか定数値そのものが表示されるようになってちょっとだけ便利になりました。 でも数値の場合10進数でしか表示されないんです、10進数。ここはやっぱり16進数で見たい!むしろ16進数がいい!おい聞いてんのかえんb という少々アレな方(=僕)のために10進数と16進数を併記するプラグインです。 今回はソース付き! 最初はソース内に直接パッチを当てるアドレスが書かれてるようなバージョン依存しまくりの実装だったり、その後そのアドレスをロード時に力技で検索する実装だった

    未確認で16進数。 - Swanman's Horizon
  • スマートポインタ、使ってる? - Swanman's Horizon

    使ってません(でした) 僕自身も2009年頃に匿名メソッド使ってスマートポインタ作れるよ的な記事を書いてましたが、ぶっちゃけ使ってませんでした。 というのも、こちらの実装を見てもらうと分かるんですが、書くのが面倒だったんですね。 後述のクラス等と合わせるためにリンク先とはクラス名は違いますが、 procedure Test1; var sl: TFunc<TStringList>; begin sl := TAuto<TStringList>.Create(TStringList.Create); // TStringListを2回書かないといけない! sl.Add('hogehoge'); end; こんな感じでやたら長くなるので、それだったら別にtry-finally書いちゃうかなと思ってました。 使い始めました(実装1) で、ある時「そういえばDelphiの(超限定的な)型推論使うと

    スマートポインタ、使ってる? - Swanman's Horizon
  • UIImageWriteToSavedPhotosAlbumを呼んでコールバックしてもらう。 - Swanman's Horizon

    正攻法だと呼んでもらえないという話があったので、さくっと要点だけ。テスト環境はXE4です。 原因はRTLのバグ バグです。Macapi.ObjectiveCユニットのMangleType関数がおかしいです。 来は色々と用意さえすれば、(TOCLocalを継承したクラスなら)自身の登録からメソッドの登録までRTLが勝手にやってくれるんですが、バグってるのであてにできません。なので自前でやればOKです。 自前でメソッドを登録する まずTOCLocalを継承したクラスを作ります。ぶっちゃけ継承していればどうなっててもいいです。TOCLocalを継承しない方法もありますが、それはまたいつか。 次に登録するメソッドを作ります。作りますが、このクラスのメソッドにはしません。 詳細は省きますが、Delphiのメソッドに暗黙の第一引数Selfがあるように、Objective-Cのメソッドにも暗黙の引数が

    UIImageWriteToSavedPhotosAlbumを呼んでコールバックしてもらう。 - Swanman's Horizon
  • 1