Delphi

Delphiでインターフェースを使う

久々にDelphiを少し触ってました。かなり忘れてる。 Delphiのインターフェースを使って2つの実装クラスを作り、実行時にどちらのクラスを使うか決定してる。 試したバージョンはDelphi XE4。 Main.dpr program Main; {$APPTYPE CONSOLE} uses System.Classes…

第28回エンバカデロ・デベロッパーキャンプのLTでSpring4Dの話をしました

Spring4Dの紹介 from Shinya Okano

Delphi XE4でWinsockを使ってみる

以前Delphi2009で書いてた。 DelphiでWinsockを使ってサーバを書いてみる - 偏った言語信者の垂れ流し 以前書いたのと比べて、XE4でusesのパッケージが変わったのと、AnsiStringを使わずにTBytesを使うように変更してみた。 TBytesよりPByte(ポインタ)のほう…

Delphiで無名スレッド

Delphiで無名スレッドを使ってみる。試したのはDelphiXE4。 anonymous_thread.dpr program anonymous_thread; {$APPTYPE CONSOLE} uses System.SysUtils , System.Classes ; var Thread: TThread; begin // スレッドオブジェクトを生成 Thread := TThread.Cr…

Delphi XE4のFMXを使った際のWindows/MacOSXでの見た目の違い

XE4になってからまだ試してなかったので、少し試した。 StyleBookはTransparent.styleを適用している状態 Windows7 TMemoコンポーネントでGoogleIMEだと表示位置がおかしい?かも。表示されなくなる場合もある。 それ以外はぱっと見問題無さそう。 MacOSX(10…

DelphiでDLLとdylibを動的にロードする

DelphiからDLLを動的にロードする場合、WindowsではLoadLibraryとGetProcAddressを使っていましたが、MacOSXのdylibではどうすればいいのか調べてました。 MacOSX(Posix)だとdlopen, dlsymを使うことになるらしいです。 dlopen(3) Mac OS X Developer Tools …

Delphiのレコードヘルパを試す

レコードヘルパはInteger型やString型などにメソッドを追加する機能。 試したのはDelphiXE4。2010以降の機能なのかな。 test_my_record_helper.dpr program test_my_record_helper; {$APPTYPE CONSOLE} type TMyIntegerHelper = record helper for Integer f…

Delphi XE4での変更点を試す

Delphi XE4が先日発売されましたね。私はiOSアドオンなしでXE3からアップグレードしました。 XE3を購入したときのポイントが余ってたおかげで、SEshopで1,200円程度で購入できました。 iOS対応を除くと、機能追加はほとんどないのですが、リリースノートに載…

DelphiでかんたんiOSアプリプログラミング

査読に参加したということで、細川さん(@pik)の著書「DelphiでかんたんiOSアプリプログラミング」を一冊いただきました。 CUTT System:C++/Delphiでかんたん iOSアプリプログラミング 先日のエンバカデロ・デベロッパーキャンプでは先行販売されていて、一時…

TInterfacedObjectとinterfaceを使ってオブジェクトを自動的に開放する(2)

前回の続き。 TInterfacedObjectとinterfaceを使ってオブジェクトを自動的に開放する - 偏った言語信者の垂れ流し 自動的に開放されるオブジェクトでプロパティを使ってみる。 interfaced_object.dpr program interfaced_object_property; {$APPTYPE CONSOLE…

TInterfacedObjectとinterfaceを使ってオブジェクトを自動的に開放する

メモ。TInterfacedObjectとinterfaceの使い方。 TInterfacedObjectを継承し、interfaceで参照している場合、参照カウント方式で自動的にオブジェクトは開放される。 試したDelphiのバージョンはXE3。 interfaced_object.dpr program interfaced_object; {$AP…

Delphiでコマンドライン引数をパースするユニットを作ってみた

以前コマンドライン引数の取得について書いたとき、FindCmdLineSwitchという関数があることを教えてもらった。 Delphiでコマンドライン引数を取得する - 偏った言語信者の垂れ流し System.SysUtils.FindCmdLineSwitch - XE3 API Documentation 試してみたの…

DelphiのコードをFree Pascal Compilerでコンパイルする

Free Pascalが最近どうなってるのかなーと思って試してました。 Free Pascal - Advanced open source Pascal compiler for Pascal and Object Pascal - Home Page 先日作成したファイル分割のプログラムをFree Pascal Compiler(FPC)でコンパイルしようとしま…

ファイルを指定したサイズで分割する

ファイルを指定したサイズで分割するコンソールアプリケーションをDelphiで作ってみました。 DelphiのバージョンはXE3。 ソースコードはBitbucketに置いてます。 tokibito / filesplit — Bitbucket ファイル分割は、ファイル内容のコピー先を複数にすること…

巨大なダミーファイルを作成する(Delphi Advent Calendar 2012-12-16)

この記事は、 Delphi Advent Calendar 2012 の16日目のものです。 巨大なファイルの作成に時間がかかる場合、途中で他のプログラムの動作によってディスク容量が足りなくなることがたまにあります。 出力されるファイルのサイズが予めわかっている場合は、そ…

Delphiのプログラムをmakeでビルドする(Delphi Advent Calendar 2012-12-02)

この記事は、 Delphi Advent Calendar 2012 の2日目のものです。 Delphiで作成したプログラムをビルドする場合、IDEから行うのが一般的だと思いますが、今回は私がよく使っているMakefile(makeコマンド)でビルドする手順を紹介します。 DelphiXE3で試しまし…

TFileStreamを使ってファイルを読み込む

System.Classes.TFileStreamを使ってファイルを読み込むのを、DelphiXE3で試しました。 かなり昔から使い方は変わってないですね。 簡単な例として16進ダンプを作ってみました。 hexdump.dpr program hexdump; {$APPTYPE CONSOLE} uses System.SysUtils , Sy…

Jenkinsでビルドしてみる

メモ。 Jenkinsでテスト結果を集計するため、自前で作ったテストフレームワークにJUnit形式のXMLレポートを出力する機能を追加してみた。 tokibito / delphi-unittest — Bitbucket Mercurialのリポジトリなので、JenkinsにMercurial Pluginをインストールし…

DelphiXE3でTRttiContextを使ってテストフレームワークを作ってみる

前に使ってたバージョンがDelphi2009なのでTRttiContextを使うのはこれが初めて。 TRttiContextを使ってメソッド名の取得や取得したメソッドの実行ができるので、xUnit(DUnitとか)なテストフレームワークを作ってみました。 "Test"という名前で始まるメソッ…

DUnitでユニットテストを作成する

DelphiにはDUnitが含まれていて、ユニットテストを作成するのに使える。 以前使ったことはあるけど、書いていなかったので書いとく。 DelphiXE3で試した。 テストプロジェクトを作成する テストを実行するテストランナーは、ビルドして実行ファイルの状態で…

DelphiでHTTPS経由でファイルをダウンロードする

Indyコンポーネントのおさらい。DelphiでHTTPS経由でファイルをダウンロードする。 HTTPS経由だとIOHandlerをSSL対応のものを指定しないといけない。 idhttp_test.dpr program idhttp_test; {$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, System.Cla…

DelphiでTJSONObjectクラスを使ってJSONデータを扱う

比較的最近増えたクラスなのかな。Delphi XE3でJSONデータを扱うにはusesにData.DBXPlatformとData.DBXJSONを追加して、TJSONObjectクラスを使えばいいらしい。 json_test.dpr program json_test; {$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, Data…

MacOSXでDelphiからCocoaを使う

Delphiから直接CocoaのAPIを使えるようなので試してみた。 DelphiXE3でターゲットをOSXにしてコンパイル。動作させた環境はMacOSX 10.6。 cocoa_test.dpr CocoaのNSURL、NSDataを使ってWeb上のファイルをダウンロードして保存するだけの簡単なコンソールアプ…

Delphiでコマンドライン引数を取得する

メモ。しばらく使ってなくて忘れてる。 Delphiでコマンドライン引数を取得する方法。 ParamStr関数を使う。引数の数の取得はParamCount関数。 インデックス0は実行ファイルのパス。1からがパラメータになる。 DelphiXE3で試した。 Win32, Win64, OSX32で動作…

指定したURLをデフォルトのウェブブラウザで開く

Delphi XE3、FireMonkeyアプリケーションで指定したURLをデフォルトのウェブブラウザで開くには。 WindowsだとShellAPI.ShellExecuteを使えばいいんだけど、WindowsAPIなのでこれはMacOSXでは使えない。 MacOSXだとPosixパッケージのコマンド実行(_system関…

エクスプローラーやFinderからドラッグアンドドロップされたファイルを受け入れる

エクスプローラーやFinderからドラッグアンドドロップされたファイルを受け入れる例。 FireMonkeyでもVCLでも一緒なのかな。試したバージョンはDelphiXE3。 DragOverイベントでAcceptにTrueを代入することで、ドラッグを受け入れられる。 ドロップされた際に…

DelphiXE3でリモートデバッガを試す

DelphiXE3でOSX向けのアプリケーションを開発する場合、同梱されているPAServerを使ってリモートデバッガを利用することになる。 ということで、試してみた。 手順はDEKOさんのところで詳しく解説されてる。 Delphi XE2 の新しいリモートデバッガ - PAServer…

Delphi XE3を購入したのでクロスプラットフォーム開発を試す

Delphi2009を持ってて、そろそろアップグレードかなーと思ってたので、Delphi XE3のESD版を買った。 さすがにWindowsXPでは楽しくなさそうなので、Windows7(64bit)が載ってるASUSのZENBOOKも買った。 さっそく動かしてみてる。 まだドキュメントとかは全然読…

呼出規約と引数の格納されるレジスタについて

覚書き。 Delphiでインラインアセンブラを使うときの呼出規約と引数のレジスタへの格納について。 試したのはDelphi2009。 デフォルトがfastcallなのは知ってたけど、それ以外をよく知らなかったので調べてた。 calling_convention.dpr program calling_conv…

WindowsとMacOSXとiOSで動作するDelphi XE2のFireMonkeyアプリケーション

ネタとして紹介しとかないとなーと思いつ。 Delphiの最新バージョンのXE2では、MacOSXやiOS向けのアプリケーションも作れるようになったよ、って話。 動画がYouTubeにあったので紹介。 ようやくここまで来ましたね。 Overview - Embarcadero Website FireMon…