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…

DelphiでWinsockを使ってサーバを書いてみる

ふと、思い立ってDelphiでWinsockを使ってみる。Delphi2009 echoサーバを書いてみた。 EchoServer.dpr program EchoServer; {$APPTYPE CONSOLE} uses Windows, SysUtils, Winsock; const PORT = 5000; IP = '0.0.0.0'; var wsdata: WSAData; sockServer, soc…

Delphiで作られたソフトウェアを調べる

調べ方 XN Resource Editorを使って実行ファイル(.exe)のリソース情報を調べます。(これもDelphiで作られてます) wilsonc.demon.co.uk Delphiで作られた実行ファイルは、RC Data/PACKAGEINFOのEnvironmentの値が「Delphi」となります。 RC Data/DVCLALや「T…

chromiumをDelphiアプリケーションに組み込めるdelphichromiumembedded

Delphiでブラウザコンポーネントを扱う方法は前々からいろいろ模索してて、最近見つけたよさげなものを紹介。 delphichromiumembedded(名前長い)はchromiumをアプリケーションに組み込めるというもの。 chromiumembeddedというプロジェクトのDelphi用のラッ…

restructuredtext用のエディタを作ってみた

少し前に作って放置してた。使ってみたければどうぞ。Windows専用です。 tokibito / rstedit / Downloads — Bitbucket 追記 Vista、Windows7ではIEコンポーネント関連の問題で動かないようです。やっかいな問題なので、解決策見つかるまでは放置です。すみま…

Delphiはコンポーネントが命

Delphiはコンポーネントがいっぱいあるところがいいよねぇ。 再利用しまくりですわ。 でもこれがなかったらDelphiって・・・となるのがな。

python4delphiの配布時のファイルとPYTHONPATH

Python自体をインストールせずに動かそうとしてはまったのでメモ。Python2.6.5(Windows x86)の場合。 msvcr90.dllとmanifest python26.dllでVC++のランタイムが必要なので用意する。 exeファイルと同じディレクトリにファイルを置く場合、 Microsoft.VC90.CR…

Unicode SynEditのTSynMemoの不具合?メモ

http://mh-nexus.de/en/unisynedit.php Delphi2009でUnicode SynEditのSynMemoを使ってみたのだが、空ではない行の行末でエンターキーを入力した場合、キャレット位置が変わらなかった。 SynEditのコードを読んで原因特定するのが大変そうなので、とりあえず…

python4delphi (p4d)をDelphi2009で使う

p4dのIssuesには2009で動かないというのがあるんだけど、そこにパッチがあったので、試しに使ってみたら動いた。 Delphi 2009 Compatibility · Issue #4 · pyscripter/python4delphi · GitHub

DjangoでXMLを出力してDelphiから利用する

サーバサイド(Python/Django)とクライアントサイド(Delphi)のアプリケーションの連携をやってみる。 今回はゲストブックアプリのデータを、クライアントアプリから閲覧、投稿できるようにしてみる。 サーバサイドの用意 Djangoのアプリケーションは以前作成…

Delphiのデバッガにデバッグメッセージを出す

よく忘れるのでメモ。WindowsAPIのOutputDebugStringを使うとデバッガが拾ってくれる。 OutputDebugString('デバッグメッセージ');

mod_pascalのリポジトリを公開しました

mod_pascalのリポジトリを公開しました。 tokibito / mod-pascal / wiki / Home — Bitbucket Delphiに付属してた部分のソースはdiffのみ。 DownloadsのところにApache2.2用のモジュール置いた。Windowsでしか動かない。 Responseオブジェクトをなんとかスク…

mod_pascal

ネタ。 ここまでできた。日本語も使える。まあ、もうちょっとがんばる。 参考 RemObjects PascalScriptを試す - 偏った言語信者の垂れ流し DelphiでApacheのモジュールを作成する - 偏った言語信者の垂れ流し

RemObjects PascalScriptを試す

今更だけど、RemObjects PascalScriptをDelphi2009で動かしてみた。 Pascal Script | RemObjects Software これはInno Setupのスクリプトエンジンに使われてるのが有名かな。 フォームにPSScriptコンポーネントを貼りつけて、以下のコードで動かした。 unit …

make.batを改良した

メモ。Sphinxのmake.batを参考にDelphi用で使ってるmake.batをいろいろ改良した。 @echo off rem Delphi Installation Path set DELPHI=C:\Program Files\CodeGear\RAD Studio\6.0 set PROJECT_NAME=Example rem custom environment if exist "buildenv.bat"…

クラス変数とジェネリクス

先ほどのコードにジェネリクスを使ってみる。 program test2; {$APPTYPE CONSOLE} type TMyClass<T> = class public procedure Say; class var Value: T; end; var instance_int: TMyClass<Integer>; instance_str: TMyClass<String>; procedure TMyClass<T>.Say; begin // これはWr</t></string></integer></t>…

クラス変数

最近のDelphiではクラス変数が使えます。 Delphi 7以降の言語およびコンパイラの新機能 Delphi2009で試した。 program test; {$APPTYPE CONSOLE} type TMyClass = class public procedure Say; class var Message: String; end; var instance: TMyClass; pro…

Delphi2009でドラッグアンドドロップを使う

Delphi2009でドラッグアンドドロップを使う。 http://melander.dk/delphi/dragdrop だと2009がバツマークがついている。 メーリングリストで質問して教えてもらったのだけど、Development Snapshot版であれば2009にも対応している。 http://melander.dk/arti…

Delphi2010がリリースされました

Delphi2010がリリースされたようです。 Delphi® 2010とRAD Studio™製品ファミリー新バージョンが 本日、世界同時発売開始、タッチサポートも搭載 5万円弱だと2009からアップグレードするか悩む・・・。

Delphiの開発環境を標的にしたウィルス

各所で話題になってるし今更ですが、このブログにも書いておく。 W32/Induc-A Virus (Compile-A-Virus)に関するQ&A

Delphi2010のRTTI拡張に期待

Delphiでもついにリフレクションに相当するものが。 Delphi 2010: RTTI新機能を試す これは期待。