コンポーネントについて学習を始めたところです。
まず、親子関係なしで、トラックバーだけでやってみました。
トラックバーのスライダーが動くところにある選択領域の表示/非表示をさせるためのプロパティを付け加えたところ、できました。
次に、TPanelの上にTTrackBarを置き、同様に選択領域の表示/非表示ができるか、やってみました。
できませんでした。
自身のときの方法を、親子で用いてもだめなのでしょうか。
どのようにすれば実現できるのでしょうか。
教えてください。
以下がそのソースです。
-------------------------------------
unit PanelTrackBarEx02;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls,ComCtrls,StdCtrls,
CommCtrl;
type
TPanelTrackBarEx02 = class(TPanel)
private
{ Private 宣言 }
FTrackBar: TTrackBar;
FTrackBarSelectRange: Boolean;
procedure SetTrackBarSelectRange(const Value: Boolean);
protected
{ Protected 宣言 }
procedure CreateParams(var Params: TCreateParams); override;
public
{ Public 宣言 }
constructor Create( AOwner: TComponent); override;
published
{ Published 宣言 }
property TrackBarSelectRange: Boolean read FTrackBarSelectRange write SetTrackBarSelectRange;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Samples', [TPanelTrackBarEx02]);
end;
constructor TPanelTrackBarEx02.Create( AOwner: TComponent);
begin
inherited Create(AOwner);
FTrackBar:= TTrackBar.Create(self);
FTrackBar.Parent:= self;
end;
procedure TPanelTrackBarEx02.SetTrackBarSelectRange(const Value: Boolean);
begin
FTrackBarSelectRange:= Value;
ReCreateWnd;
end;
procedure TPanelTrackBarEx02.CreateParams(var Params: TCreateParams);
begin
inherited;
if not TrackBarSelectRange=true then
Params.Style:= Params.Style and not TBS_ENABLESELRANGE;
end;
end.
---------------------
procedure TPanelTrackBarEx02.CreateParams(var Params: TCreateParams);
begin
inherited;
if not TrackBarSelectRange=true then
Params.Style:= Params.Style and not TBS_ENABLESELRANGE;
end;
だと TPanelTrackBarEx02 の Params.Style を変更させているから
当然 TTrackBar の Param.Style は変更されないから
>次に、TPanelの上にTTrackBarを置き、同様に選択領域の表示/非表示ができるか、やってみました。
>できませんでした。
になる
>まず、親子関係なしで、トラックバーだけでやってみました。
>トラックバーのスライダーが動くところにある選択領域の表示/非表示をさ>せるためのプロパティを付け加えたところ、できました。
でできたやつを TPanelTrackBarEx02 の上に乗せれば できる。
KHE00221 さん
お答え、感謝します。
つまり、KHE00221 さんの言われるのは、
子コンポーネントに、本来持っていないプロパティを付け加え、
そのプロパティによって、子コンポーネントに影響を与えることはできない。
そのため、
あらかじめコンポーネントにプロパティを付け加え、影響が与えられるコンポーネントを作っておいてから、親コンポーネントの上に、子コンポーネントとして乗せる方法を取らざるを得ない、ということなのですね。
そうですか。
想像以上にコンポーネント開発は難しいようです。
KHE00221 さんの言われるとおり、やってみます。
ありがとうございました。
>想像以上にコンポーネント開発は難しいようです。
そんなことないよ。
クラスとコンポーネントを混同してるみたいだね。
CreateParamsは、TTrackBarクラスのメソッドであって、
TPanelTrackBarEx02クラスのメソッドではないということだよ。
そう? さん
お答え、感謝します。
当方、初心者のため、クラスやコンポーネントなどの理解がよくできておりません。
お手数、おかけします。
お世話になります。
つまり、
CreateParamsを、TPanelTrackBarEx02クラスのメソッドにすればいい、
ということでしょうか。
具体的に、コードを書いていただけないでしょうか。
よろしくお願いします。
>CreateParamsを、TPanelTrackBarEx02クラスのメソッドにすればいい、
>ということでしょうか。
≪民宿ダイヤモンド・ヘッド≫
真琴:「この人ホントに分かってないよ、それに、コードを書いてナンて甘えて…」
春子:「確かに分かってないね^^; このコンポのコードはこんなカンジに書かなくちゃネ」
type
TTrackBar = class(ComCtrls.TTrackBar)
protected
// CreateParamsは、TTrackBarのメソッド
procedure CreateParams(var Params: TCreateParams); override;
end;
TPanelTrackBar02 = class(TPanel)
private
FTrackBar: TTrackBar; // このTTrackBarは、上で宣言したクラス
..............
end;
procedure Register;
implementation
// CreateParamsは、TTrackBarのメソッド
procedure TTrackBar.CreateParams(var Params: TCreateParams);
begin
inherited;
if not TPanelTrackBar02(Parent).TrackBarSelectRange = True then
Params.Style:= Params.Style and not TBS_ENABLESELRANGE;
end;
constructor TPanelTrackBar02.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FTrackBar := TTrackBar.Create(Self);
with FTrackBar do begin
Parent := Self;
Top := Self.Top + 1;
Left := Self.Left + 1;
Height := Self.Height - 2;
end;
end;
.........
真琴:「ふ〜ん、コードも書いてあげるなんて、いつも優しいのね? ハルコさんって」
春子:「ん? どうした? マコト、今日は珍しくご機嫌ナナメだね、マコトらしくないよ」
真琴:「だぁって、ユウコったらヒドイんだもの、アタマきちゃう」
春子:「学校でユウコちゃんとケンカしたの? それが不機嫌の原因かぁ…、ねぇ、今日もお客様来てるンでしょ?」
真琴:「そう、サーファーのお客様が三人…」
春子:「だったら、ほら、スマイル、スマイル^^ 民宿の看板娘は"笑顔が命"だヨ」
真琴:「うん、じゃスマイル…こう?^へ^;」
春子:「ダメダメ、それじゃ笑顔がヒキツッテルって^^;」
真琴:「じゃぁ…、こう?^v^」
春子:「まだワザとらしいけどね^^; いつものカワイイ笑顔を…、そうそう、それよ」
≪富士子のアパート≫
富士子:「え? お金が欲しい? 毎月お小遣いあげてるでしょ?」
広海 :「あれだけじゃ、毎日の食材買うだけで消えちゃうよ、新しい靴を買いたいの、ボロだから」
富士子:「ねぇ、ヒロミ、ナンで"ヒモ"なわけ? もうチョット人生考えた方がイイんじゃない?」
広海 :「フジコがそう言ったンじゃん、"ヒモ"になれって…、忘れちゃった?」
富士子:「そう、確かにアタシがそう言った…」
広海 :「だよね?」
富士子:「だけどね、それは水泳の五輪候補のカッコいいヒロミを口説くための口からデマカセよ、まさかホントの"ヒモ"になるなんて…」
広海 :「でも"イイ買い物"だったンじゃないの? 自分専用の"優秀なシェフ"をこんな安く雇えて」
富士子:「ま、そういう考え方もあるけど…、じゃ、今夜はトビッきり美味しいモノ作ってよ?」
広海 :「だったら、モットお金…、美味しいもの作るには、それなりのイイ食材買わなきゃ」
富士子:「分かったわよ、ハイこれだけあればイイでしょ?」
広海 :「どうも^^…、じゃ、仕事ガンバッテ、行ってらっしゃ〜い^^」
富士子:「もし夕食がマズかったら、ホントに追い出すから(--;」
広海 :「そんなブス顔しないで、タレントだけじゃなく、スタイリストも"笑顔が命"、ハイ、笑顔、笑顔^^」
笑顔が命 さん
初心者のトンチンカンな質問にもかかわらず、丁寧に説明していただき、感謝しております。
書き換えなくてはならないところが何十行もあるのだろうと想像していました。
それが、わずか数行ですむなんて。
Delphi は奥が深いです。
コンポーネントをコンパイルしてみて、予想以上の動作をしています。
すばらしいです。
感動しています。
本当にありがとうございました。
ツイート | ![]() |