フォーラム


ゲスト  

ようこそ ゲスト さん。このフォーラムに投稿するには 登録が必要です。

ページ: 1 2 [3] 4 5
トピック: SynTaskDialog 改
DEKO
管理者
投稿数: 2690
Mod 19 の改良点
on: 2013/10/16 06:32 Wed

[修正点]

  • プログレスバー (進捗ダイアログ) を有効にした。
  • ダイアログを閉じる EndDialog() メソッドを追加した。

説明:
プログレスバー (進捗 / マーキー) を表示できるようになりました。おかげでユニットが一つ増えました。これってクラスで作った方が良かったんちゃうん…orz
tdfShowProgressBar フラグを含めると進捗バーが、tdfShowMarqueeProgressBar を含めるとマーキーバーが表示されます。

進捗バー関連の値はプロパティで指定します。

property ProgressMax: Integer read FMax write SetMax;
property ProgressMin: Integer read FMin write SetMin;
property ProgressPosition: Integer read FPosition write SetPosition;
property ProgressState: TProgressBarState read FState write SetState;

 
マーキーバー関連はコレです。

property MarqueeSpeed: Cardinal read FMarqueeSpeed write SetMarqueeSpeed;
property ProgressState: TProgressBarState read FState write SetState;

 
Delphi 2007 の TProgressBar はマーキーを表示できない (進捗バーのみ) ので小細工をしてあります。

タスクダイアログが表示された後に、ProgressPosition プロパティでプログレスバーのゲージ位置を変化させる事ができます。また、新たに追加された EndDialog() メソッドでダイアログを閉じることもできます。手っ取り早く確かめたかったら、TTimer を使ってタイマーイベントでゲージ位置を変更するなり EndDialog() でダイアログを閉じるなりしてみてください。

DEKO
管理者
投稿数: 2690
Mod 20 の改良点
on: 2013/10/16 10:56 Wed

[修正点]

  • InitProgress() メソッドを追加。
DEKO
管理者
投稿数: 2690
Mod 21 の改良点
on: 2013/10/16 23:10 Wed

[修正点]

  • 細かな位置調整
DEKO
管理者
投稿数: 2690
Mod 22 の改良点
on: 2013/10/17 02:45 Thu

[修正点]

  • 展開テキストがフッターエリアかつハイパーリンクが指定されていると展開テキストの背景が白くなってしまう問題を修正 (代替ダイアログ)
  • ボーダーラインの処理を変更 (代替ダイアログ)
  • 細かな位置調整 (代替ダイアログ)
DEKO
管理者
投稿数: 2690
Mod 23 の改良点
on: 2013/10/17 02:59 Thu

[修正点]

  • 〔Ctrl〕+〔C〕で内容をクリップボードにテキストでコピーできるようにした (代替ダイアログ)

説明:
画像のようなダイアログで 〔Ctrl〕+〔C〕を押すと、以下のような内容でクリップボードへコピーされます。

[Window Title]
SynTaskDialog Mod 23

[Main Instruction]
SynTaskDialog (Delphi 2007 またはそれ以降)

[Content]
XP またはそれ以前でタスクダイアログを使うには SynTaskDialog を使います。
これは MPL / GPL / LGP トリプルライセンスなライブラリです (コンポーネントではありません)。

[^] 実装の詳細 [X] よく読みました [OK] [キャンセル]

[Footer]
SynTaskDialog.TTaskDialogEx を使う場合には Init() メソッドで必ず初期化する事。

[Expanded Information]
普通のダイアログ: ◎
カスタムボタン: ◎
コマンドリンク: ○ (代替ダイアログではそもそも表示が異なる)
ラジオボタン: ◎
AboutBox: ◎
CheckBox: ◎
フッターテキスト: ◎ (代替ダイアログのフッターアイコンが汚いのは未解決)
展開テキスト: ◎
問い合わせダイアログ: ◎
選択リストダイアログ: ◎
進捗ダイアログ: ◎

<a href="http://ht-deko.minim.ne.jp">http://ht-deko.minim.ne.jp</a>

 
Windows の標準的なダイアログにはこの機能が備わっていますので外せないと思いまして。
問い合わせダイアログで入力ボックスにフォーカスがある時は…当たり前ですが 〔Ctrl〕+〔C〕で内容をキャプチャできないので注意が必要です。

DEKO
管理者
投稿数: 2690
Mod 24 の改良点
on: 2013/10/18 00:48 Fri

[修正点]

  • Vista 以降で代替ダイアログ表示の場合にはフォント情報及びセパレーター情報をテーマサービスに問い合わせるようにした
  • ラベルの高さの計算を間違う問題を修正 (代替ダイアログ)
  • コピーされたテキストにハイパーリンクが指定されていた時には <a> タグを抜くようにした(代替ダイアログ)

説明:
Vista 以降の OS で代替ダイアログを完全にしようとするとすべてをオーナードローするしかありません。それはあんまりなので、手抜きしない方がいい部分だけテーマサービスに問い合わせるようにしました。

インストラクションは青い文字で表示されますが、日本語版 Windows でない場合、ここは数pt 大きな文字で描画されます。問い合わせダイアログや選択リストダイアログを使わなければ Vista 以降の OS で代替ダイアログを表示する事はないのですが…これを使う限り、代替ダイアログもそれなりにテーマサービスに問い合わせなくてはなりません。

例えばボタンのある部分と白いパネル状の部分の境にあるボーダーですが、この色はテーマサービスに問い合わせなくては取得できません。フッターを表示した時に現れるセパレーターも同様です。

ラベルの高さの計算を間違う一つの原因は、文字列の末尾が "…" になる事があるからです。これを解決するために文字列描画サイズの計算にフラグを追加しています。もう一つの原因は tdfEnableHyperLinks を指定している場合です。文字列描画サイズの計算はタグを抜いてから行わないとエリアを広く取ってしまう事になります。これを解決するために ParseLinks() という局所関数を追加しました。元ネタは TCustomLinkLabel.ParseLinks なのですが、Private なメソッドなので利用できませんし、コピーしてそのまま使うとアレなので別ロジックで組んであります (正規表現が使えれば楽なのに…)。

ParseLinks() はクリップボードテキストでのタグ抜きにも使われています。Mod 23 の例にあるタグは Mod24 では表示されません。

DEKO
管理者
投稿数: 2690
Mod 25 の改良点
on: 2013/10/18 06:03 Fri

[修正点]

  • ソースコードの整理
  • フッターアイコンの描画がキレイになった (代替ダイアログ)

説明:
他にも修正を行った気がしますが思い出せません。

DEKO
管理者
投稿数: 2690
Mod 26 の改良点
on: 2013/10/18 14:49 Fri

[修正点]

  • ComCtl32.dll のバージョンが 6 よりも前の場合で tdfEnableHyperLinks が指定されている場合には、ハイパーリンクタグを抜くようにした。

説明:
"ComCtl32.dll のバージョンが 6 よりも前" というのは Windows 2000 以前あるいは XP 以降でアプリケーションマニフェストが組み込まれていない (ランタイムテーマ無効) 場合の事です。TLinkLabel は ComCtl32.dll バージョンが 6 以降でないと動作しないので、以前の実装だと条件を満たしていない場合で tdfEnableHyperLinks とハイパーリンクの指定があるとタグを文字列で表示してしまっていました。

今回の実装により、どんな環境で tdfEnableHyperLinks が有効を有効にしハイパーリンクを記述しても、ComCtl32.dll の要件を満たさない場合には自動的にタグが抜かれるようになります…早い話が、あまり気にせずにハイパーリンクが使えるようになったという事です。

DEKO
管理者
投稿数: 2690
Mod 27 の改良点
on: 2013/10/18 23:40 Fri

[修正点]

  • Vista またはそれ以降で代替ダイアログの場合、展開ボタンの描画をテーマサービスで行うようにした。

[Windows 7 (互換ダイアログ)]

[Windows XP (互換ダイアログ)]

[Windows 2000 (互換ダイアログ)]

説明:
よほど特殊なテーマを使っていない限り、展開テキストはネイティブなのか互換ダイアログなのか区別ができないと思います。

DEKO
管理者
投稿数: 2690
Mod 28 の改良点
on: 2013/10/19 05:05 Sat

[修正点]

  • クラシック表示の互換性を向上させた (代替ダイアログ)
  • ラジオボタンのキャプションに \r を指定して改行させる事ができるようにした。

説明:
テーマでの表示とクラシック表示ではコントロールの描画位置が異なる事があります。これが何故起こるのか知る由もありませんので、現物あわせで調整を行ってあります…どんだけ考えても判りませんからね。

ラジオボタンの以前の実装は、\r で改行された後の部分はヒントとして表示されるようになっていました (コマンドリンクと同じ実装)。これを改行できるようにしたのですが、TaskDialog で使われている RadioButton はオーナードローなのか Delphi の RadioButton の描画とそもそも違うのか、ボタンとボタンのキャプションの位置が異なります。ボタンを合わせるとキャプションが合わなくなってしまいます。こんなもんをオーナードローする気も起きないので、キャプションの位置を合わせてあります。

オーナードローで思い出しましたが、TaskDialog で使われている展開ボタンとチェックボックスはオーナードローどころか、ウィンドウハンドルすら持っていません。チェックボックスの描画も計算が合わないのですが、これまたオーナードローする気も起きないのでそのままです。こちらはチェックボタンを合わせてあります (キャプションは X 位置のみ異なる)。

※ 続きは ↓ の Page [4] をクリック。

ページ: 1 2 [3] 4 5
WP Forum Server by ForumPress | LucidCrew
バージョン: 1.7.5 ; ページロード: 0.049 sec.