■Delphi2005日本語版トライアル
下記URLから Delphi 2005 Architect Trial(30日間) がダウンロードできます。
http://www.borland.com/products/downloads/download_delphi.html
Notes部分では、未だに英語版しかないような表記になっていますけどね。
English (French, German, Japanese coming soon).
| 固定リンク
下記URLから Delphi 2005 Architect Trial(30日間) がダウンロードできます。
http://www.borland.com/products/downloads/download_delphi.html
Notes部分では、未だに英語版しかないような表記になっていますけどね。
English (French, German, Japanese coming soon).
| 固定リンク
Delphi2005をアップデートしてから、BDEのエリアスが消えていました。他に原因が思い当たらないことから、Update1のインストール作業によるものではないかと思っています。Delphi2005のアンインストールによって、エリアスが消えることはコメントされていますが、インストールで消えるというコメントはありません。でも念のため、アップデートされる前にidapi32.cfgをバックアップされる方がいいかも知れませんね。
以前のバージョンのDelphiまたはC++Builderがインストールされている場合のDelphi 2005のアンインストールに関する既知の問題
| 固定リンク
全言語対応のDelphi2005Pro版Update1(24.5MB)がようやく公開されましたので、早速ダウンロードして、インストールしてみました。
Borland JapanのDelphi2005アップデート1の適用手順により、作業したつもりですが、当初、InstallフォルダをDisk1、Disk2と分けて作成していたため、エラーが発生してしまいました。最終的には、フォルダを移動させて作業し、Delphi2005のバージョン情報で「Update1」の文字を確認して、無事アップデートが終了しました。
みなさんは、私のような間違いはされないと思いますが、アップデート適用手順にある通り、Disk1のInstallフォルダにあるものとDisk2のInstallフォルダにあるものを一つのInstallフォルダにコピーしなきゃいけないです。ご注意を・・・。
| 固定リンク
Windowsフォームアプリケーションで、BDP.NET を使って InterBase のデータベースをマスター/詳細に設定し、フォーム上の2つのDataGridに表示させて見ました。
(試行錯誤した結果なので、この方法が正しいかどうかは疑問ですので、ご注意を・・・。)
1.BdpConnection1 を配置します。
次に、オブジェクトインスペクタ下部の接続エディタをクリックしてデータベースを
設定します。
2.BdpDataAdapter1 を配置します。
a) オブジェクトインスペクタ下部のデータアダプタの設定をクリックします。
b) テーブル一覧からマスターテーブルに該当するものを選択します。
c) SQL生成ボタンを押します。
d) データセットタブに移動して、データセットの新規作成を選択し、
OKボタンを押します。
e) BdpDataAdapter1 の Active を True にして False にします。
※この動作により dataSet1 の Tables 内に、このテーブルが追加されます。
※これをしないでリレーションを設定しようとすると
「リレーションを追加する前に、データセットにテーブルが必要です。」
とエラーメッセージが表示されます。
3.BdpDataAdapter2を配置します。
a) オブジェクトインスペクタ下部のデータアダプタの設定をクリックします。
b) テーブル一覧から詳細テーブルに該当するものを選択します。
c) SQL生成ボタンを押します。
d) データセットタブに移動して、既存のデータセットを選択し、OKボタンを押します。
※このとき BdpDataAdapter1 で作成したデータセットと同じものを選択します。
e) BdpDataAdapter2 の Active を True にして False とします。
4.自動的に作成された dataSet1 の設定
a) Relations のボタンをクリックします。
b) 追加ボタンを押します。
c) 親テーブルにマスター、子テーブルに詳細テーブルが表示されていることを
確認して、キー列と外部キー列で該当するフィールドを選択します。
※名前は、デフォルトのリレーション1のままで問題なかったです。
d) OKボタンを押してから、閉じます。
※BdpDataAdapterがOpenされていてもこの作業によりCloseされます。
5.DataGrid を2つフォームに配置します。
a) DataGrid1 の DataSource を DataTable1 とします。
b) DataGrid1 の AllowNavigation を False とします。
※これは必要ありませんが、マスター側で詳細が参照できてややこしいから。
c) DataGrid2 の DataSource を DataTable1 とします。
d) DataGrid2 の DataMember を リレーション1 とします。
6.BdpDataAdapter1、BdpDataAdapter2 の Active を True にして、実行します。
一応、マスター/詳細になっています。
(くどいですが、この方法が正解かどうかは不明です。)
DBExpress の時もマスター/詳細の設定がわからなくて、FDelphiで教えて頂いたことを思い出しました。
Helpを、もう少し親切に作ってくれたらなぁ~。
| 固定リンク
中村拓男氏が、Delphi 2005のライセンスについて「指名ユーザー使用権」であることを Borland に確認して下さいました。このライセンスは、指名ユーザーが使用することを前提に適正な数のコンピューターにインストールすることができるというものです。これで毎日ノートパソコンを持って帰らなくてもプログラムできます。よかった、よかった。
この記事は、下記を読んで書いています。
Delphiメーリングリスト
[Delphi:84642] Delphi 2005のライセンスについて
| 固定リンク
DBGridのカラムのButtonStyleをcbsEllipsisに設定しているときに、このカラムをダブルクリックするとOnEditButtonClickイベントが動作してしまいます。
これだと直接DBGridで編集したいときに不便なので、次のように処理しました。
(Win32でもVCLフォームアプリケーションでも使えます。)
procedure TForm1.DBGrid1DblClick(Sender: TObject);
begin
//空のイベントを割り当てるだけ
end;
話は変わりますが、Delphi2005 Pro版の日本語対応アップデート1は、まだ公開されませんね。
もう1ヶ月程経つのに・・・。先日アップデートのページが更新されていたので、少し期待したのですが、InterBaseのアップデートと英語版のダウンロードが2行になっていただけでした。(笑)
公開されているファイルのサイズも少し疑問ですね。
全言語対応のArchitect 24MB、Enterprise 23MBなのに、英語版のProfessional 24.6MBとなってます。
Pro版の方がたくさん修正があるのかな??
| 固定リンク
unit WinForm; interface uses System.Drawing, System.Collections, System.ComponentModel, System.Windows.Forms, System.Data, System.Runtime.InteropServices, System.Text; type TextBoxEx = class; TWinForm = class(System.Windows.Forms.Form) {$REGION 'デザイナ管理コード'} strict private ////// 必要なデザイナ変数です。 /// Components: System.ComponentModel.Container; ////// デザイナサポートに必要なメソッドです。 /// このメソッドの内容をコードエディタで変更しないでください。 /// procedure InitializeComponent; {$ENDREGION} strict protected ////// 使用されているリソースの後処理を実行します。 /// procedure Dispose(Disposing: Boolean); override; private TextBox1: TextBox; TextBoxEx1: TextBoxEx; procedure OnCompositionStr(Sender: TObject; Value: String); public constructor Create; end; TCompositionStrEvent = procedure (Sender: TObject; Value: String) of Object; TextBoxEx = class(TextBox) private FOnCompositionStr: TCompositionStrEvent; strict protected procedure WndProc(var M: Message); override; published property OnCompositionStr: TCompositionStrEvent read FOnCompositionStr write FOnCompositionStr; end; [assembly: RuntimeRequiredAttribute(TypeOf(TWinForm))] implementation {$AUTOBOX ON} {$REGION 'Windows フォームデザイナが生成したコード'} ////// デザイナサポートに必要なメソッドです。 /// このメソッドの内容をコードエディタで変更しないでください。 /// procedure TWinForm.InitializeComponent; begin // // TWinForm // Self.AutoScaleBaseSize := System.Drawing.Size.Create(5, 12); Self.ClientSize := System.Drawing.Size.Create(292, 266); Self.Name := 'TWinForm'; Self.Text := 'WinForm'; end; {$ENDREGION} type HIMC = Integer; const GCS_RESULTREADSTR = $0200; WM_IME_COMPOSITION = $010F; [DllImport('Imm32.dll')] function ImmGetContext(hWnd: IntPtr): HIMC; external; [DllImport('Imm32.dll')] function ImmGetCompositionString(hImc: HIMC; dWord1: Integer; lpBuf: StringBuilder; dwBufLen: Integer): Longint; external; [DllImport('Imm32.dll')] function ImmReleaseContext(hWnd: IntPtr; hImc: HIMC): Boolean; external; procedure TextBoxEx.WndProc(var M: Message); var Imc: HIMC; Len: Longint; Str: StringBuilder; Temp1, Temp2: array of Byte; begin if Assigned(FOnCompositionStr) and (M.Msg = WM_IME_COMPOSITION) and ((Integer(M.LParam) and GCS_RESULTREADSTR) <> 0) then begin Imc := ImmGetContext(Self.Handle); Len := ImmGetCompositionString(Imc, GCS_RESULTREADSTR, nil, 0); Str := StringBuilder.Create(Len); ImmGetCompositionString(Imc, GCS_RESULTREADSTR, Str, Str.Capacity); ImmReleaseContext(Self.Handle, Imc); Temp1 := System.Text.Encoding.Default.GetBytes(Str.ToString); SetLength(Temp2, Len); System.Array.Copy(Temp1, 0, Temp2, 0, Len); FOnCompositionStr(Self, System.Text.Encoding.Default.GetString(Temp2)); end; inherited WndProc(M); end; procedure TWinForm.Dispose(Disposing: Boolean); begin if Disposing then begin if Components <> nil then Components.Dispose(); end; inherited Dispose(Disposing); end; constructor TWinForm.Create; begin inherited Create; // // Windows Form デザイナのサポートに必要です。 // InitializeComponent; // // TODO: InitializeComponent 呼び出しの後のコンストラクタコードを追加 // { EditEx1の生成 } TextBoxEx1 := TextBoxEx.Create; TextBoxEx1.Parent := Self; TextBoxEx1.Top := 10; TextBoxEx1.Left := 10; TextBoxEx1.Text := 'ここに入力して!'; TextBoxEx1.OnCompositionStr := OnCompositionStr; { Edit1の生成 } TextBox1 := TextBox.Create; TextBox1.Parent := Self; TextBox1.Name := 'Edit1'; TextBox1.Top := 40; TextBox1.Left := 10; TextBox1.Text := ''; end; procedure TWinForm.OnCompositionStr(Sender: TObject; Value: String); begin TextBox1.Text := TextBox1.Text + Value; end; end.
| 固定リンク
unit unit1; interface uses Windows, Messages, SysUtils, variants, classes, Graphics, Controls, Forms, Dialogs, System.Runtime.InteropServices, System.Text, Borland.Vcl.WinUtils, System.ComponentModel, Borland.Vcl.StdCtrls; type TCompositionStrEvent = procedure (Sender: TObject; Value: String) of Object; TEditEx = class(TEdit) private FOnCompositionStr: TCompositionStrEvent; protected procedure WndProc(var Message: TMessage); override; published property OnCompositionStr: TCompositionStrEvent read FOnCompositionStr write FOnCompositionStr; end; TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private Edit1: TEdit; EditEx1: TEditEx; procedure OnCompositionStr(Sender: TObject; Value: String); end; var Form1: TForm1; implementation {$R *.nfm} { Borland.Vcl.Imm の ImmGetCompositionStringを使うとWindows XPの場合、 戻り値が2倍になるため、Borland.Vcl.Immを使わず、ここで定義しておく。 たぶんCharSetの指定が原因だと思われる。} type HIMC = Integer; const GCS_RESULTREADSTR = $0200; [DllImport('Imm32.dll')] function ImmGetContext(hWnd: HWND): HIMC; external; [DllImport('Imm32.dll')] function ImmGetCompositionString(hImc: HIMC; dWord1: DWORD; lpBuf: StringBuilder; dwBufLen: DWORD): Longint; external; [DllImport('Imm32.dll')] function ImmReleaseContext(hWnd: HWND; hImc: HIMC): Boolean; external; procedure TEditEx.WndProc(var Message: TMessage); var Imc: HIMC; Len: Longint; Str: StringBuilder; Temp1, Temp2: array of Byte; begin if Assigned(FOnCompositionStr) and (Message.Msg = WM_IME_COMPOSITION) and ((Message.LParam and GCS_RESULTREADSTR) <> 0) then begin Imc := ImmGetContext(Self.Handle); Len := ImmGetCompositionString(Imc, GCS_RESULTREADSTR, nil, 0); Str := StringBuilder.Create(Len); ImmGetCompositionString(Imc, GCS_RESULTREADSTR, Str, Str.Capacity); ImmReleaseContext(Self.Handle, Imc); Temp1 := System.Text.Encoding.Default.GetBytes(Str.ToString); SetLength(Temp2, Len); System.Array.Copy(Temp1, 0, Temp2, 0, Len); FOnCompositionStr(Self, System.Text.Encoding.Default.GetString(Temp2)); end; inherited WndProc(Message); end; procedure TForm1.FormCreate(Sender: TObject); begin { EditEx1の生成 } EditEx1 := TEditEx.Create(Self); EditEx1.Parent := Self; EditEx1.Top := 10; EditEx1.Left := 10; EditEx1.Text := 'ここに入力して!'; EditEx1.OnCompositionStr := OnCompositionStr; { Edit1の生成 } Edit1 := TEdit.Create(Self); Edit1.Parent := Self; Edit1.Top := 40; Edit1.Left := 10; Edit1.Text := ''; end; procedure TForm1.OnCompositionStr(Sender: TObject; Value: String); begin Edit1.Text := Edit1.Text + Value; end; end.
| 固定リンク
せっかくの休みなので、Delphi2005を使って既存のプロジェクトを置き換える作業をしてみました。
内容は、Delphi7で作ったDBExpressを使ったプログラムをDelphi for .NETに置き換えるというものです。
まず、 DataSet.FieldValues['FIELD1'] := ''; という部分が
[エラー] DataModuleMain.pas(467): E2010 'Variant' と 'string' には互換性がありません
というエラーになったので、 FieldByName で置き換えました。
この作業中、IDE のエディタの動作がとても重たくなってきたので、パソコンを再起動させて再度作業しました。始めは快適に作業ができましたが、次第に動きが鈍くなり、カーソルの移動を待つ時間が非常に長くなりました。そして再び再起動・・・やはり時間とともにカーソルの反応が悪くなります。支援機能のチェックをすべて外して作業してもやはり同じ状態です。こんなに遅くては、プログラムなんて作る気になれないですね。未だ公開されていないUpdate1(私のはpro版だから)を当てると少しはましになるのかな??ちなみに私のマシンは、Windows XP SP2 、Celeron2.2GHz Mem752MBです。今日は、最後まで作業できずに止めてしまったので、プログラムの動作確認はできませんでした。
| 固定リンク