キャンバスプロパティのないコントロールで描画するには?

解決


文鳥  2005-10-08 11:48:22  No: 17992  IP: 192.*.*.*

こんにちは。質問の内容としてはタイトルそのままなのですが、結構フリーソフトでも、マウスに反応するような描画がこっていたりするものはするので。
ところで、カラープロパティもヘルプにのっているのに使えないコントロールがあるのですが、なぜですか・・・?初心者でごめんなさい

編集 削除
ママん  2005-10-08 12:55:11  No: 17993  IP: 192.*.*.*

コントロールというのは、色々な意見があるかもしれませんが、
プログラムを組み立てる為の部品のようなものです。
物によっては自前描画を一切受け付けない物があっても不思議ではありません。ですが、多くのコントロールは継承ができます。
無いプロパティは作るしかありません。
また、非常に簡単な機能追加でも、親コントロールからの継承が困難な場合もあります、そこらへんは見極めが必要です。
例えばTButtonの色を変えるのなんかはXPスタイル適用なんかも考えると結構大変だったりします。

編集 削除
Mr.XRAY  URL  2005-10-08 14:20:33  No: 17994  IP: 192.*.*.*

Canvasやマウスに反応する....
機能を実現する方法は,対象とするコントロールによって違ってきます.
Paintメソッドがあるものでは,そのなかでCanvasが使用できたり,
イベントの中でCanvasが使えるものもあります.

マウスに対する反応も,マウスの操作に対して自動的に呼ばれるメソッド
があるコントロールでは,そのメソッドを実装した派生コントロールを作成
すれば使用できるようになります.また,なくても,フックという機能を
使用すれば,マウスの操作を検出することもできます.

また,継承元にCanvasプロパティがなくても,派生先で実装することも
できます.拙作に印刷プレビューコンポーネントというのがあります.
この継承元は,CanvasプロパティがないTComponentですが,Canvasプロ
パティを実装しています.
(印刷ですから,Canvasがないと!?)

>カラープロパティもヘルプにのっているのに使えない

ヘルプには,protectedなプロパティも書いてある場合があります.
その場合は使用できますせん.派生コントロールを作成するか,この掲示板
で,ちょと前に話題になっていた方法が使用できる場合があります.

編集 削除
文鳥  2005-10-08 21:36:42  No: 17995  IP: 192.*.*.*

プロパティって作れるのですか・・・。
それはコントロールから自分で作れということでしょうか?

編集 削除
えーと  2005-10-08 22:15:09  No: 17996  IP: 192.*.*.*

> プロパティって作れるのですか・・・。

うーむ、このレベルでしたら、まず、Delphi の文法について、とくにクラスなど
の OOP についてちゃんと入門しないと、とにかく前進できません。

http://homepage2.nifty.com/Mr_XRAY/Links.htm

このリンクのなかの入門サイトを一つ選んで徹底的に勉強してみてください。
絶対そのほうが近道になるでしょう。

編集 削除
Mr.XRAY  URL  2005-10-08 23:07:14  No: 17997  IP: 192.*.*.*

>プロパティって作れるのですか・・・。
>それはコントロールから自分で作れということでしょうか?

う〜む.そうですね.
Delphiというのはちょっと面白いんですね(最近他の言語を使ってので他のは不明ですが).
例えば新規にプロジェクトを作成してPanelを配置すると,

   Panel1 : TPanel

というのがコードの中にできています.この時
TPanelをオブジェクト(クラス)
Panel1をTPanelのインスタンス(TPanelを実際に使用可能にしたもの)
といいます.

TPanelのところを[Ctrl]をクリックすると
 TPanel = class(TCustomPanel)

という箇所がでてきます.これは何を意味するかというと,
TPanelというのは,TCustomPanelを元にして,プロパティやメソッドを追加
してできていることを意味しています.今度は,TCustomPanelを[Ctrl]を
押したままクリックすると

  TCustomPanel = class(TCustomControl)

となります.つまりTCustomControlを拡張してできているんですね.
順番にやっていくと,最終的にTObjectとなります.
もうおわかりだと思いますが,このように,Delphiのコントロール,つまり,コンポーネントは,プロパティとかメソッド,イベントを拡張してで
きているんです.その拡張のための機能が備わっているんです.

標準でなければ,自分で作ってしまえ!!
というのが,Delphi愛好者の口癖だった時代がありました.
ただし,自分でできるかどうかは,経験と実力と,ネット上の検索技術
が鍵となることは間違いないでしょう.
これは,どんな言語でも同じですけどね.

編集 削除
文鳥+  2005-10-17 18:21:51  No: 17998  IP: 192.*.*.*

ありがとうございます。

編集 削除