TSPEEDBUTTON TYPE VA-ET-VIENT

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 - 13 août 2007 à 02:16
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 - 13 août 2007 à 02:23
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/43738-tspeedbutton-type-va-et-vient

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
13 août 2007 à 02:23
un peu leger ...
pas trés interressant ... (s'obtient aussi facilement en mode conception)

ne merite pas le niveau initié.

la propriété Hint2 doit etre de type String directement tout comme Hint.

tu n'indente toujours pas ton code.

tu ne devrais pas utiliser la propriété Tag pour le changement d'etat mais une variable privée de type boolean.

le gestionnaire OnClick ne doit pas etre appeler par la procedure Click surchargée ! il faut appeler la procedure Click de l'ancetre (TControl) qui elle se charge d'appeler le gestionnaire d'evenement de façon adequate. de plus les procedures et fonctions ne sont pas declarable en zone publiées ...

ce qui fait que ton composant devrait plus ressembler a cela :

(en version ameliorée sans limite de Caption et de Hint)...

type
TMultiCapSpdBtn = class(TSpeedButton)
private
fCaptionsAndHints : TStrings;
fStIndex : integer;
procedure SetStrings(Value : TStrings);
protected
procedure ChangeCaption; virtual;
procedure DoCaptionsChange(Sender : TObject);
public
Constructor Create (AOwner:Tcomponent); Override;
Destructor Destroy; Override;
Procedure Click; override;
published
Property CaptionsAndHints : TStrings read fCaptionsAndHints write SetStrings;
end;

constructor TMultiCapSpdBtn.Create(Aowner:TComponent);
begin
inherited Create(Aowner);
AllowAllUp := True;
ShowHint := True;
fStIndex := 0;
fCaptionsAndHints := TStringList.Create;
(fCaptionsAndHints as TStringList).OnChange := DoCaptionsChange;
end;

destructor TMultiCapSpdBtn.Destroy;
begin
fCaptionsAndHints.Free;
inherited Destroy;
end;

procedure TMultiCapSpdBtn.Click;
begin
if fCaptionsAndHints.Count > 0 then
begin
fStIndex := (fStIndex + 1) mod fCaptionsAndHints.Count;
ChangeCaption;
end;
Inherited Click;
end;

procedure TMultiCapSpdBtn.DoCaptionsChange(Sender: TObject);
begin
ChangeCaption;
end;

procedure TMultiCapSpdBtn.SetStrings(Value: TStrings);
begin
fCaptionsAndHints.Assign(Value);
end;

procedure TMultiCapSpdBtn.ChangeCaption;
var SeparatorPos : integer;
begin
SeparatorPos := Pos('|',fCaptionsAndHints[fStIndex]);
Caption := copy(fCaptionsAndHints[fStIndex], 1, SeparatorPos-1);
if SeparatorPos <> 0 then
Hint := copy(fCaptionsAndHints[fStIndex], SeparatorPos+1, Length(fCaptionsAndHints[fStIndex]) - SeparatorPos)
else
Hint := '';
end;
Rejoignez-nous