TPULSEBUTTON - RÉPÉTITION PROGRESSIVE D'UN EVENT PENDANT ONKEYDOWN

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 - 29 oct. 2006 à 18:03
psycho81 Messages postés 84 Date d'inscription mardi 4 mai 2004 Statut Membre Dernière intervention 17 février 2008 - 14 nov. 2006 à 18:02
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/40128-tpulsebutton-repetition-progressive-d-un-event-pendant-onkeydown

psycho81 Messages postés 84 Date d'inscription mardi 4 mai 2004 Statut Membre Dernière intervention 17 février 2008
14 nov. 2006 à 18:02
euh ... sors :)
psycho81 Messages postés 84 Date d'inscription mardi 4 mai 2004 Statut Membre Dernière intervention 17 février 2008
14 nov. 2006 à 18:00
Bah, on peut être un viellard atrabilaire (je viens tout juste de regarder la définition sur le wikipédia et ... dois je choisir inquiet ou irascible ? ^^ ) et être tout autant sympatique et cool :p

De plus, je te rapelle que si on se fie à nos descriptifs "codes sources", je suis nettement plus croulant et décrépi que toi avec près de 105 années :)

Bon j'avoue, j'ai un peu menti sur mon âge ... Mais bon, on m'a toujours dit que les femmes aimaient les gens plus agés qu'elles, alors j'ai mis le paquet :p

Bon trève de flood, je sort ->
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
14 nov. 2006 à 15:52
Hé, Psycho81, les histoires de famille, ça se traite en MP, lol.
Bon, maintenant tout le monde sait que je suis un vieillard atrabilaire.
Moi qui passait sur ce forum pour un mec sympa et cool, tu as définitivement ruiné ma réputation... ^^
Merci pour tes voeux :-)

P-S : il n'empêche, ton orthographe, maintenant, tu n'as pas trop à en rougir, hein ?
(tu n'as pas fait plus de 3 fautes, et encore, si tu t'étais arrêté à "je suis persuadé d'en avoir déjà laissé une ou deux dans ces simples lignes", tu n'en aurais que 2, mdr...)
A +

japee
psycho81 Messages postés 84 Date d'inscription mardi 4 mai 2004 Statut Membre Dernière intervention 17 février 2008
14 nov. 2006 à 14:12
Bonjour à tous !

Je me rapelle que, dans mon enfance, j'ai eu une longue série de lignes à écrire qui ressemblait étrangement :

"Je ne ferai plus de fautes d'orthographe à orthographe".

Quand je vois JAPEE, mon cher père, écrire "phaute d'ortografe", je peux vous assurer que je ne peux rester de glace :) Bon j'en dirai pas plus, je suis persuadé d'en avoir déjà laissé une ou deux dans ces simples lignes (malgrès une relecture minutieuse).

Celà étant, même si ici n'est pas la place pôur ce genre de discussion, bon anniversaire Japy !
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
31 oct. 2006 à 19:17
Salut Mauricio,

Tu me confirmes que ce composant peut avoir une utilité, j'en suis ravi.
Pour la led clignotante, je me trompe peut-être, mais je préfère laisser au développeur qui utiliserait mon TPulseButton la possibilité de lui affecter selon son choix 2 glyphs de leds (On et Off) qui seraient activées sur les évènements OnPulse (On) et MouseUp (Off), par exemple.
Par contre, je compte utiliser à terme ce bouton dans d'autres composants.
Merci pour ton appréciation. :-)

A +
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
31 oct. 2006 à 19:02
Ha oui, juste une dernière chose, je ne mets plus de note à personnne, pourquoi?
- certaines sources de m... qui ont pris 2 secondes et demi (le "et demi" est important, si si) se retrouvent avec des 9/10 ou 10/10, avec des "trop fort", "trop cool".
- Des sources très interessantes mais souvent incomplètes car ce sont des sources très complexes et de longue halaine (avec plusieurs mises à jour) se font massacrer par les "néophytes" (lol) de delphi qui pensent qu' ils sont des pros de la programmation : "Hein? pourquoi tu fais comme ça alors que comme ça c' est mieux ... Ça dégoute celui qui a fait l' effort alors que celui qui met un 3/10 le fait pour dire aux autres qu' il est meilleur quelque part mais on sait pas trop oú ...
Sur ce, et ne voulant pas relancer le débat des notes ... bravo à toi Japee, pas de note donc mais tu as compris ce que j' en pensais!
A+
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
31 oct. 2006 à 18:50
Salut Japee,
je te dis tout de suite que je n' ai pas compilé la source, j' ai juste regarder le code...
D' abord, je dois dire que j' en ai déjà eu besoin d' un compo comme celui-ci!
Il y a juste un truc qui à mon avis peut-être amélioré: il faudrait un effet visuel sur le bouton provoqué par le OnTimer, genre, changement de couleur, je pensais à un Bouton type Led qui clignoterait.
Oui je sais, le compo descend de TSpeedButton donc, à moins de réecrire le Onpaint ...
Bref, bravo!
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
31 oct. 2006 à 12:41
Salut Loda,
"Que ce passe-il si je set l'event à nil dans un des event?"
Oui, en effet. Tu viens de m'éclairer sur un point que je n'avais pas encore complètement assimilé. Merci, je vais corriger.
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
31 oct. 2006 à 12:03
salut,

2x "If then" vs AND:
J'ai pas du être très clair, mais je n'ai pas d'avis absolu sur ce genre de cas. Je ne faisssait que souligner que le comportement dépend des directive de compilation et donc le "gain" (hum, quel gain, un cycle machine, peut-être même moins) aussi.
Dans ce cas c'est pas important. Cela devient très important quand tu fais appel a des functions ou quand le deuxième test raise si le premier est faux.

Au temps que possible, je pense qu'il vaut mieux être indépendant des directives de compilation. Mais dans ce cas,.. pfff pour ce que ça change...



Sinon, un détail pour rendre ton code plus sur:

# procedure TPulseButton.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
# begin
# inherited;
# if Assigned(FOnPulse) then <-- a supprimer.
# FProgress.Enabled := False;
# end;

# procedure TPulseButton.TimerProgressTimer(Sender: TObject);
# begin
# FProgress.Interval := PROGRESS_INTERVAL div FRythm;
# if FRythm < RYTHM_MAX then { jusqu'à Interval = 10 }
# Inc(FRythm);
# if Assigned(FOnPulse) then <-- a ajouter
# FOnPulse(self);
# end;

je m'explique: Que ce passe-il si je set l'event à nil dans un des event? tu pourrais ne jamais desactiver le timer!
et donc, t'aurra des AV dans le OnTimer.
De plus, C'est pas important si tu reset timer.enabled pour rien.

bon code,
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
31 oct. 2006 à 00:06
Voilà, tout est corrygé, euh... corrigé !
Si vous voyez autre chose, mais je crois que là j'approche du but.
Je reverrai peut-être la progression du rythme, ça me parait un peu nerveux au départ.
Et j'appliquerai peut-être la suggestion de JulioDelphi...
Mais bon, je fais une pause.

Bonne nuit ^^
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
30 oct. 2006 à 22:06
JulioDelphi : je suis allé voir ton composant. J'aime bien le concept, je vais y réfléchir.

Cirec : ouais, c'est clair que si j'étais moitié aussi fort en prog qu'en orthographe...

D'ailleurs, à ce propos...

Loda : mais oui ! Tu as raison, je bloque OnMouseDown et OnMouseUp. Ca m'avait totalement échappé, je pensais m'en sortir facile avec inherited...
C'est génial de l'avoir remarqué, c'est exactement LA critique que j'attendais, lol.
C'est corrigé chez moi, ça marche au poil, dès que j'ai mis ça au propre, je balance la nouvelle mouture.

Et j'en prophyterait pour corrigé la phaute d'ortografe.

A + !
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
30 oct. 2006 à 13:04
super ce bouton =)
tu peux en faire une version de composant non visible ? pour ne pas avoir a reinstaller un 321654754eme bouton ?
regarde mon composant "TdbpDefaultButton" il prends en charge les BitBtn, SpeedButton et Button, comme ça, on install pas un autre bouton :p (par contre on pose sur la fiche le bouton de son choix + mon compo)

hs : je connaissait pas l'expression avec Arthur, mais je la garde, je la trouve excellente =)
Utilisateur anonyme
30 oct. 2006 à 11:29
Salut,

venant de Japee je pense plus à une faute d'ynnatention ;-)

@Delphiprog : "passons sur le définition"
définition n'est plus féminin ?

comme quoi personne n'est infaillible ... ^_^

bon restons serieux.

je suis du même avis que Loda quand à l'utilisation de deux If ...

et
procedure TPulseButton.TimerProgressTimer(Sender: TObject);
begin
FProgress.Interval := PROGRESS_INTERVAL div FRythm;
if FRythm < RYTHM_MAX then { jusqu'à Interval = 10 }
inc(FRythm);
FOnPulse(Self);
end;

suffit amplement:
puisque TimerProgressTimer n'est appelé que si le Timer est Enable
et le Timer est Enable que si FOnPulse est assigné

Donc pas de modifications indispensables ... ;-)
toujours verifier par vous même
@+
Cirec
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
30 oct. 2006 à 11:19
Salut Loda,

tout à fait d'accord avec toi quand à la directive de compilation pour le AND : raison de plus pour ne pas y voir un avantage par rapport à IF THEN. Je reste donc sur ma position ;-)

Par contre,je ne comprend pas vraiment où l'utilisation de OnMouseDown et OnMouseUp sont bloquées...
Je viens de tester vite fait avec mon composant installé, ces évènements sont bien pris en compte. Ils apparaissent dans l'inspecteur d'objet et réagissent normalement.
Je suis quand même troublé par l'ordre dans lequel les évènements sont détectés :
1: PulseButton1MouseDown
2: PulseButton1MouseUp
3: PulseButton1Pulse
Ca me parait assez bizarre au premier abord, bien que ça ne soit pas gênant : j'aurais pensé que Pulse aurait lieu avant Up. Enfin... je creuserai ça plus tard.

Ton commentaire m'encourage à aller plus loin.
D'autres composants gagneraient en ergonomie en utilisant ce TPulseButton. Je pense en particulier au TSpinEdit qu'il serait intéressant de recréer, ou au TMonthCalendar, et d'autres encore.

Merci à tous pour vos commentaires dont je tiens compte, soyez en sûrs, dans l'évolution et la finalisation de ce composant.
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
30 oct. 2006 à 09:59
salut,

en ce qui conserne inc(), c'est sensé être plus rapide. Je m'en sert dans les boucles, pour le rest je me dis que la différence doit même pas être mesurable.

"Si la 1ère condition n'est pas satisfaite, la 2ème ne sera pas testée," hum. si tu fait un AND, cela dépendra des directive de compiltation (evaluation boolean complet). Si tu fait deux if then, le deuxième ne serra pas évaluer si le premier est faux.

je trouve ton compo très sympa, et de plus c'est une super idée. Je déplore juste que tu "bloque" l'utilisation de OnMouseDown et Up. Pourquoi n'as tu pas fait un override de MouseDown?

bon code,
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
30 oct. 2006 à 00:27
f0xi:
Tu me suggères donc de remplacer
if Assigned(FOnPulse) then
if ssLeft in Shift then...
par
if Assigned(FOnPulse) and (ssLeft in Shift) then...
Si la 1ère condition n'est pas satisfaite, la 2ème ne sera pas testée, ok, ok... Mais je ne vois pas où le code serait optimisé par rapport à ma manière de procéder ?
Et tu me proposes de remplacer :
FRythm := FRythm + 1
par
inc(FRythm)
Même réflexion. J'utilise parfois, ou n'utilise pas Inc(), bien qu'en connaissant l'usage, car je ne suis pas forcément convaincu de l'avantage procuré par son utilisation...

Delphyprog :
Bon, j'ai pas trop la phryte en ce moment, le décalage horaire sans doute. Ce n'est pas une raison pour en prophyter et pour essayer de me faire péter la honte devant tout le monde, mdr...
De toute manière, je fais exprès de laisser quelques fautes par ci par là, pour ne pas te phyler trop de complexes ^^.
Ouais, pour RYTHM_MAX, j'ai dû me perdre en route, je ne me rappelle plus la logique qui me l'a fait déclarer en var...
Sinon, diantre, pourquoi m'affirmes-tu que les corrections données par f0xi sont indispensables ?

Caribensila :
Merci de prendre ma défense. Delphiprog est parfois un peu cruel avec nous, mais que veux-tu, ça l'aide a maintenir son ego intact. Il en a besoin afin de continuer dans sa dure tache d'admin d'un site qui sans lui partirait à vau-l'eau ^^...
Oui, la réalisation de composants, je pense qu'on peut plus s'arrêter de néophyter dès qu'on a commencé.
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
29 oct. 2006 à 23:03
Merci Japee. Tu nous offres :
1) L'envie de néophyter en création de composant.
2) Un joli exemple pour commencer à néophyter.


-> Delphiprog:
Pardon pour le néologisme (néophyter).
Mais si tu te mets à corriger les fautes d'orthographe, on n'a pas fini de "se faire appeler Arthur".

Étymologie de cette expression:
De l'allemand acht Uhr (« huit heures »), pendant la Seconde Guerre mondiale, en France occupée, le couvre-feu était à huit heures du soir. Les patrouilles allemandes avaient donc pour habitude de prévenir les retardataires en leur indiquant leur montre et en leur disant « acht Uhr ! », la sagesse populaire et le fort niveau en langue d'outre-Rhin des Français a fait le reste.

PS: Au fait, avez-vous mis vos pendules à l'heure d'hiver?

;)
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
29 oct. 2006 à 19:11
Mince, Japee qui fait une faute d'orthographe ? :p
> néophyte
(nom commun)
Nom donné anciennement dans l'Eglise aux nouveaux chrétiens.? Adepte nouveau d'une religion, d'une doctrine, d'un parti, etc.

Bon passons sur le définition (quoique...) et restons concentrés sur l'orthographe.

Les corrections données par Foxi (if Assigned(FOnPulse) ...) sont indispensables et je ne vois rien de plus à ajouter.

Pourquoi avoir déclaré RYTHM_MAX comme variable si elle n'est jamais affectée dans le reste du code ?

Sinon, l'idée est intéressante et apporte un petit plus au composant TSpeedButton un peu trop...statique !
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
29 oct. 2006 à 18:05
procedure TPulseButton.TimerProgressTimer(Sender: TObject);
begin
if Assigned(FOnPulse) then begin
FProgress.Interval := PROGRESS_INTERVAL div FRythm;
if FRythm < RYTHM_MAX then { jusqu'à Interval = 10 }
inc(FRythm);
FOnPulse(Self);
end;
end;
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
29 oct. 2006 à 18:03
pas mal ...


procedure TPulseButton.PBMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Assigned(FOnPulse) and (ssLeft in Shift) then begin
FOnPulse(self);
FRythm := RYTHM_MIN;
FProgress.Enabled := True;
end;
inherited;
end;


procedure TPulseButton.TimerProgressTimer(Sender: TObject);
begin
if Assigned(FOnPulse) then begin
FProgress.Interval := PROGRESS_INTERVAL div FRythm;
if FRythm < RYTHM_MAX then { jusqu'à Interval = 10 }
inc(FRythm);
end;
end;
Rejoignez-nous