/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Trykknap med farve
Fra : Carsten


Dato : 20-08-04 07:11

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.

 
 
Harald (20-08-2004)
Kommentar
Fra : Harald


Dato : 20-08-04 11:31

"Carsten" <mail@no-mail.dk> skrev i en meddelelse
news:412595e6$0$212$edfadb0f@dread16.news.tele.dk...
> 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.

Den hedder SetColor og befinder sig helt oppe i TControl klassen, nu er jeg
ude i noget jeg ikke har rodet så meget med men du kan vel Override den
sådan:

property Color write SetColor;

og så lave en ny SetColor procedure.

Mvh
HK



Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409079
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste