喫茶XRAYトップページ
[12670]
非表示パネルの描画
返信
削除
2019/3/28 (木) 17:25:23
おかぽん
PrintWindow のサンプルとして以下を参考にしました。
366_コントロール類をビットマップ画像として取得
http://
mrxray.
on.
coocan.
jp/
Delphi/
plSample
s/
366_Capt
ureContr
ols.
htm
PrintWindow function
https://
docs.
microsof
t.
com/
ja-
jp/
windows/
desktop/
api/
winuser/
nf-
winuser-
printwin
dow
何をしたいのかというと、DBGridのセルに、ある状態を表すため RadioButton を
2個表示しようかと。
(使ったことないのですが、)DBCtrlGird
(
http://
www.
geocitie
s.
co.
jp/
SiliconV
alley-
SanJose/
2560/
delphi4/
db/
DBCtrlGr
id.
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