|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Досуп к методу родительского контрола
Доброго времени суток!
Помогите, пожалуйста, новичку в разработке компонента! Вопрос: Как с класса-потомка запустить метод invalidate в родительском классе? Например, как написать Код:
procedure TTitle.SetCaption(Value: string); begin FCaption := Value; TDNCommentaryButton.Invalidate -- ? end; Листинг компонента приведен ниже Код:
unit DNCommentaryButton; interface uses SysUtils, Classes, Controls, Messages, Graphics, Windows, ExtCtrls; type TTextAligment = (caLeft, caRight, caMiddle); TTextVAligment = (caTop, caBottom, caCentre); TPaddingCaption = class(TPersistent) private FpcLeft, FpcRight, FpcTop, FpcBottom: Integer; procedure SetpsLeft(Value: Integer); procedure SetpsRight(Value: Integer); procedure SetpsTop(Value: Integer); procedure SetpsBottom(Value: Integer); published property pcLeft: Integer read FpcLeft write SetpsLeft; property pcRight: Integer read FpcRight write SetpsRight; property pcTop: Integer read FpcTop write SetpsTop; property pcBottom: Integer read FpcBottom write SetpsBottom; end; { -- Title -- Заголовок -- } TTitle = class(TPersistent) private FFont: TFont; FCaption: string; FTextAligment: TTextAligment; FTextVAligment: TTextVAligment; procedure SetCaption(Value: string); published { Published declarations } property Font: TFont read FFont write FFont; property Caption: string read FCaption write SetCaption; property TextAligment: TTextAligment read FTextAligment write FTextAligment; property TextVAligment: TTextVAligment read FTextVAligment write FTextVAligment; end; // { -- Commentary -- Примечание -- } // TCommentary = class(TPersistent) // private // published // end; // { -- BackgroundImage -- Фоновый рисунок -- } // TBackgroundImage = class(TPersistent) // private // { Private declarations } // public // published // { Published declarations } // end; { -- TDNCommentaryButton -- } TDNCommentaryButton = class(TCustomControl) private { Private declarations } FTitle: TTitle; FPaddingCaption: TPaddingCaption; protected { Protected declarations } r: TRect; procedure SetTitle(Value: TTitle); procedure SetPaddingCaption(Value: TPaddingCaption); public { Public declarations } procedure Paint; override; constructor Create(AOwner: TComponent); override; destructor Destroy; override; published { Published declarations } property Align; property ParentFont; property ParentShowHint; property ShowHint; property Visible; property OnClick; property Title: TTitle read FTitle write SetTitle; property PaddingCaption: TPaddingCaption read FPaddingCaption write SetPaddingCaption; end; procedure Register; implementation procedure Register; begin RegisterComponents('DNControls', [TDNCommentaryButton]); end; { TDNCommentaryButton } constructor TDNCommentaryButton.Create(AOwner: TComponent); begin inherited Create(AOwner); ControlStyle := ControlStyle + [csOpaque]; FPaddingCaption := TPaddingCaption.Create; FTitle := TTitle.Create; end; destructor TDNCommentaryButton.Destroy; begin inherited Destroy; end; procedure TDNCommentaryButton.Paint; var X: Integer; Y: Integer; begin inherited Paint; r := ClientRect; SetBkMode(Canvas.Handle, TRANSPARENT); // Caption -- Заголовок Canvas.Font := Font; case FTitle.TextAligment of caLeft: X := FPaddingCaption.FpcLeft; caRight: X := Self.Width - Canvas.TextWidth(FTitle.FCaption) - FPaddingCaption.FpcRight; caMiddle: X := (Width div 2) - (Canvas.TextWidth(FTitle.FCaption) div 2); end; case FTitle.FTextVAligment of caTop: Y := FPaddingCaption.FpcTop; caBottom: Y := Self.Height - Canvas.TextHeight(FTitle.FCaption) - FPaddingCaption.FpcBottom; caCentre: Y := (Height div 2) - (Canvas.TextHeight(FTitle.FCaption) div 2); end; Canvas.TextOut(X, Y, FTitle.Caption); end; procedure TDNCommentaryButton.SetPaddingCaption(Value: TPaddingCaption); begin FPaddingCaption := Value; Invalidate; end; procedure TDNCommentaryButton.SetTitle(Value: TTitle); begin FTitle := Value; Invalidate; end; { TPaddingCaption } procedure TPaddingCaption.SetpsBottom(Value: Integer); begin FpcBottom := Value; end; procedure TPaddingCaption.SetpsLeft(Value: Integer); begin FpcLeft := Value; end; procedure TPaddingCaption.SetpsRight(Value: Integer); begin FpcRight := Value; end; procedure TPaddingCaption.SetpsTop(Value: Integer); begin FpcTop := Value; end; { TTitle } procedure TTitle.SetCaption(Value: string); begin FCaption := Value; end; end. |
#2
|
||||
|
||||
создать у TTitle поле FParent и передать его в конструкторе. в SetCaption вызвать нужный у FParent.
Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
dviper (16.11.2012)
|
#3
|
|||
|
|||
Я новичок в этом деле! Если не трудно, можно по подробнее...?!
|
#4
|
||||
|
||||
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TMetro2033 = class private FParent: TWinControl; FCaption: String; procedure SetCaption(Value: String); public property Caption: String read FCaption write SetCaption; constructor Create(AParent: TWinControl); end; TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} { TMetro2033 } constructor TMetro2033.Create(AParent: TWinControl); begin inherited Create; FParent:=AParent; end; procedure TMetro2033.SetCaption(Value: String); begin if Value<>FCaption then begin FCaption:=Value; FParent.Invalidate; end; end; { TForm1 } procedure TForm1.FormCreate(Sender: TObject); begin with TMetro2033.Create(Self) do begin Caption:='Metro2033'; end; end; end. Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
dviper (16.11.2012)
|
#5
|
|||
|
|||
Тема закрыта
Для тех, кому это интересно!
Ниже приведен рабочий код: Код:
unit DNCommentaryButton; interface uses SysUtils, Classes, Controls, Messages, Graphics, Windows, ExtCtrls; type TTextAligment = (caLeft, caRight, caMiddle); TTextVAligment = (caTop, caBottom, caCentre); TPaddingCaption = class(TPersistent) private FpcLeft, FpcRight, FpcTop, FpcBottom: Integer; procedure SetpsLeft(Value: Integer); procedure SetpsRight(Value: Integer); procedure SetpsTop(Value: Integer); procedure SetpsBottom(Value: Integer); published property pcLeft: Integer read FpcLeft write SetpsLeft; property pcRight: Integer read FpcRight write SetpsRight; property pcTop: Integer read FpcTop write SetpsTop; property pcBottom: Integer read FpcBottom write SetpsBottom; end; { -- Title -- Заголовок -- } TTitle = class(TPersistent) private FFont: TFont; FCaption: string; FParent: TWinControl; FTextAligment: TTextAligment; FTextVAligment: TTextVAligment; public procedure SetCaption(Value: string); constructor Create(AParent: TWinControl); published { Published declarations } property Font: TFont read FFont write FFont; property Caption: string read FCaption write SetCaption; property TextAligment: TTextAligment read FTextAligment write FTextAligment; property TextVAligment: TTextVAligment read FTextVAligment write FTextVAligment; end; // { -- Commentary -- Примечание -- } // TCommentary = class(TPersistent) // private // published // end; // { -- BackgroundImage -- Фоновый рисунок -- } // TBackgroundImage = class(TPersistent) // private // { Private declarations } // public // published // { Published declarations } // end; { -- TDNCommentaryButton -- } TDNCommentaryButton = class(TCustomControl) private { Private declarations } FTitle: TTitle; FPaddingCaption: TPaddingCaption; protected { Protected declarations } r: TRect; procedure SetTitle(Value: TTitle); procedure SetPaddingCaption(Value: TPaddingCaption); public { Public declarations } procedure Paint; override; constructor Create(AOwner: TComponent); override; destructor Destroy; override; published { Published declarations } property Align; property ParentFont; property ParentShowHint; property ShowHint; property Visible; property OnClick; property Title: TTitle read FTitle write SetTitle; property PaddingCaption: TPaddingCaption read FPaddingCaption write SetPaddingCaption; end; procedure Register; implementation procedure Register; begin RegisterComponents('DNControls', [TDNCommentaryButton]); end; { TDNCommentaryButton } constructor TDNCommentaryButton.Create(AOwner: TComponent); begin inherited Create(AOwner); ControlStyle := ControlStyle + [csOpaque]; FPaddingCaption := TPaddingCaption.Create; FTitle := TTitle.Create(Self); end; destructor TDNCommentaryButton.Destroy; begin inherited Destroy; end; procedure TDNCommentaryButton.Paint; var X: Integer; Y: Integer; begin inherited Paint; r := ClientRect; SetBkMode(Canvas.Handle, TRANSPARENT); // Caption -- Заголовок Canvas.Font := Font; case FTitle.TextAligment of caLeft: X := FPaddingCaption.FpcLeft; caRight: X := Self.Width - Canvas.TextWidth(FTitle.FCaption) - FPaddingCaption.FpcRight; caMiddle: X := (Width div 2) - (Canvas.TextWidth(FTitle.FCaption) div 2); end; case FTitle.FTextVAligment of caTop: Y := FPaddingCaption.FpcTop; caBottom: Y := Self.Height - Canvas.TextHeight(FTitle.FCaption) - FPaddingCaption.FpcBottom; caCentre: Y := (Height div 2) - (Canvas.TextHeight(FTitle.FCaption) div 2); end; Canvas.TextOut(X, Y, FTitle.Caption); end; procedure TDNCommentaryButton.SetPaddingCaption(Value: TPaddingCaption); begin FPaddingCaption := Value; Invalidate; end; procedure TDNCommentaryButton.SetTitle(Value: TTitle); begin FTitle := Value; Invalidate; end; { TPaddingCaption } procedure TPaddingCaption.SetpsBottom(Value: Integer); begin FpcBottom := Value; end; procedure TPaddingCaption.SetpsLeft(Value: Integer); begin FpcLeft := Value; end; procedure TPaddingCaption.SetpsRight(Value: Integer); begin FpcRight := Value; end; procedure TPaddingCaption.SetpsTop(Value: Integer); begin FpcTop := Value; end; { TTitle } constructor TTitle.Create(AParent: TWinControl); begin inherited Create; FParent := AParent; end; procedure TTitle.SetCaption(Value: string); begin FCaption := Value; FParent.Invalidate; end; end. Огромный Респект NumLock-у!!! Последний раз редактировалось dviper, 16.11.2012 в 10:52. |