![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Создание компонента [D7, WinXP]
legion33 © (2007-01-29 20:12:00)Создать компонент BrdImage, имеющий рамку, заданных толщины и цвета. Толщину и цвет рамки задавать с помощью свойств.
За основу береться готовый компонент Image.
legion33 (2007-02-01 23:18:00) [1]Извени конечно, но c ним (inherited) и без него одно и тоже! Это я так просто экспериментировал и ООП у меня плохо практики очень мало, преподы вредные.
Olivetti (2007-02-01 22:28:00) [2]procedure TBrdImage2.SetBorderColor(Value : TColor);
begin
inherited Invalidate;
end;
procedure TBrdImage2.SetBorderWidth(Value : byte);
begin
inherited Invalidate;
end;
Ты зачем везде пишешь inherited? Ты бы, прежде чем компоненты писать, изучил бы основы ООП. А то как-то нехорошо получается...
procedure TBrdImage2.SetBorderColor(Value : TColor);
begin
if (Value <> FBorderColor) then
begin
FBorderColor := Value;
Invalidate;
end;
end;
procedure TBrdImage2.SetBorderWidth(Value : byte);
begin
if (Value <> FBorderWidth) then
begin
FBorderWidth := Value;
Invalidate;
end;
end;
legion33 (2007-02-01 22:04:00) [3]Люди добрые вроде сделал как сказали, все получилось как-бы, но почему то я когда делаю новый ПРОЕКТ и ставлю этот компонент на форму то у меня начинает зависать DELPHI 7.
Вод код этой программы, посмотрите знающие люди в чем здесь проблема !!!
unit BrdImage2;
interface
uses
SysUtils, Classes, Controls, ExtCtrls, Windows,
Messages, Graphics, Forms, Dialogs, StdCtrls;
type
TBrdImage2 = class(TImage)
private
{ Private declarations }
FBorderColor : TColor;
FBOrderWidth : byte;
protected
{ Protected declarations }
procedure SetBorderColor(Value : TColor); //Ïðîöåäóðà çàïèñè
procedure SetBorderWidth(Value : byte); //Ïðîöåäóðà çàïèñè
public
{ Public declarations }
procedure Paint; override;
published
{ Published declarations }
property BorderColor: Tcolor read FBorderColor write SetBorderColor;
property BorderWidth: byte read FBorderWidth write SetBorderWidth;
constructor Create (aowner : TComponent); override;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('MyComponents11', [TBrdImage2]);
end;
Constructor TBrdImage2.Create(aowner:TComponent);
begin
inherited create(Aowner);
end;
procedure TBrdImage2.Paint;
begin
inherited Paint;
Canvas.Pen.Width := BorderWidth;
Canvas.Pen.Color := BorderColor;
Canvas.Rectangle(Canvas.ClipRect);
end;
procedure TBrdImage2.SetBorderColor(Value : TColor);
begin
inherited Invalidate;
end;
procedure TBrdImage2.SetBorderWidth(Value : byte);
begin
inherited Invalidate;
end;
end.
Olivetti (2007-01-31 22:21:00) [4]
property BorderColor: TColor read FBorderColor write FBorderColor;
property BorderWidth: byte read FBorderWidth write FBorderWidth;
замени на:
property BorderColor: TColor read FBorderColor writeSetBorderColor;
property BorderWidth: byte read FBorderWidth write SetBorderWidth;
и напиши методы соответствующие (SetXXXX), а то у тебя на изменение свойств не будет реакции. В методах этих вызывай Invalidate;
Olivetti (2007-01-31 22:18:00) [5]пишет ошибки непонимаю что он хочет от меня.
Вот так прям и пишет "ошибки"?
Поменяй:
procedure TPaint;
на
procedure Paint; override;
legion33 (2007-01-31 20:41:00) [6]Народ сделал вроде как, но наверноу мне кажется что что-то неправильно, пишет ошибки непонимаю что он хочет от меня. Подскажите
unit BrdImage1;
interface
uses
SysUtils, Classes, Controls, ExtCtrls, Windows, Messages,
Graphics, Forms, Dialogs, StdCtrls;
type
TBrdImage1 = class(TImage)
private
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
procedure TPaint;
published
{ Published declarations }
property BorderColor: TColor read FBorderColor write FBorderColor;
property BorderWidth: byte read FBorderWidth write FBorderWidth;
Constructor Create (aowner:TComponent); override;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('MyComponents', [TBrdImage1]);
end;
constructor TBrdImage1.Create(aowner:Tcomponent);
begin
inherited create(Aowner);
end;
procedure TBrdImage1.TPaint;
begin
inherited Paint;
Canvas.Pen.Width := BorderWidth;
Canvas.Pen.Color := BorderColor;
Canvas.Rectangle(Canvas.ClipRect);
end;
end.
Рамиль (2007-01-30 11:45:00) [7]Достаточно TGraphicControl, TImage тут не нужен и даже вреден.
RASkov (2007-01-30 00:53:00) [8]> [0] legion33 © (29.01.07 20:12)
TBrdImage = class(TImage)
....
published
property BorderColor: TColor read FBorderColor write SetBorderColor;
property BorderWidth: Byte read FBorderWidth write SetBorderWidth;
.......
end;
.............
procedure TBrdImage.Paint;
begin
Inherited Paint;
Canvas.Pen.Width:=BorderWidth;
Canvas.Pen.Color:=BorderColor;
Canvas.Rectangle(Canvas.ClipRect);
end;
Ну и в этом духе...
Юрий Зотов (2007-01-29 21:09:00) [9]> legion33 © (29.01.07 20:12)
И что?
Это Вы такое задание выдали? А кому?