Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.222.111.24] |
|
Сообщ.
#1
,
|
|
|
Сделал свой небольшой и первый компонент
Все ок, все работает но на форме не меняется Цвет компонента при смене цвета слева в свойствах. Перелопатил кучу компонентов - в одних property Colo:Tcolor в других сообщения CM_ но и там и там все работает type TColors = class(TPersistent) private FBgColor, FFillColor,FborderColor: TColor; protected Parent: TGraphicControl; procedure SetBgColor(col: TColor); procedure SetFillColor(col: TColor); procedure SetBorderColor(col: TColor); public constructor Create; published property bgColor: TColor read FBgColor write FBgColor default clBtnFace; property FillColor: TColor read FFillColor write FFillColor default clSkyBlue; property BorderColor: TColor read FBorderColor write FBorderColor default clGray; end; TCircleProgress = class(TGraphicControl) private FFont:TFont; FMin: Integer; FMax: Integer; FColors: TColors; FPosition: Integer; function GetPosition: Integer; procedure SetMin(Value: Integer); procedure SetMax(Value: Integer); function GetMin:integer; function GetMax:integer; procedure SetPosition(Value: Integer); procedure settings; procedure SetParams(AMin, AMax: Integer); { Private declarations } protected { Protected declarations } procedure Paint;override; public procedure Repaint;override; constructor Create(AOwner: TComponent); override; destructor Destroy; override; { Public declarations } published property Font:TFont read FFont write FFont; property Colors: TColors read FColors write FColors; property Min: Integer read GetMin write SetMin default 0; property Max: Integer read GetMax write SetMax default 100; property Position: Integer read GetPosition write SetPosition default 0; { Published declarations } end; и constructor TColors.Create; begin inherited; FBgColor:=clBtnFace; FFillColor:=clSkyBlue; FBorderColor:=clGray; end; constructor TCircleProgress.Create(AOwner: TComponent); begin inherited Create(AOwner); FColors:=TColors.Create; FColors.Parent:=(Self as TGraphicControl); Ffont:=TFont.Create; FFont.Name:='Lucida Console'; FFont.Size:=10; FFont.Style:=[fsBold]; Width := 50; Height := 50; FMin := 0; FMax := 100; settings; FPosition:=Fmin; end; procedure TColors.SetBorderColor(col: TColor); begin FBorderColor:=col; (Parent as TCircleProgress).Repaint; end; Компонент - круглый прогрессбар, как часы Что куда добавить, чтобы отрисовка происходила при смене свойств? и 2 вопрос. При содании я делаю FBgColor:=clBtnFace; тогда для чего property bgColor: ..... default clBtnFace; ? если не сделать присваивание - все черное... Что-то по созданию компонентов вообще информации не много нашел %( |
Сообщ.
#2
,
|
|
|
Цитата Wraith @ тогда для чего property bgColor: ..... default clBtnFace; ? для того чтобы класс знал какое значение (в данном случае цвет) использовать, если пользователь специально не определил значения для соответствующих свойств ... помимо этого значение принимается в случае, если пользователь присвает некорретные данные для данного свойства ... Цитата Wraith @ если не сделать присваивание - все черное... это объясняется просто, т.к. до присваивания у тебя незаданы значения используемых цветов то выбирается первый доступный системе цвет #000000 (константа clBlack), который сообственно черный ... кроме того если требуется определять цвета при создании твоего компонента это можно провести напрямую в его конструкторе манипулируя свойствами создаваемого подкласса TColors ... |
Сообщ.
#3
,
|
|
|
Вот так
TColors = class(TPersistent) //... private FBgColor, FFillColor,FborderColor: TColor; protected Procedure SetColor(Avalue:TColor);//Наш код //... published property bgColor: TColor read FBgColor write {наша вставка}SetColor default clBtnFace; end; Потом в коде //Наш код procedure TColors.SetColor(Avalue: TColor); begin //Тут отрабатываешь код изменения цвета. // то есть событие FBgColor:=Avalue; end; |
Сообщ.
#4
,
|
|
|
Аха про default понятно
ээ.. спасибо.... собственно я так делал, но ничего не менялось... странна %) вот если кому интересно, он конечно кривоват, но вдруг кому пригодится %) http://rapidshare.com/files/357994844/CircleProgress.zip.html http://ifolder.ru/16661940 |
Сообщ.
#5
,
|
|
|
Цитата Wraith @ При содании я делаю FBgColor:=clBtnFace; тогда для чего property bgColor: ..... default clBtnFace; ? если не сделать присваивание - все черное... Все правильно. Указание default само по себе не устанавливает значения св-ва, а лишь указывает на то, что если в дизайне св-во равно дефолтному, то его не нужно сохранять в dfm и соотв-но не нужно восстанавливать из dfm при загрузке формы. Поэтому все отличные от 0 дефолтные значения должны явно задаваться в конструкторе компонента Добавлено Цитата andrew.virus @ это объясняется просто, т.к. до присваивания у тебя незаданы значения используемых цветов то выбирается первый доступный системе цвет #000000 (константа clBlack), который сообственно черный ... Никто никакие доступные цвета не выбирает. Просто конструктор TObject по умолчанию зануляет все поля объекта и соотв-но FBgColor = 0 = clBlack |
Сообщ.
#6
,
|
|
|
Компонент использует GDI+, как же его посмотреть обычному пользователю ?
|