喫茶XRAYトップページ


[5233] plExplorerFolderTreeにて(何回目だ? 苦笑)返信 削除
2011/9/12 (月) 00:39:02 Sara
Mr.XRAYさん こんばんわ。

Delphi Xe2で標準でスキンの変更ができるようになったので、
機能を取り入れてみたところ・・・plExplorerFolderTreeの
背景の色だけが変わらなくて浮いて見えます・・・(^^;

背景色を変更する方法はございますでしょうか?
(あと、Fontの色も・・・)


概ねXE2にも慣れてきたのですが、作成中のプロジェクトで挙動不審な
ものがいくつかあって、困っています・・・(^^;

例えば、PageControlに2ページ追加して、それぞれにActionToolBarを
置き、ActionManagerで作ったActionを、それぞれのページに配置して
PageControlのOnChangeイベントに何か命令文を書くと・・・
ActionToolBar上のボタンがページ切り替え時に正常に描画されない・・・

OnChangingイベントに同じ命令を書いても正常に描画されるのですが・・・

バグか?と思い、新規プロジェクトで同じように配置して実行すると、
正常に描画される・・・不思議だ・・・

作成中のプロジェクトに追加でPageControlを配置して同じように
しても、やはり、OnChangeイベントを書くと正常に描画されない・・・

ちなみにOnChangeに書いた命令文は Caption := 'Change'; だけ・・・

該当フォームだけ、新規に作り直したほうが良いかな・・・orz

[5234] Re:plExplorerFolderTreeにて(何回目だ? 苦笑)返信 削除
2011/9/12 (月) 12:33:42 Mr.XRAY
▼ Saraさん,こんにちは.

>何回目だ?

ハハハッ.

> 背景色を変更する方法はございますでしょうか?
> (あと、Fontの色も・・・)


設定可能なインターフェイスがあるかどうかですが,今の記憶ではなかった
と思います.また,たとえあったとしても,使用するインターフェイス
の組み合わせで,不正な動作となることがあります.残念ですが諦める
しかないと...

PageControlの方はちょっと分かりません.
後で調査はしてみますが,前にあった参照カウンタの問題の関係かも
知れません.

[5237] Re2:plExplorerFolderTreeにて(何回目だ? 苦笑)返信 削除
2011/9/13 (火) 00:31:19 Sara
▼ Mr.XRAYさん

> > 背景色を変更する方法はございますでしょうか?
> > (あと、Fontの色も・・・)
>
> 設定可能なインターフェイスがあるかどうかですが,今の記憶ではなかった
> と思います.また,たとえあったとしても,使用するインターフェイス
> の組み合わせで,不正な動作となることがあります.残念ですが諦める
> しかないと...

了解しました。スタイルデザイナの方でTreeView系やListView系の背景を
白にして対応することにします。(まぁ 白いほうが見やすいし)

スタイルデザイナといえば・・・
TScrollBoxの色を変えるのに、TListBoxの色を変更しないといけないのが
納得できないところです・・・(^^;
TScrollBoxとTListBoxの色を別々にしたい・・・


> PageControlの方はちょっと分かりません.
> 後で調査はしてみますが,前にあった参照カウンタの問題の関係かも


別フォームのPageControlのDoubleBufferをTrueにすると、
各TabSheetがごちゃごちゃに描画されて何が何やら・・・
これも、新規にプロジェクトを作ると正常に表示されます・・・


新規に作成した方では、PageContorlのDoubleBufferをOnにすると、
連動して各TabSheetのDoubleBufferもOnになるけど、移行したプロジェクトでは
PageControlと各TabSheetのDoubleBufferは別々に設定できる・・・なぜ?
(この辺に問題があるのか? DFMでも覗いてみるか・・・ )

全部作り直したほうが良いかな・・・orz


[5238] Re3:plExplorerFolderTreeにて(何回目だ? 苦笑)返信 削除
2011/9/13 (火) 10:10:14 Mr.XRAY
▼ Saraさん

> TScrollBoxとTListBoxの色を別々にしたい・・・

こちらはさておき,

> 別フォームのPageControlのDoubleBufferをTrueにすると、
(以下略)

ちょっとplExplorerFolderTreeのコードをみたのですが,これは,
インターフェイスのコーディングのせいですね,多分.
これを「バグ」と言うか,仕様というかは難しいところですが,
う〜む.直せる自身はありません.
ということでなので,

> 全部作り直したほうが良いかな・・・orz

しても,いろいろ操作コードを追加すると,また同じ結果となって
しまいますね.

[5239] Re4:plExplorerFolderTreeにて(何回目だ? 苦笑)返信 削除
2011/9/13 (火) 11:01:31 Sara
▼ Mr.XRAYさん

> > TScrollBoxとTListBoxの色を別々にしたい・・・
>
> こちらはさておき,

さて置かないで〜(笑)

> > 別フォームのPageControlのDoubleBufferをTrueにすると、
> (以下略)
>
> ちょっとplExplorerFolderTreeのコードをみたのですが,これは,
> インターフェイスのコーディングのせいですね,多分.
> これを「バグ」と言うか,仕様というかは難しいところですが,
> う〜む.直せる自身はありません.
> ということでなので,
>
> > 全部作り直したほうが良いかな・・・orz
>
> しても,いろいろ操作コードを追加すると,また同じ結果となって
> しまいますね.


ん? PageControlの表示不具合とplExplorerFolderTreeに因果関係があると?
PageControlにplExplorerFolderTreeを乗せている訳ではないのですが・・・

しかも、別フォームにまで影響するなんてことが?(あるんです?)

今、職場で(笑)確認できないんで、帰ったらShellTreeViewを使うモードで試してみます。
(Createしていなければ、問題ないですよね? 多分・・・)


[5240] Re5:plExplorerFolderTreeにて(何回目だ? 苦笑)返信 削除
2011/9/13 (火) 11:16:50 Mr.XRAY
▼ Saraさん

> しかも、別フォームにまで影響するなんてことが?(あるんです?)

実は可能性がありそうなんです。それは、plExplorerFolderTreeの実装コードに
関係があるようです。終了待ちのスレッド部分らしいのです。
でも、もしかしたら勘違いかも知れません。

[5241] Re6:plExplorerFolderTreeにて(何回目だ? 苦笑)返信 削除
2011/9/13 (火) 13:21:40 Sara
▼ Mr.XRAYさん

> > しかも、別フォームにまで影響するなんてことが?(あるんです?)
>
> 実は可能性がありそうなんです。それは、plExplorerFolderTreeの実装コードに
> 関係があるようです。終了待ちのスレッド部分らしいのです。
> でも、もしかしたら勘違いかも知れません。


昼に帰って確認しました・・・
plExplorerFolderTreeをCreateしていなくても、症状は変わりませんでした・・・
ので、plExplorerFolderTreeは関係ないかと・・・
スタイルをWindows以外に変更すると起きるようです。
(標準スタイルでは正常に動作しているようです。)

ですので、旧バージョンから移行したDFMあたりに何か問題を含んでいる
可能性が高いかと・・・DFMだけでも、作り直してみるか・・・
結構面倒だけど、全部作り直すよりは・・・(^^;

[5242] Re7:plExplorerFolderTreeにて(何回目だ? 苦笑)返信 削除
2011/9/13 (火) 13:32:12 Mr.XRAY
▼ Saraさん

> 昼に帰って確認しました・・・

あら、私と同じで職住接近? もっとも私のばやい、昼でなくても家にいたり。
でも、休暇をとっても、呼び出されて…。

> plExplorerFolderTreeをCreateしていなくても、症状は変わりませんでした・・・
> ので、plExplorerFolderTreeは関係ないかと・・・


確認ありがとうございます。
引き続き調査しますが、現在、シェル関係関数での実現を目指している
ので、時間的にはきびしいです (^^;

[5243] Re8:plExplorerFolderTreeにて(何回目だ? 苦笑)返信 削除
2011/9/13 (火) 20:25:58 Sara
▼ Mr.XRAYさん

> > 昼に帰って確認しました・・・
>
> あら、私と同じで職住接近? もっとも私のばやい、昼でなくても家にいたり。
> でも、休暇をとっても、呼び出されて…。

そうですねぇ・・・車で5分くらいでしょうか・・・


> > plExplorerFolderTreeをCreateしていなくても、症状は変わりませんでした・・・
> > ので、plExplorerFolderTreeは関係ないかと・・・
>
> 確認ありがとうございます。
> 引き続き調査しますが、現在、シェル関係関数での実現を目指している
> ので、時間的にはきびしいです (^^;

イエス・マスター(笑)

いつでも、人柱(爆)になりますです。(^^;

[5244] Re9:plExplorerFolderTreeにて(何回目だ? 苦笑)返信 削除
2011/9/13 (火) 22:03:46 Mr.XRAY
> いつでも、人柱(爆)になりますです。(^^;

十分なって頂いています。バグもかなり発見していただいたようですし。(^^;
前に約束した通り、今開発中のフォルダツリー関係もテストよろしく。
いつになるやら。でも少しづつですがやっています。

[5263] Re8:plExplorerFolderTreeにて(何回目だ? 苦笑)返信 削除
2011/9/17 (土) 23:07:36 Mr.XRAY
> あら、私と同じで職住接近? もっとも私のばやい、昼でなくても家にいたり。
> でも、休暇をとっても、呼び出されて…。


パソコンが職場に普及し始めた頃のことです。
業務アプリ開発をお願いされた上司(医師)が、PC関係はMr.XRAYに任す。必要な
予算は請求してくれ。と。
まだネット接続がほとんどないか十分でなかったので、トラブルがあると
「ちょっと家に行って調べてきます」なんてね。

技師の人数が少ない職場でしたから、休暇をとっていても、呼び出され、
撮影が済むとまた帰宅なんていうのが。
有給休暇を1日しかとらない年もありました。

その医師が撮影にも興味があり、ある日、出先に電話があり、撮影装置の
使い方を教えたのですが、分からないというので、自電車を必死に20分程
全力でこいで戻ったのですが(出先でも撮影中だったんです)、
「撮影終わったよ」
何と、自分で診察して、撮影して、写真を現像してしまっていました。
汗だくで戻った私は何なんだ。
技師の仕事を脅かす医師ではありました。今でも年に何回か会って酒を
飲んだり、旅行したりしています。

医師「こんな写真読めないぜ、それでも技師かよ」
私 「この程度の写真が読めなくて、よく医師って言ってられんな」
という漫才のようなやり取りも。
周りの人が「あっ、また漫才やっている」


[5245] Re:plExplorerFolderTreeの背景とFontの色返信 削除
2011/9/14 (水) 10:56:20 Mr.XRAY
▼ Saraさん。ゴメンなさい。今コードをみたら、

> 背景色を変更する方法はございますでしょうか?
> (あと、Fontの色も・・・)


未確認ですが、背景は、

function TplExplorerFolderTree.PrePaint(hdc: HDC; var prc: TRect;
  var plres: LRESULT): HRESULT;

のHDCに描画すれば出来るかも知れません。多分TRectが背景のRectじゃ
ないかと思います。Fontの色の方は、

function TplExplorerFolderTree.ItemPrePaint(hdc: HDC; var prc: TRect;
  var pnstccdItem: TNSTCCustomDraw; var pclrText, pclrTextBk: COLORREF;
  var plres: LRESULT): HRESULT;
var
  pShellItem      : IShellItem;
  pShellItemArray : IShellItemArray;
  pidl            : PItemIDList;
  pFullPath       : array [0..MAX_PATH - 1] of Char;
begin
  if (pnstccdItem.uItemState and CDIS_FOCUS) > 0 then begin
    pclrText := RGB(200, 0, 0);
    plres    := CDRF_NEWFONT;
  end;

ここでは、CDIS_FOCUSの時に色をRGBで設定していますから、それ以外のを
設定すれば可能かも知れません。
ダメだったらゴメンなさい。
うまくいくようでしたら、プロパティに追加しますか…

[5246] Re2:plExplorerFolderTreeの背景とFontの色返信 削除
2011/9/14 (水) 11:06:59 Mr.XRAY
考えてみれば、このTplExplorerFolderTree、TPanelに描画していますが、
直接親のコントロールに表示すればいいんですよね。
う〜ん、バグというより誤字脱字の類ですね。これは。

インターフェイスには直接表示のコントロールがない
      ↓
それじゃ、TPanel使おう

思いこみは怖い。自分自身にあきれました。
またまたSaraさんの発言で気づかされました。
もしかしてSaraさんって、知っていてわざと私を突いていのかしらん(笑)

他にもこんなサンプルコードがいっぱいあるんだろうな。ふぅ(ため息)

[5247] Re3:plExplorerFolderTreeの背景とFontの色返信 削除
2011/9/14 (水) 21:03:22 Sara
▼ Mr.XRAYさん

> 思いこみは怖い。自分自身にあきれました。
> またまたSaraさんの発言で気づかされました。
> もしかしてSaraさんって、知っていてわざと私を突いていのかしらん(笑)

いえいえ、まったく 深く考えていません(^^;
自分のやりたいことだけを素直に質問しているだけです(爆)

ソースを見て自分の手に負えそうであれば、いじり倒すんですが・・・
不明なコードが多いと、その気力が・・・でてこない・・・(^^;
んで、質問すると・・・完全な回答が得られなくてもヒントがあれば・・・
また、いじり倒す・・・でも、できないと、やっぱり質問・・・(^^;

そんな感じです(^^;;

[5255] Re3:plExplorerFolderTreeの背景とFontの色返信 削除
2011/9/15 (木) 23:25:30 Mr.XRAY
> それじゃ、TPanel使おう

間違えました.TCustomPanelですね.


[5256] Re4:plExplorerFolderTreeの背景とFontの色返信 削除
2011/9/16 (金) 15:47:52 Sara
▼ Mr.XRAYさん

ありがとうございます。m(_ _)m が、最近サボっていてDelphiいじってません・・・(^^;

今日、帰ったら実装してみます。

そういえば、同じプロジェクトを複製して、Delphi XEとXE2でそれぞれ実行ファイルを
作成出来るようにしてある場合、XE2でテーマを変更すると、XEで作ったPGもそのテーマの
影響を受けるんですね(@_@)
詳しくは調べていませんが、プロセス名か何かが判断の基準なのかな・・・

[5257] Re5:plExplorerFolderTreeの背景とFontの色返信 削除
2011/9/16 (金) 22:41:40 Sara
▼ Mr.XRAYさん

plExplorerFolderTreeの背景色とFont色が無事変更できました。(^^)V

ですが・・・(^^;

AquaGraphite等のGraphiteと付くスタイルの背景色は、RGB(17,17,17)なのですが、
ほぼ黒に近いため、階層のあるフォルダの三角マークが見えなくなります・・・
(マウスオーバーさせると、色が変わるので見える・・・)

これを変えるには・・・やっぱり、Shellのイメージリストを取得して、部分的に
入れ替えて、それを戻してやる的なことをしないとだめですかね・・・(^^;



[5258] Re6:plExplorerFolderTreeの背景とFontの色返信 削除
2011/9/17 (土) 11:47:22 Mr.XRAY
▼ Saraさん

> AquaGraphite等のGraphiteと付くスタイルの背景色は、RGB(17,17,17)なのですが、
> ほぼ黒に近いため、階層のあるフォルダの三角マークが見えなくなります・・・
> (マウスオーバーさせると、色が変わるので見える・・・)


ハハハッ。これはやっぱり、マイクロソフトの言いなりになるしかないですね。

>XE2でテーマを変更すると、XEで作ったPGもそのテーマの
>影響を受けるんですね(@_@)


マニフェストファイル使っていますから。
必要最小限のファイルにしてからコンパイルすると消えるでしょう。

http://mrxray.on.coocan.jp/Delphi/Info/OtherInfo_General.htm#fig3


[5259] Re7:plExplorerFolderTreeの背景とFontの色返信 削除
2011/9/17 (土) 13:55:40 Sara
▼ Mr.XRAYさん

> ハハハッ。これはやっぱり、マイクロソフトの言いなりになるしかないですね。
やはり、List系の背景は白で統一したほうが、簡単かな・・・(^^;

> >XE2でテーマを変更すると、XEで作ったPGもそのテーマの
> >影響を受けるんですね(@_@)
>
> マニフェストファイル使っていますから。
> 必要最小限のファイルにしてからコンパイルすると消えるでしょう。
>
> http://mrxray.on.coocan.jp/Delphi/Info/OtherInfo_General.htm#fig3


ん? XE用のプロジェクトと、XE2用のプロジェクトは全く別なフォルダーに
なっているのですが、それぞれのフォルダーにできたEXEを実行すると、
XE側でもXE2側で設定したスタイルが使われて表示されるんですが・・・

XE2側のマニフェストファイルをXE側にコピーしているわけではないし・・・

なんか、私の言っていること可笑しいです?(^^; (もしくは、気のせい?)

[5260] Re8:plExplorerFolderTreeの背景とFontの色返信 削除
2011/9/17 (土) 15:00:56 Mr.XRAY
▼ Saraさん

> やはり、List系の背景は白で統一したほうが、簡単かな・・・(^^;

うんだ.うんだ (^^;

> ん? XE用のプロジェクトと、XE2用のプロジェクトは全く別なフォルダーに

えっ!? どぼちて….何でそうなんでしょう.リソースに含まれているとか...
じゃなくて... わかりませ〜ん.

[5261] Re9:plExplorerFolderTreeの背景とFontの色返信 削除
2011/9/17 (土) 21:20:11 Sara
▼ Mr.XRAYさん

> > やはり、List系の背景は白で統一したほうが、簡単かな・・・(^^;
>
> うんだ.うんだ (^^;


ところで、背景色や、Fontの色が変えられるようになると、ついでに
plExplorerFolderTreeで表示されるスクロールバーもスタイルと統一
できないかという欲がでてくるんですが、なんとかなりますか?(^^;




[5262] Re10:plExplorerFolderTreeの背景とFontの色返信 削除
2011/9/17 (土) 22:42:31 Mr.XRAY
▼ Saraさん

> ところで、背景色や、Fontの色が変えられるようになると、ついでに
> plExplorerFolderTreeで表示されるスクロールバーもスタイルと統一
> できないかという欲がでてくるんですが、なんとかなりますか?(^^;


気持ちは理解できます。
だって、だからこそ、Windows XP以降テーマが採用され、Delphiでも可能に
なったのですから。
う〜ん、どうでしょう。あのインターフェイスを使用したコードでは無理が
あるかも知れません。

[5265] Re11:plExplorerFolderTreeの背景とFontの色返信 削除
2011/9/18 (日) 01:08:03 Sara
▼ Mr.XRAYさん

> > plExplorerFolderTreeで表示されるスクロールバーもスタイルと統一
> > できないかという欲がでてくるんですが、なんとかなりますか?(^^;
>
> 気持ちは理解できます。


そうですよね!(笑)

と、いうわけで(不明)、TplContextMenuもTPopupActionBarのように
スタイル変更に同期されると、(平和のためよ)みんなが幸せになれるかもしれない・・・
(古い・・・いぜんに知らないか・・・)


[5266] Re12:plExplorerFolderTreeの背景とFontの色返信 削除
2011/9/18 (日) 12:48:41 Mr.XRAY
▼ Saraさん
> 平和のためよ)みんなが幸せになれるかもしれない・・・
> (古い・・・いぜんに知らないか・・・)


確かに、最近みかけないフレーズですね。でもいいフレーズだと思います。
時代は変化しているんですね(実感…)。

[5250] Re2:plExplorerFolderTreeの背景とFontの色返信 削除
2011/9/15 (木) 00:11:04 Mr.XRAY
確認してみました

> ここでは、CDIS_FOCUSの時に色をRGBで設定していますから、それ以外のを
> 設定すれば可能かも知れません。
> ダメだったらゴメンなさい。


とりあえず可能なようです。以下のコードでテストしました。
Windows 7 U64 + Delphi 2010

--------------- ItemPrePaintイベント -----------------------------
//  pclrTextBkが文字列の背景色の設定
//  選択中の文字列の背景色は常にシステム規定値らしい

function TplExplorerFolderTree.ItemPrePaint(hdc: HDC; var prc: TRect;
  var pnstccdItem: TNSTCCustomDraw; var pclrText, pclrTextBk: COLORREF;
  var plres: LRESULT): HRESULT;
var
  pShellItem      : IShellItem;
  pShellItemArray : IShellItemArray;
  pidl            : PItemIDList;
  pFullPath       : array [0..MAX_PATH - 1] of Char;
begin
  pclrTextBk := clYellow;  //この色を背景色と同じにする
  if (pnstccdItem.uItemState and CDIS_FOCUS) > 0 then begin
    pclrText   := clBlue;
    plres      := CDRF_NEWFONT;
  end else begin
    pclrText   := clRed;
  end;
 
  以下略

--------------- PrePaintイベント -----------------------------

function TplExplorerFolderTree.PrePaint(hdc: HDC; var prc: TRect;
  var plres: LRESULT): HRESULT;
var
  LogBrush :TLogBrush;
  hbr : HBRUSH;
begin
  LogBrush.lbStyle := BS_SOLID;
  LogBrush.lbColor := clYellow;  //これを文字例の背景色と同じにする
  LogBrush.lbHatch := 0;

  hbr := CreateBrushIndirect(LogBrush);
  FillRect(hdc, prc, hbr);
  SetBkColor(hdc, TRANSPARENT);  //これはいらなないかも知れない
  plres  := CDRF_NOTIFYITEMDRAW;
  Result := S_OK;
end;

図は上記コードの場合の結果です。



INCM/CMT
Cyclamen v3.82