Delphi

LiveBindings 覚え書き

Live BindingsのサンプルとかがDBとの連携ばっかりで、自作Classとの連携とかのがあんま無かったので調べた事の覚え書きフォームにTEdit2個とTCheckBox1個。TButtonを2個配置する。後は、TPrototypeBindSourceを1個配置。 データを保持するクラスとしてTUser…

接続情報の確認

TFDConnection 接続エディタの情報タブに表示される情報。開発環境なら、TFDConnectionを配置すれば確認出来るんですが、実行環境でも確認出来ないかと調べて見た所 TFDConnection.GetInfoReport で同じ情報が取得出来るようです。 FormにTButtonとTMemoを配…

Debug時のエラー

Delphiでプログラムを書いていざデバッグ実行を実行すると、ntdll.dllがどうのってエラーでIDEから落ちちゃってデバッグ不能って事態になったとき、レジストリエディタを起動して DelphiXE8の場合 HKEY_CURRENT_USER\Software\Embarcadero\BDS\16.0\Debuggin…

GetItについて

久々の更新。XE8に追加されたパッケージ管理ツールのGetIt。ワンタッチでパッケージのインストール/アンインストールが出来る中々便利なツールです。 起動してみると判りますが、Delphi用とC++Builder用のそれぞれのパッケージが並んでいるので同じ名前のパ…

SQLiteのDBファイル作成

ちょっと調べたので、忘れた時にまたはまらないようにメモ。 XE3からSQLiteに対応したわけですが、DBファイルを作成する方法がコマンドラインで作る意外にないのかなと調べました。ここに説明がありますが、SQLConnectionのパラメータでFailIfMissingにFalse…

SelectDirectory と特殊フォルダ

タイムラインに「SelectDirectoryでルートをデスクトップからコンピュータに変更したい」ってのが流れてきたので調べた事のメモ。SelectDirectoryは内部でSHBrowseForFolderを呼んでる。SHBrowseForFolderのルートの指定は、BROWSEINFO構造体のpidlRootに値…

イベントの再入防止

どこかにTipsとかでありそうなネタだけど。 イベントに入ってきた所で最初にイベントに対してnilを代入する。 処理が終わったらイベントにメソッドを設定し直す。 procedure TForm1.Button1Click(Sender: TObject); begin TControl(Sender).OnClick := Nil; …

TreeView項目のD&D移動

こちらの掲示板の話題です。使用するイベントは、TreeViewのOnDragDrop,OnDragOver,OnMouseDown,OnStartDragの4つです。 usesにWinapi.CommCtrl(XE以前の場合はCommCtrl)を追加。項目の移動先が下記のように表示されます。移動先の表示はTVM_SETINSERTMARK…

Unicode版TEditor の上書きモードの処理修正

Unicode版のTEditor 利用させてもらってるんですが、先日上書きモードで編集してるときに文字が余分に上書きされると報告があがって来ました。とりあえずの修正でまともに動くようになったようなのでメモ。HEditor.pasのTEditor.PutStringToLineメソッドで、…

TZipFile に BZip2 サポートを追加する

前の記事で書きましたがTZipFileは圧縮方法として0(store)と8(deflate)のみサポートしていますが、後から追加することが可能になっています。そこで、BZip2のサポートを追加してみました。 内容としては、System.ZLibを元にBZip2のメソッドを呼ぶように修正…

バージョン情報の問題 その2

前回は自前のリソーススクリプトをプロジェクトに追加して問題を回避する方法をとりましたが、その後根本的に対策するにはMSBuildのカスタムタスクを作成してタスク「CreateRcFile」を置き換えてしまうのが一番かなと言う事を考えてまして一応形になったぽい…

バージョン情報の問題

フォーラムの話ですが、現状のDelphiXE2で作成される実行ファイルのバージョンリソース等が英語リソースになってしまうという話です。とりあえずの回避策として、自前のリソーススクリプトをプロジェクトに追加すれば日本語リソースを追加することが出来ます…

64bitプログラムからのmdbへのアクセス

64bitプロセスからのmdbへのアクセスが可能なのか気になってたので調べてみました。 まずは、64bit版Office又はMicrosoft Access データベース エンジン 2010 再頒布可能コンポーネントの64bit版をインストールします。後は、OLEDBプロバイダでMicrosoft.ACE…

System.Zip を使ってみる

Rad Studio XE2が出ましたね。さっそくいろいろ触ってみたのですが、新たに追加されたZipサポートのSystem.Zipユニットヘルプが全くありません。 特にヘルプ無くても困らなそうですが、軽く触ってみたのでメモ。使うにはusesにSystem.Zipを追加します。使用…

cxGrid でマウス下のセルを取得する

TcxCustomGridViewまたは、TcxCustomGridViewInfoのGetHitTestメソッドを使用します。 例として、TableViewのOnMouseMoveでマウス下のセルの情報を取得してみます。 procedure TForm1.cxGrid1TableView1MouseMove(Sender: TObject; Shift: TShiftState; X, Y…

Virtual Listview とWindows7/Vista

結構前のDelphiMLでの話です。 どうも、この辺りを見るとVista以降でVirutal Listviewを使用するとLVM_GETITEMPOSITIONで返ってくる値が正しくない値になってしまうようです。 なので、TListItemのTopとかLeftの値が使えないんですね。LVM_GETITEMRECTで取得…

TStreamReader とShiftJISデータ

結構なサイズのテキストデータ(ShiftJIS)の分割をする必要が出たので何か良い方法は無いかとヘルプを見ててTStreamReaderを見つけました。 早速TStreamReaderを使って分割をするプログラムを作ったんですが、出来上がったファイルを確認すると途中にNULL値…

IMessageFilterを使う

AutoCAD2012を外部からコントロールして自動処理するプログラムを作成してて遭遇したんですが、不定期なタイミングでRPC_E_CALL_REJECTEDが発生するんです。 調べて見るとAutoCAD2010のSP1かな?辺りから発生するようになっているようで、IMessageFilter(CO…

Indy で添付ファイル付きのメールを送る

Indyを使って添付ファイル付きのメールを送る方法をメモ。基本的な部分はDEKOさんの所で説明されてる方法そのままです。 ただ、その中でContentTypeを指定している部分を削除して指定しないようにするか、または'multipart/mixed'を指定するだけです。 後は…

項目のD&D移動時の移動位置表示 (TabControl/PageControl)

今回は TabControl/PageControl のD&Dでのタブ移動の処理です。余りよろしくない方法な気もしますが。まずは、TabControlでもPageControlでも同じイベント処理が使えるように、またPageControlでタブの移動が出来るようにTCustomTabControlに対するヘルパー…

項目のD&D移動時の移動位置表示 (リストボックス)

なんと無くメモ。リストボックス等の項目をD&Dで移動出来るようにした場合の項目の移動先を表示する処理。リストボックスの場合。FPrevIdxはフォーム変数です。 // OnStartDragイベント FPrevIdxを初期化する procedure TForm1.ListBox1StartDrag(Sender: TO…

バージョン情報を取得する(RTTI使ってみた)

バージョン情報を取得する処理を書いてみました。 RTTIを使う為に バージョン情報を保持するクラスを作ってます。 RTTIはフィールドというかプロパティに対するアクセスしかしてませんが、中々面白いですね。プロパティへのアクセスをループで回せるので処理…

PopupModeプロパティの動作の謎

FormのプロパティにPopupModeというプロパティがあります。このプロパティは複数のFormのZオーダーの管理に影響を与えるプロパティらしいのですがいまいち良く判りません。Form1(MainForm)とForm2があったとして、Form1のFormStyleがfsStayOnTopの時、Form…

日付関係の関数

昨日のエントリで曜日とか祝日の判定処理を作ってる時に気がついたのでメモ。日付関係の判定処理で似たような名前の微妙に処理が違う関数がある模様。 NthDayOfWeekとWeekOfTheMonth NthDayOfWeekは引数で渡した日が月で何番目の曜日かを返して、WeekOfTheMo…

TAdvSmoothCalendarを使ってみる

RadStudioXE シリーズを持ってる人はダウンロード出来るTMS SoftwareのTMS Smooth Controls。 こちらからダウンロード出来まるようです。最新版は4.0です。フリーダウンロードで貰えるのは3.7.2.0までは確認しました。このコンポーネントセット、見た目が派…

Windows7とDelphiとImeMode

こちらの掲示板での質問なんですが、Delphi2009のアプリをWindows7で動かすとImeModeをimDisableにしたEditコントロールにフォーカスが移動しても見た目が変わらないんですね。動作としてはちゃんとIMEが無効になってるんですけども。下の図のようにIMEを有…

TStringListのOwnsObjectsプロパティ

最近本格的にDelphi2009を使い始めて気がついたんですが、TStringListにOwnsObjectsプロパティが追加されてますね。これをTrueに設定しておくと、Objectsプロパティに代入したTObjectを継承したオブジェクトは関連付けられたアイテムが破棄されるときに一緒…

Developer Expressのパッケージ名

先日あった事なんですがRad Studio2009への移行作業の中で、私のPCでビルドしたバイナリが同じくDelphi2009を入れてDeveloper Expressのパッケージを入れてる他の人のPCでパッケージが無いとエラーが出て動かないという状態になりました。調べて見るとDevelo…

TIBInputDelimitedFileのバグ

Firebird-jp-general MLであったこの話です。IBSQL.BatchInputで日本語が化けるって話だったので調べて見た所。 TIBInputDelimitedFile.GetColumnの中で function TIBInputDelimitedFile.GetColumn(var Col: string): Integer; var c: Char; BytesRead: Inte…

DelphiでAutoCAD その2

前回の記事でObjectARX側の処理を書きました。今回はDelphi側の処理を書きます。まずは、前回のARX内のコマンド登録関数の定義。 function CommandRegister(Group, Cmd: PChar; const CmdFlags: Integer; Func: CMDFUNC): Boolean; stdcall; external ARX名;…