プロパティの..


るるとん@K  2004-02-10 05:52:28  No: 7020

コンポーネントを作っています
継承もとのプロパティの変更時に処理をしたいのですが、
再定義時にWriteを使うとうまくいきません
(この機能を使うためのライセンスを..)
どうすれば良いのでしょうか?


にしの  2004-02-10 18:57:38  No: 7021

継承元はどういうコンポーネントでしょうか。
ライセンス管理している場合、無理なのかもしれません。
property自体はそのままで、元のwriteに書かれているメソッドをオーバーライドしてみてはどうですか?


るるとん@K  2004-02-11 00:00:24  No: 7022

継承元はTWinControlです
どういうことでしょうか?
継承元のWriteで指定しているメソッドのことですか?
どうやればわかるのでしょう?


にしの  2004-02-11 00:06:13  No: 7023

TWinControlなら通常はうまくいきます。
どのプロパティを再定義したいのですか?
記述内容も書かれると、コメントしやすいです。


るるとん@K  2004-02-11 00:19:35  No: 7024

Widthです

property width:integer write SWidth read GWidth;
でも
property width write SWidth read GWidth;
でも無理です

SWidth、GWidthは正確に定義されています

コンポーネントの貼り付け時にエラーが出ます


るるとん@K  2004-02-11 00:20:53  No: 7025

すみません
あまり変わりませんがHeightもです


にしの  2004-02-11 00:30:47  No: 7026

私の環境(Delphi7Pro)では、以下の記述でエラーなく貼り付けられます。
type
  TTestCtrl = class(TWinControl)
  private
    { Private 宣言 }
    FOrgWidth: Integer;
    procedure SWidth(Value: Integer);
    function GWidth: Integer;
  protected
    { Protected 宣言 }
  public
    { Public 宣言 }
    constructor Create(AOwner: TComponent); override;
  published
    { Published 宣言 }
    property Width: Integer read GWidth write SWidth;
  end;

constructor TTestCtrl.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FOrgWidth := 100;
end;
procedure TTestCtrl.SWidth(Value: Integer);
begin
  FOrgWidth := Value;
end;
function TTestCtrl.GWidth: Integer;
begin
  Result := FOrgWidth;
end;

別の場所に問題があるのだと思います。


るるとん@K  2004-02-11 00:56:42  No: 7027

基本クラスのメソッド名はどうすれば分かるのでしょうか?


にしの  2004-02-11 01:26:55  No: 7028

ソースかヘルプで確認できます。


るるとん@K  2004-02-11 01:32:07  No: 7029

ソースが見れません
ヘルプにも載ってません


るるとん@K  2004-02-11 01:34:04  No: 7030

メソッド名というのは、プロパティ変更時に呼び出される分です


jok  2004-02-11 01:42:02  No: 7031

> ソースが見れません

なぜ?
personal でも *.int ファイルがあるはず。
これを見れないなら、コンポーネントを作るなんて無理です。


るるとん@K  2004-02-11 02:07:33  No: 7032

intと言う拡張子が付いたファイルはどこにあるんですか?

それから、にしのさんのソースではプロパティと大きさがバラバラです


るるとん@K  2004-02-11 02:09:59  No: 7033

>intと言う拡張子が付いたファイルはどこにあるんですか?

検索時に「.」をいれてませんでした
見つかりました


通りすがり  2004-02-11 02:11:43  No: 7034

> intと言う拡張子が付いたファイルはどこにあるんですか?
Doc ですよ。


るるとん@K  2004-02-11 02:16:32  No: 7035

property Width: Integer;

とあるんですが・・・


jok  2004-02-11 02:16:42  No: 7036

> intと言う拡張子が付いたファイルはどこにあるんですか?

ML の記事参照

http://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=072937

> にしのさんのソースではプロパティと大きさがバラバラです

実際にしたいことが分からないので、コンパイルできるかどうかを示したのでは?
Width や Height プロパティーの変更時に何をしたいのか分かれば別の解決方法
もあるかもしれません。

個人的には、TWinControl のような基本クラスから派生したコンポーネントを
つくる理由の方に興味があります。簡単ではないですよ。


るるとん@K  2004-02-11 02:18:41  No: 7037

この種類のファイルにはreadとかwriteが書いてないですね


jok  2004-02-11 02:21:31  No: 7038

>    property Width: Integer;
>
> とあるんですが・・・

TWinControl の Height と Width プロパティーは、派生もとの TControl から
受け継いだものです。上記の記述は可視性を変更しているのです。

うーむ、コンポーネントをつくるまえに、クラスについて勉強することを勧めます。


るるとん@K  2004-02-11 02:23:59  No: 7039

私はバージョン情報等のボタンに
MoneyGreenの平らなPanelに同じサイズのFlatなSpeedButtonをのせています
これをコンポにしたいのです

TWinControlから派生したのは単にPanelのParentにするだけだからです


るるとん@K  2004-02-11 02:25:49  No: 7040

>TWinControl の Height と Width プロパティーは、派生もとの TControl から
>受け継いだものです。上記の記述は可視性を変更しているのです。

私はTWinControlではなくTWinControlの継承元のTControlの内容を見たのですが?


にしの  2004-02-11 02:26:22  No: 7041

> にしのさんのソースではプロパティと大きさがバラバラです
大きさって元のWidthのことですか?
もともとあるWidthを使用していないのだから、違うのは当たり前です。
Widthは元からあるので、再定義すると言うことはそういうことです。
大きさをそろえたいのであれば、SWidthでどうにかすべきでしょう。
単純なソースを載せたまでですので。
# 細かいところは、るるとん@K さんが開示していないので誰にも解らないでしょう


jok  2004-02-11 02:26:59  No: 7042

わたしだったら TPanel から派生しますが。
コンストラクタを override するだけのような気がします。

> MoneyGreenの平らなPanelに同じサイズのFlatなSpeedButtonをのせています

「同じサイズのFlatなSpeedButtonをのせ」るのはどうしてですか?
パネルだけでは何ができなのですか?


にしの  2004-02-11 02:29:27  No: 7043

もしかして、Width変更時に何かしたいということですか?
そうであれば、わざわざプロパティを変更しなくても、WM_WINDOWPOSCHANGEDが飛んできたときにWidth, Heightを処理してやればよいかと。
# メッセージがあふれないように注意です。


るるとん@K  2004-02-11 02:31:25  No: 7044

>TWinControl の Height と Width プロパティーは、派生もとの TControl から
>受け継いだものです。上記の記述は可視性を変更しているのです。
TWinControlではWidthの可視性は変更されていません

>「同じサイズのFlatなSpeedButtonをのせ」るのはどうしてですか?
>パネルだけでは何ができなのですか?
Flatなボタンはマウスオーバー時に変化します


るるとん@K  2004-02-11 02:34:11  No: 7045

BevelOuterを使えば出来るんでしょうか?


るるとん@K  2004-02-11 02:38:40  No: 7046

>BevelOuterを使えば出来るんでしょうか?
なんか文字の位置もズレルみたいです


るるとん@K  2004-02-11 02:44:41  No: 7047

>わたしだったら TPanel から派生しますが。
必要なプロパティがColorとCaption、大きさ、位置のみだからです


にしの  2004-02-11 02:47:31  No: 7048

> 必要なプロパティがColorとCaption、大きさ、位置のみだからです

それならば、選択肢としてはTCustomPanelとなるのでは?


jok  2004-02-11 04:09:18  No: 7049

> TWinControlではWidthの可視性は変更されていません

それは失礼しました。*.int や *.pas が見れるといろんなことがわかりま
すよね。Grep するともっといろんなことがわかりますよ。

> 上記の記述は可視性を変更しているのです。

これは、ちゃんとした宣言部は上位クラスにありますよ、という意味です。
Width や Height を変更したとき、やりたいことは上にのせた SpeedButton の
サイズを変更したいからでしょうね。

はじめから、具体的な事柄について質問すると、まわりくどいやりとりをしなくて
すみます。まぁ、今回はソースを読めるようになったし、可視性の変更について
知ったことですし、収穫はおおきいでしょう。このような掲示板形式のQ&Aでも
人間同士がやりとりしているのですから、ちゃんと途中経過を報告しながら
やりとりすることは大切だと思いますよ。ソースはどこ? ということについて
いきなり

>    property Width: Integer;
>
> とあるんですが・・・

では、通りすがりさんのレスへの答えになってないと思います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加