DBGridのPopupMenuで・・・。

Delphi2007で作ったDBGridから派生させた自作コンポーネントをDelphi XE2で動作確認していたところ、セルの編集時、設定したPopupMenuが表示されないことが確認されました。Delphi2007の時は、セル編集時、設定されたPopupMenuが表示されていましたが、Delphi XE2では、デフォルトのものが表示されてしまいます。


次のようなシンプルな構成でDBGridとStringGridにPopupMenuを割り当てて、Delphi2007、Delphi2009、Delphi XE2で試してみました。

Design2007




[Delphi2007] 
DBGrid、InplaceEditor共割り当てたPopupMenuが表示されています。

Delphi2007runtime


Delphi2007runtime2




[Delphi2009] 
セル編集時、デフォルトのPopupMenuが表示されてしまいます。

Delphi2009runtime


Delphi2009runtime2




[Delphi XE2] 
Delphi2009と同じく、デフォルトのPopupMenuが表示されています。

Delphixe2runtime




ということで、この動作は、Delphi2009から変わっていたようです。いつもながらスマートな方法とは言えないんですけど、下記の処理でInplaceEditorにもPopupMenuを割り当てることができました。
type
   TDummyDBG = class(TCustomDBGrid);
   TDummyCG  = class(TCustomGrid);
   TDummyCtl = class(TControl);

procedure TForm1.FormShow(Sender: TObject);
var
  Options1: TDBGridOptions;
  Options2: TGridOptions;
begin
  // DBGridの場合
  Options1 := DBGrid1.Options;
  try
    DBGrid1.Options := DBGrid1.Options + [dgEditing, dgAlwaysShowEditor];
    TDummyDBG(DBGrid1).ShowEditor;
    if Assigned(TDummyDBG(DBGrid1).InplaceEditor) then
      TDummyCtl(TDummyDBG(DBGrid1).InplaceEditor).PopupMenu := DBGrid1.PopupMenu;
  finally
    DBGrid1.Options := Options1;
  end;

  // StringGridの場合
  Options2 := StringGrid1.Options;
  try
    StringGrid1.Options := StringGrid1.Options + [goEditing, goAlwaysShowEditor];
    TDummyCG(StringGrid1).ShowEditor;
    if Assigned(TDummyCG(StringGrid1).InplaceEditor) then
      TDummyCtl(TDummyCG(StringGrid1).InplaceEditor).PopupMenu := StringGrid1.PopupMenu;
  finally
    StringGrid1.Options := Options2;
  end;
end;



Delphixe2runtimeok

|

JWWファイルの超簡易表示用コンポーネント for Delphi 2007(zipファイル)

[Delphi 2007]
今までの超簡易表示シリーズ?をコンポーネントにしたものがあったので、アップしておきますね。素人が試行錯誤の結果をまとめているものなので、(おられないとは思いますが)CAD処理の基本をこのソースで学ばないで下さい(笑)CAD作成に興味がある方は、AFSoftさんの「CAD作ろ!」をぜひご覧下さい。


AFSoft
http://afsoft.jp/index.html
左側のCADをクリックすると右側に「CAD作ろ!」のリンクが表示されます。




JWWファイルの超簡易表示用コンポーネント for Delphi 2007
「TJwwPanel.zip」をダウンロード

※JwwPanel.pasとJwwDraw.pasの2つのユニットからなります。 ※今回は、ソースが長いのでZIPファイルとしました。


このコンポーネントには、下記のユニットが必要になりますので、事前に用意して下さい。

[1] jww data read & save unit Ver1.40β

Peter's Room
http://be-sp.com/petrm/index.html
softwareのページからダウンロードできます。


[2] Delphi zlib

base2 technologies
http://www.base2ti.com/
現在のバージョンは、1.2.5です。



1.JWWファイルに同梱された画像は、「年月日-時分秒」フォルダ内に解凍します。
2.レイヤーは、レイヤ名を表示するのみです。
3.ブロックツリーも同様に名前を表示するのみで表示を切り替えません。
4.いろいろな部分がとにかく適当です。(^-^)



デザイン時(JWWPanelは、動的に作成します)

Design_2


テスト用コード
 

uses JwwPanel;

procedure TForm1.FormCreate(Sender: TObject);
var
  FileName: String;
begin
  JwwPanel1 := TJwwPanel.Create(Self);
  JwwPanel1.Parent := Self;
  JwwPanel1.Align := alClient;

  FileName := 'c:\jww\Aマンション平面例.jww';
  if FileExists(FileName) then
  begin
    JwwPanel1.FileName := FileName;
    JwwPanel1.BlockListTreeView := TreeView1;
    JwwPanel1.LayerTreeView := TreeView2;
    JwwPanel1.Active := True;
  end;
end;


実行時

Runtime_2



いくつかのファイルを試してみると、ファイルによっては、JwwUnitで、「ファイルの末尾以降を読み込みました」というエラーが表示されました。 私の場合、次のようにすることで読み込めたのですが、JWWファイルが壊れている可能性もあり、実際のところはよくわからないです。とりあえず参考までに載せておきますね。
 
1201-1215行
if JWWHd.JW_DATA_VERSION >= 700 then
begin
    // hiderin
    // Img: Integerとして宣言済み
    BlockRead(F,wd,2);
    if wd > 0 then
    begin
      Img := wd;
      BlockRead(F,wd,2);
      jwwRead_BundleImage(Img);
    end; 
    //次の2行がオリジナルです。
    // BlockRead(F,dw,4);
    // jwwRead_BundleImage(dw);
end;

|

■RAD Studio ヘルプアップデート 1

Release Notesによるとアップデートの対象は次の製品です。
・CodeGear RAD Studio 2007
・C++Builder 2007 Update 3
・Delphi 2007 for Win32 Update 3

私も早速インストールしようとしたのですが、次のようなメッセージが表示されて当初ダウンロード できませんでした。

Help

このメッセージは、私が使っている@niftyのセキュリティ24からのものです。
Delphi使いの皆さんなら惑わされることはないでしょうけど、 PCのことあまり知らない人だと「CodeGearってけしからん!」ってことになるのでしょうか(笑)
「ウィルスが発見されたため」ではなく「大きなサイズのファイルだけどいいの?」と いうメッセージを表示して頂きたいものです。
(当然ですがダウンロードしたファイルをチェックしてもウィルスは未検出でした)

あっ、肝心なヘルプの内容については、あまり確認できていません(^^;


Team Japan
CodeGearの日本人スタッフによるブログ
RAD Studio ヘルプアップデート 1 をリリースしました http://blogs.codegear.com/teamj/2007/11/16/48/

|

■RAD Studio Japanese HotFix 1

何気なくスタートメニューにあるアップデートの確認をクリックしてみたら 次のようなダイアログが表示されました。

Hotfix1_1

RAD Studio Japanese HotFix 1なんて、Delphi 2007 for Win 32 Registered User Downloadsにも公開されていないですよね。
日本語版だけsystem.pasが欠落してるの??これって、Update3用?
少し不安に感じながらも、実行させてみました。

system.pasだけが更新されたようです。

Hotfix1_2

|

■Delphi 2007 Update3 (ISO版)

ISO版も公開されているようです。
(な、なんと4.16GBもあります)

Delphi 2007 for Win 32 Registered User Downloads
Delphi 2007 for Win32 R2/Update 3 ISO


[20070920追記]
2007年9月19日付 【CodeGearニュースレター号外】によりますと、「ファイルサイズが 4GBを超えるため IE以外のブラウザをお使いください。」と注意事項がありました。4GBを超えるとIEが使えない理由がよくわかりませんが、いろいろあるんですね。

|

☆Edit1.SelTextが・・・。

以前、XPmanを貼り付ける等により、XPテーマを有効にした時には、 SelTextの値がおかしくなると書きました。 (APIの仕様変更によるものらしいですが)

Delphi2007では、XPmanを貼り付けなくても、デフォルトでテーマが有効になっています。
既存のアプリケーションをDelphi2007でコンパイルし直す時には、ご注意を・・・。
(エラーが出ないので、なかなかわかりにくい部分ですよね)

SelText部分を書き直す一例としては、下記のような処理ですね。
// XPテーマ有効時、Editで選択された文字列を返します。
function GetSelText(Edit: TEdit): String;
var
  S, Str: WideString;
  I, Start, Len: Integer;
begin
  S := WideString(Edit.Text);
  Start := Edit.SelStart + 1;
  Len := Start + Edit.SelLength -1;

  Str := '';
  for I := Start to Len do
    Str := Str + S[I];
  Result := Str;
end;

ちなみにDelphi2007の場合、XPテーマを無効にするには、メニューの
プロジェクト→アプリケーション →アプリケーションの設定 ランタイムテーマを有効にする
のチェックを外します。

|

☆Serversコンポーネントがない。

Excelの処理をしたいと思い、Serversカテゴリを探したのですが、見つかりませんでした。 インストールされていないのかなと思い、パッケージのインストールで確認してみると、未チェックのOffice2000とOfficeXPの2種類のパッケージがあったので、OfficeXPにチェックを入れてOKボタンを押しました。 これで無事使えるようになりました。

Package

|

■Delphi 2007 初めての感想

本体及びコンポーネントのインストールがようやく終わりました。
今更ながら、Delphi 2007 を使ってみた感想です。

今日一日作業していましたが、、Delphi 2006 の時のようにメモリが異常に増えて動作が遅くなることもなく、快適に使えています。

コンポーネントは、Delphi 2006 とほとんど変わっていないようですね。
ということは、Delphi 2005 で登場したDockTabSetやCategoryButtons辺りもそろそろ安定して使える頃かも知れません。 これらのコンポーネントについては、又、レポートしたいと思います。
(Delphi2005、Delphi2006で、とても新しいコンポーネントを試そうなんて気にならなかったです)

ボタン等も標準でXPスタイルになっています。
もっとも、Vista対応なので、いまさらXPスタイル云々なんて書かれても・・・って感じでしょうけど(^^;
(Vistaの環境がないので、お許しを・・・。)

あと、噂のヘルプですが、本当に使い物にならないですね。
DockTabSet1のShrinkToFitでF1キーを押すと、
 説明
 TTabSet クラスのメンバー: ShrinkToFit
だって・・・悲しすぎて笑えます。早くなんとかしてほしいです。

全体としては、Delphi 2006 とほとんど変わりませんが、動作も軽く、安定感は全く違うようです。
まあ、反対に Delphi 2006 とほとんど変わらないというのなら、このレベルにしてから販売すべきだと言いたいですけどね。

今まで、仕事上で文字列の加工が必要になったときとか、ちょっとしたプログラムはDelphi7で作っていましたが、今後は Delphi 2007 が活躍することになりそうです。

|

■Delphi 2007 届きました。

会社から帰ると Delphi 2007 for Win32 が届いていました。

早速インストール&アップデートして、もうこんな時間になってしまいました。(現在、午前3時30分)
明日、会社に遅刻するといけないので、コンポーネントのインストールは、また今度にします。
ということで後れ馳せながら、ようやくDelphi 2007使いの仲間入りです。

これからの記事は、Delphi 2007 for Win32 Professional、Windows XP Professional SP2、Internet Explorer 7という環境で試していきますね。(OSがVistaでないところが悲しいけど)

|

その他のカテゴリー

ADO | ADT | API | ArrayList | ASP.NET | BDE | BDP.NET | BdpConnection | Borland Developer Studio 2006 | CAPICOM | class | ClipBoard | CodeEditor | Convert.ToString | Custom component | DBExpress | Delphi 2005 | Delphi 2006 | Delphi 2007 | Delphi XE2 | Delphi7 | Delphi8 | Device Driver | Dialog | Docking | DocuWorks | Docuworks SDK | Drag&Drop | Evernote | EXCEL | Firebird | FireMonkey | Game | General | Generics | Google Earth COM API | Google Maps | Google SketchUp | Graphic | IDE | Imm | Indy | InstallAware Express6 | InterBase Admin | JWW | Microsoft SQL Server | MyBase | OnMouseDown | Oracle XE | Paradox | PreviewHandler | PrintDialog | PrintPreviewDialog | PropertyGrid | PSDファイル | Ribbon Controls | RichTextBox | Servers | SubClass | TAction | TActionList | TAnimate | TButton | TCategoryButtons | TClientDataSet | TComboBox | TComboBoxEx | TCustomEdit | TDBGrid | TDockTabSet | TDrawGrid | TEdit | TExcelApplication | TFont | TForm | third party | TImage | TLabel | TList | TListBox | TListView | TMemo | TOpenDialog | TOutlookApplication | TPageControl | TPanel | TRichEdit | TShellResources | TStringGrid | TTabControl | TToolBar | TToolButton | TTreeView | TWebBrowser | Update | VCL Styles | WinInet | XE2 | XPman | オープン配列パラメータ | グループ化 | トランスレーションマネージャー | ファイル処理 | ファイル名処理 | 動的配列 | 投票 | 文字列処理 | 日本語入力 | 暗号 | | 音声合成利用