<< 2024/04 >> | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |
|
Delphi 2007 で Win8互換の Common Control
13/01/14 14:44 / その他のソフト
現在精鋭開発中の i4 Portable ですが、ちょっとした遊び心から見た目を Win8 モダンUI アプリっぽく作っていたのですが、いつの間にかコンポーネント作りの方が本格化していたりします。
似たようなコンポーネント群で TMS Software という海外の会社から販売されているコンポーネントもあります。 (Delphi 2010 の特典でついていました。) これが使えればよかったのですが、奈何せん Win32 アプリは殆ど Delphi 2007 で開発しているので Delphi 2007 でも使いたい!ってこともありまして、相変わらず無い物は作れを地でイッテイマス(笑) かなり特殊な ListView もどきです。 通常の ListView のように Items / SubItems でのアイテム管理が出来るのですが、TImageList の指定ができて画像の埋め込みのほかに、pixel 単位でアイテムの表示位置が指定できます。 よくある ListView と違い1アイテムの高さは決まっていますが、横のカラムの表示位置は全て制御可能です。 var LI:TListItem; begin //初期化 ListView1.Items.Clear; ListView1.Items.BeginUpdate; //途中更新を停止 LI:=ListView1.Items.Add; LI.Captiont:='ABCDE'; LI.SubItems.Add('FGHI') ListView1.Items.EndUpdate; //更新開始 end; なんて書くのですが、これは var II:TImgItem; SI:TImgSubItem; begin //初期化 ListView1.Items.Clear; //アイテムを追加してから各種プロパティを設定 II:=ListView1.Items.Add; II.Text:='ABCDE'; II.x:=10; II.y:=5; II.Color:=clRed; //サブアイテムを追加してから各種プロパティを設定 SI:=II.SubItems.Add; SI.Text:='FGHI'; SI.x:=50; SI.y:=5; SI.Color:=clBlue; //サブアイテムを追加して ImageList の画像を指定 SI:=II.SubItems.Add; SI.ImageIndex:=3; SI.x:=100; SI.y:=2; //座標とフォントサイズを指定して追加 ListView1.Items.Add(50,5,16,'ABCDE'); ListView1.RefreshItem; //全て更新 end; なんて記述ができます。 BeginUpdate / EndUpdate の扱いが違いますが、いつも BeginUpdate はほぼ確実に書くので、これは省略して、EndUpdate の代わりに RefreshItem という関数を追加しています。 また ListView という名前ですが このように TreeView のような表示も可能です。 元々作り始めたきっかけとして、Delphi 2007 の Common Control が慣性スクロール(Moment scroll)が対応してなかったので当然ながら慣性スクロールにも対応しています。 ちょっと違うのは Tree の開閉はしないってことでしょうか。(できるんですが、Win8 っぽくない気がする) 更に更に、左右のスワイプにも対応しています。 右から左へのスワイプと左から右へのスワイプに対応していますので「左から右は削除」「左から右は移動」なんてこともできます。 かなり無茶をしている Class です。 まぁ、普通の CheckBox ですね。違うのは見た目と連動した Label を自動で更新するくらいですか。 もっとも苦労したのが Combobox です。 なんせ、DropDown と DropDownList などの複数のモードを持っていて、更に Edit と List の複合コントロールです。 リストを表示する際の Popup の制御も通常は OS に任せておけばいいんですが、Popup でも慣性スクロールを効かせたいが故に、Popup まで自前で制御(線画) こうなってくるとフォーカスの動きがめちゃくちゃシビアでして、通常のお任せしているフォーカス移動も自前で処理しなければなりません。 ウィンドウを持ちフォーカスを受け取るのですが、Combobox の場合、アプリ外に制御が移った場合など、Popup を殺さないとならないので「そこまでやらんとあかんかったー!」と作り始めた後に後悔しましたが・・・ MouseEvent を Hook しまくっています。 まぁ、最近こんな低レベル(基本という意味で)制御をするようなアプリを書いていなかったので、Windows message ハンドリングの復習にはなりましたが(笑) WM_****** をつらつらと眺めて「あ、このメッセージ使えそう」とか「こんなんあったっけ?」とか。 メッセージの流れを確認する為に、Spy++ のようなソフトも1個作りましたし・・・(^-^; [更新日付:2013/01/14 15:30:58]
トラックバックを見る(0) Log Link [https://akisoftware.com/cgi-bin/blom.exe?akisoft+sl+9c2bd0c632d8630410e087f04534ca88de4e61c3] TB Link [https://akisoftware.com/cgi-bin/blom.exe?akisoft+tb+9c2bd0c632d8630410e087f04534ca88de4e61c3] 記事へのコメント コメントはありません |
@AKISoftOfficialをフォロー
掲示板 サポートBBS PMailServer BBS アクセスの多い記事
最新記事(カテゴリ別)
PMailServer2 Version 2.53 をリリースしました。
04/08 00:50 フリー版からの製品版移行時の MTA 並列数について 02/17 23:52 メールサーバーの開発を始めて20年 02/07 21:46 PMailServer2 Version 2.52a をリリースしました。 12/26 14:02 PMailServer2 Version 2.52 をリリースしました。 10/01 10:48 PMailServer2 Version 2.51b をリリースしました。 09/19 01:43 PMailServer2 Version 2.51b(仮) Memo 09/12 00:33 PMailServer2 Version 2.51a をリリース、及び脆弱性についてのお知らせ 09/05 01:15 PMailServer2 Version 2.51a Memo 08/21 00:48 アドレスV125(K5)のスターターリレーの交換 08/04 10:10 最新コメント
コメントはありません
UUアクセス数
今日は 132回
昨日は 203回 トータル 303434回 3ヶ月記事別ランキング
プロフィール
Z80から68系、8086系を経由して
Pascalに移行。現在は Delphiをメインに C/C#も囓ってみたり。 「無い物は作れ」の精神で年がら年中なにかを作っています。 すぐ自前で作りたがるので無駄に工数が上がったりして自爆してみたりもします。 好きな物は麺類とお煎餅 Blom内検索
BLOM Version 1.39 ©2007-15 A.K.I Software all rights reserved. |