喫茶XRAYトップページ


[12670] 非表示パネルの描画返信 削除
2019/3/28 (木) 17:25:23 おかぽん
PrintWindow のサンプルとして以下を参考にしました。

366_コントロール類をビットマップ画像として取得
http://mrxray.on.coocan.jp/Delphi/plSamples/366_CaptureControls.htm

PrintWindow function
https://docs.microsoft.com/ja-jp/windows/desktop/api/winuser/nf-winuser-printwindow


何をしたいのかというと、DBGridのセルに、ある状態を表すため RadioButton を
2個表示しようかと。

(使ったことないのですが、)DBCtrlGird
http://www.geocities.co.jp/SiliconValley-SanJose/2560/delphi4/db/DBCtrlGrid.htm
のイメージで、DBCtrlGirdと違い、編集対象の行のみコントロールを表示し、
それ以外の行は、イメージだけ表示してやろうかと思ったわけです。

で、Panelを継承してRadioButton を2つ表示するDBコントロールを作成できました。
これを DBRadioControl とします。

これを、PrintWindow とか使って、カレントセル以外をイメージで表示したかったのですが、
DBRadioControlを非表示にしてあると、RadioButtonが描画できない(T-T)
PaintToメソッドも描画してくれない。
真っ黒になったり、真っ白(パネルの背景色かな?目が悪くてよくわからなかった)になったり・・・

PrintWindowも、WM_PAINT 投げているだけのようなので、RadioButton に WM_PAINT を投げても
同じく描画できず。
ただ、PrintWindowは、他のウインドウに隠れていても取得できるようなので、DBRadioControlのTopを
マイナス値にして見えない位置に置き、WM_PAINTをRadioButtonにPerformしたら
描画できた。

WM_PAINT の lParam に PRF_CHECKVISIBLE がなければ、Visibleに関係なく取れると
思ったのに、違うのだろうか?

ちょっと見栄えを気にしたところ、とんでもなく苦労したでござるという話

[12671] Re:非表示パネルの描画返信 削除
2019/3/28 (木) 19:45:37 Mr.XRAY
▼ おかぽんさん

お疲れ様です.

> ただ、PrintWindowは、他のウインドウに隠れていても取得できるようなので、DBRadioControlのTopを
> マイナス値にして見えない位置に置き、WM_PAINTをRadioButtonにPerformしたら
> 描画できた。


ハハハッ.なるほど

>DBRadioControlを非表示にしてあると、RadioButtonが描画できない(T-T)
>PaintToメソッドも描画してくれない。


ふ〜ん.へ〜.


[12672] Re2:非表示パネルの描画返信 削除
2019/3/29 (金) 08:54:10 おかぽん
▼ Mr.XRAYさん
PrintWindowをコントロールを印刷するサンプルとかで、よく見られるのですが、
操作させるのではなく、コントロール本体を隠し(Visible=False)、コントロールの
イメージを見せるだけで使う用途には向かない・・・と。

なんというか、無条件で描画する技があればよかったんですが、解決できたので
これでいいかな・・・なんて思ったりした頃に、画期的な何かが見つかったり
しないか(^^;)

[12673] Re3:非表示パネルの描画返信 削除
2019/3/29 (金) 13:39:13 Mr.XRAY
▼ おかぽんさん

> これでいいかな・・・なんて思ったりした頃に、画期的な何かが見つかったり
> しないか(^^;)


画期的かどうかは別として,そういうことってありますよね.
「これで OK だろう」と思って,いろいろ操作したり,
ネット上の記事を読んでいたりすると思いつくことがあります.

>マイナス値にして見えない位置に置き、

これって,結構使われていますね.
いろいろなソースコードを眺めていると見かけることがあります.


INCM/CMT
Cyclamen v3.82