| Hej
 Jeg har lavet en komponent baseret på  tPanel for at lave en trykknap
 som har 2 mulige functioner. (Dette vælges med "OkButton").
 1. Knappen skifter farve når man trykker på den og skifter tilbage når
 den slippes.
 2: Knappen skifter farve når man trykker på den, men skifter først
 tilbage ved næste tryk.
 
 Mit problem er at jeg gerne ville "Override" den procedure der kaldes
 når man tildeler color en ny værdi (man kunne gætte på at den hed
 setcolor), men enten er proceduren ikke public eller også har den et
 navn som jeg ikke kan finde. Nu har jeg lavet en mindre elegant løsning
 for at huske den farve som der skal vendes tilbage til. Den virker dog
 ikke i alle situationer.
 Er der nogle der har en løsning.
 
 En ting der undre mig er at color bliver tildelt den farve der er valgt
 ved "design time" efter kaldet til "create", det kan jeg se ved at
 gemmes farven i proceduren "create" er den altid grå, uanset farven der
 vælges ved "design time".
 
 Carsten
 
 
 {------------------------------------------------------------------------------}
 unit ManButton;
 
 interface
 
 uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 ExtCtrls, DsgnIntf, BeInc;
 
 type
 TManButton = class(TPanel)
 private
 { Private declarations }
 FPressColor: tColor;
 ColorSave: tColor;
 fTextColor:tColor;
 fOkButton:boolean;
 fOkStatus:boolean;
 protected
 { Protected declarations }
 procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
 X, Y: Integer); override;
 procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
 X, Y: Integer); override;
 procedure OpdateStatus(value:boolean);
 public
 { Public declarations }
 ButtonValue:char;
 constructor Create(AOwner: TComponent); override;       { override
 to set new default }
 procedure pEnable(ena:boolean);
 published
 { Published declarations }
 property PressColor: tColor read FPressColor write FPressColor
 default Clyellow;
 property OkButton: boolean read fOkButton write fOkButton default
 false;
 property OkStatus: boolean read fOkStatus write OpdateStatus
 default false;
 end;
 
 procedure Register;
 
 implementation
 
 constructor TManButton.Create(AOwner: TComponent);
 begin
 inherited Create(AOwner);       { perform inherited initialization }
 FPressColor:=Clyellow;
 BeVelInner:=BvRaised;
 fTextColor:=font.Color;
 fOkStatus:=false;
 ColorSave:=0;
 end;
 
 procedure Register;
 begin
 RegisterComponents(cBE_Componenter, [TManButton]);
 RegisterPropertyEditor(TypeInfo(tcolor),TManButton, 'PressColor',
 TColorProperty);
 RegisterPropertyEditor(TypeInfo(Boolean),TManButton,'OK
 color',tIntegerProperty);
 end;
 
 procedure TManButton.OpdateStatus(value:boolean);
 Begin
 if ColorSave=0 then
 ColorSave:=Color;
 fOkStatus:=value;
 if fOkStatus then
 Color:=fPressColor
 else Color:=ColorSave;
 End;
 
 procedure TManButton.MouseDown(Button: TMouseButton; Shift: TShiftState;
 X, Y: Integer);
 Begin
 Inherited MouseDown(Button,Shift,X,Y);
 if ColorSave=0 then
 ColorSave:=Color;
 if fOkButton then
 begin
 if fOkStatus then
 Color:=ColorSave
 else Color:=fPressColor;
 fOkStatus:= not fOkStatus;
 end else
 begin
 Color:=fPressColor;
 end;
 BeVelInner:=BvLowered;
 BeVelOuter:=BvLowered;
 End;
 
 procedure TManButton.MouseUp(Button: TMouseButton; Shift: TShiftState;
 X, Y: Integer);
 Begin
 Inherited MouseUp(Button,Shift,X,Y);
 if not fOkButton then
 begin
 Color:=ColorSave;
 end;
 if enabled then
 BeVelInner:=BvRaised
 else BeVelInner:=BvNone;
 BeVelOuter:=BvRaised;
 End;
 
 procedure TManButton.pEnable(ena:boolean);
 Begin
 if ena then begin
 enabled:=true;
 font.Color:=fTextColor;
 BeVelInner:=BvRaised;
 end else begin
 enabled:=false;
 font.Color:=clGrayText;
 BeVelInner:=BvNone;
 end;
 End;
 
 end.
 
 
 |