PIPOTRON V1.4.2

cs_Christophe67 Messages postés 80 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 juin 2012 - 19 mars 2010 à 23:08
cs_Christophe67 Messages postés 80 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 juin 2012 - 24 mars 2010 à 12:25
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/51472-pipotron-v1-4-2

cs_Christophe67 Messages postés 80 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 juin 2012
24 mars 2010 à 12:25
v1.4.2

Bonjour à tous,

Je laisse le mode du source sur "débutant" malgré l'évolution du code grâce à vos contributions.
Merci à tous ceux qui ont participé à ce projet car j'ai beaucoup appris au fil des changements.

Cordialement.

Christophe
defis91 Messages postés 65 Date d'inscription samedi 29 octobre 2005 Statut Membre Dernière intervention 8 août 2011
24 mars 2010 à 02:00
C'est fou ce que pipotron aura fait papoter.
Christophe, tu peux enlever "débutant" à ton introduction.
L'évolution de ce code aura été vraiment intéressante à suivre.
A+
Dom
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
24 mars 2010 à 00:48
ceci n'a rien à voir avec une préférence personnelle ... le but étant d'apprendre quelque chose à un débutant alors autant lui montrer le chemin correct .. ces opérateurs ("is" & "as") sont mis à disposition pas Delphi afin de vérifier et de transtyper en toute sécurité des objets (voir l'aide de Delphi à ce sujet)
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
24 mars 2010 à 00:01
Oui je ne contrôle pas car on ne mets cette procedure QUE sur les listbox, donc vérif inutile à mon gout.
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
23 mars 2010 à 23:16
Salut,

voici une petite modification au code de JulioDelphi qui ne faisait pas de contrôle sur le type de la classe et une simplification de la procédure "BtnGenereClick" ...
je te laisse voir ça tout seul !!

procedure Tf_Main.BtnGenereClick(Sender: TObject);
var i : integer;
begin
// On va traiter les 9 TListBox
for i:=1 to 9 do
with TListBox(FindComponent('List'+IntToStr(i))) do
begin
// RandomRange renvoie un entier aléatoire entre 0 et le nombre d'expressions du TListBox
// qui va définir l'expression choisie
// On sélectionne l'expression choisie
ItemIndex := RandomRange(0, Items.Count);
// Et on sauvegarde le texte
Liste[i] := Items[ItemIndex];
end;
PrintPipo;
end;
// Procédure commune aux 9 TListBox, on récupère l'évènement et on sauvegarde
// l'expression à la position définie dans la propriété "Tag".
procedure Tf_Main.ListXClick(Sender: TObject);
begin
// On récupère l'évènement du TListBox
if (Sender is TListBox) then
begin
with (Sender as TListBox) do
// On définit l'expression sélectionnée
Liste[Tag] := Items[ItemIndex];
// On l'affiche dans le TMemo
PrintPipo;
end;
end;
cs_Christophe67 Messages postés 80 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 juin 2012
23 mars 2010 à 17:26
@P007TOD,

Merci pour la note, cà fait toujours plaisir ;)
cs_Christophe67 Messages postés 80 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 juin 2012
23 mars 2010 à 12:54
v1.4.1

Merci JulioDelphi,

J'ai hésité à faire cette modification jugeant que c'était une astuce d'initié mais après tout, comme je l'ai comprise en tant que débutant, çà ne devrait pas créer de problèmes aux autres. Donc modification faite !

A+

Christophe
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
22 mars 2010 à 22:18
Hello
Pourquoi autant de redondance ? Et si j'avais 1000 listes ?

procedure Tf_Main.List1Click(Sender: TObject);
begin
// On définit l'expression sélectionnée
Liste[1] := List1.Items[List1.ItemIndex];
// On l'affiche dans le TMemo
PrintPipo;
end;

fois 9 !!!
Je te propose de mettre dans chaque .TAG de tes listes leur index puis mettre cette procédure unique pour toutes les listes :

procedure Tf_Main.ListXClick(Sender: TObject);
var MaListe: TListBox;
begin
MaListe:= TListBox(Sender);
// On définit l'expression sélectionnée
Liste[MaListe.Tag] := MaListe.Items[MaListe.ItemIndex];
// On l'affiche dans le TMemo
PrintPipo;
end;

;)
p007tod Messages postés 6 Date d'inscription jeudi 18 mai 2006 Statut Membre Dernière intervention 1 mars 2024
22 mars 2010 à 19:33
bravo pour la réactivité.
cs_Christophe67 Messages postés 80 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 juin 2012
22 mars 2010 à 14:37
Bonjour et merci pour vos remarques,

Le code a été modifié selon la proposition de Dom et la position du programme définie à poScreenCenter.

A+

Christophe
defis91 Messages postés 65 Date d'inscription samedi 29 octobre 2005 Statut Membre Dernière intervention 8 août 2011
22 mars 2010 à 12:07
for i:=1 to 9 ! désolé j'avais ajouté 'è' et 'h'
comme quoi il faudrait déclarer une constante pour la taille du tableau voy.
A moins que quelqu'un ait une idée pour le rendre dynamique ?
Dom
defis91 Messages postés 65 Date d'inscription samedi 29 octobre 2005 Statut Membre Dernière intervention 8 août 2011
22 mars 2010 à 12:03
exact
je propose cela :

procedure Tf_Main.PrintPipo;
const voy:array [1..9] of char =('a','e','é','è','i','o','u','y','h');
var s:string; i:integer;
begin
// On affiche dans le TMemo l'ensemble des expressions choisies aléatoirement
s:=Format(PipoLine, [Liste[1], Liste[2], Liste[3], Liste[4], Liste[5], Liste[6], Liste[7], Liste[8], Liste[9]]);
for i:=1 to 7 do s:=StringReplace(s,'de '+voy[i],'d'''+voy[i],[rfReplaceAll]);
// Vide le composant TMemo de tout texte
Memo.Clear;
Memo.Lines.Add(s);
end;

A+
Dom
p007tod Messages postés 6 Date d'inscription jeudi 18 mai 2006 Statut Membre Dernière intervention 1 mars 2024
22 mars 2010 à 10:50
Bonjour
Bravo, on se régale. deux remarques dans les StringReplace il ne faut pas oublier les 'de é' et autres,par exemple "il convient de étudier" et d'autre part il vaut mieux utiliser la position de form poScreenCenter sinon quand on utilise deux écrans la form se centre sur les deux écrans et il y a la moitié sur chaque.
charles_ioda Messages postés 3 Date d'inscription dimanche 10 septembre 2006 Statut Membre Dernière intervention 23 juillet 2007
22 mars 2010 à 08:10
Mais alors qui a écrit le discourt de (Martine Aubry, François Bayrou, Xavier Bertrand)
Y aurait-il un nègre là-dessous ?
DRJEROME Messages postés 436 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 5 février 2015
21 mars 2010 à 17:10
Salut,

il y a quelques années j'avais vu dans Science et Vie un truc dans ce style qui permettait de créer du bla-bla qui se casait à toutes les sauces dans les discours, je ne l'ai jamais retrouvé (dans les années fin 70 ou début 80).

Je suis heureux de voir la création du présent Pipotron, super !

C'est génial ;)
cs_Christophe67 Messages postés 80 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 juin 2012
20 mars 2010 à 20:38
Re Dom,

Voilà j'ai intégré ton code , je l'ai juste mis à mon goût pour n'afficher qu'une fois le texte dans le TMemo.

Bonne soirée je ne veux pas louper france-angleterre ;)

A+

Christophe
cs_Christophe67 Messages postés 80 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 juin 2012
20 mars 2010 à 18:49
Merci Dom,

En effet je m'étais demander comment faire ce correctif pour que cela fasse plus français.
J'étais parti dans les StrCopy et tutti quanti mais en effet c'est plus simple en voyant ta solution.
Je me penche dessus demain pour l'intégrer à mon code.

En tout cas , merci ca me dépanne bien.
defis91 Messages postés 65 Date d'inscription samedi 29 octobre 2005 Statut Membre Dernière intervention 8 août 2011
20 mars 2010 à 17:39
Bonjour Christophe
Une minuscule contribution...

procedure Tf_Main.PrintPipo;
var s:string;
begin
// Vide le composant TMemo de tout texte
Memo.Clear;
// On affiche dans le TMemo l'ensemble des expressions choisies aléatoirement
Memo.Lines.Add(Format(PipoLine, [Liste[1], Liste[2], Liste[3], Liste[4], Liste[5], Liste[6], Liste[7], Liste[8], Liste[9]]));
s:=Memo.Text;
s:=StringReplace(s,'de a','d''a',[rfReplaceAll]);
s:=StringReplace(s,'de e','d''e',[rfReplaceAll]);
s:=StringReplace(s,'de i','d''i',[rfReplaceAll]);
s:=StringReplace(s,'de o','d''o',[rfReplaceAll]);
s:=StringReplace(s,'de u','d''u',[rfReplaceAll]);
Memo.Clear;
Memo.Lines.Add(s);
end;

Une autre, charger des fichiers pour initialiser les TListbox par les pipotrons du site :
http://bluepsi.free.fr/cybertechno/pipotron/pipotron.html

Jean-Pierre petit avait aussi fait un Logotron en Basic, dont on peut récupérer les phrases.
A+
Dom
cs_Christophe67 Messages postés 80 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 juin 2012
20 mars 2010 à 15:21
v1.1.1

Pour me rapprocher le plus possible de l'originale il est maintenant possible de choisir soi-même ses expressions.
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
20 mars 2010 à 14:15
Je n'ai pas regardé le code, mais l'idée j'adoooore !
Je le prends ! Merci
cs_Christophe67 Messages postés 80 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 juin 2012
20 mars 2010 à 11:21
Merci pour vos réponses,

J'ai en fait choisi un mixe de vos 2 codes en écrivant

procedure Tf_Main.BtnGenereClick(Sender: TObject);
var Num, i : integer;
Liste : array[1..9] of String;
begin
Memo.Clear;
for i:=1 to 9 do
begin
Num :=TListBox(FindComponent('List'+IntToStr(i))).Items.Count ;
Num := RandomRange(0, Num);
TListBox(FindComponent('List'+inttostr(i))).ItemIndex :=Num;
Liste[i]:=TListBox(FindComponent('List'+inttostr(i))).Items.Strings[Num];
end;
Memo.Lines.Add(Format(PipoLine, [Liste[1], Liste[2], Liste[3], Liste[4], Liste[5], Liste[6], Liste[7], Liste[8], Liste[9]]));
end;

Cela fonctionne très bien, merci encore.
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
20 mars 2010 à 09:36
salut
utilise findcomponent qui permet de retriuver un composnt par son nom
du genre:
for i:=1 to 9 do
begin
Num :=TListBox(FindComponent('List'+inttostr(i))).Items.Count ;
Num := RandomRange(0, Num);
TListBox(FindComponent('List'+inttostr(i))).ItemIndex :=Num;
TListBox(FindComponent('List'+inttostr(i))):=TListBox(FindComponent('List'+inttostr(i))).Strings[Num];
end;
je n'ai pas testé le code mais cela devrai marcher
jlne
Debiars Messages postés 285 Date d'inscription lundi 16 juin 2003 Statut Membre Dernière intervention 11 février 2018
20 mars 2010 à 09:26
Bonjour Christophe,
En réponse à ta demande je propose ceci :

Remplace Liste1 à Liste 9 par Liste : array[1..9] of string;

Ajoute la fonction suivante qui te renverra le nom de la ListBox à traiter :

function Tf_Main.List(no : byte) : TListBox;
begin
result := FindComponent('List'+ IntToStr(no)) as TListBox;
end;

et modifie la procédure BtnGenereClick comme ceci :

procedure Tf_Main.BtnGenereClick(Sender: TObject);
var Num,i : integer;
begin
// Vide le composant TMemo de tout texte
Memo.Clear;
for i := 1 to 9 do
begin
Num := RandomRange(0, List(i).Items.Count);
List(i).ItemIndex := Num;
Liste[i] := List(i).Items.Strings[Num];
end;
Memo.Lines.Add(Format(PipoLine, [Liste[1], Liste[2], Liste[3], Liste[4], Liste[5],
Liste[6], Liste[7], Liste[8], Liste[9]]));
end;

ça simplifie, n'est-ce pas ... et j'ai testé bien entendu.
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
20 mars 2010 à 02:51
Je n'ai pas encore regardé le code, désolé.

Mais je peux corriger un truc, c'est que l'idée originale vient d'un polytechnicien, il y a plusieurs décennies déjà.
A l'époque, la cible était plutôt les discours pseudo-scientifico-économico-politiques, si je me souviens bien.
Mais il aurait été vraiment marrant de mettre ça à la sauce "pseudo informaticien" (pour le fun ;)

Voilà pour la forme.
Pour le fond, j'ai confiance en l'avenir... ;)
cs_Christophe67 Messages postés 80 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 juin 2012
19 mars 2010 à 23:08
Bonjour à tous,

Je me doute qu'il doit y avoir le moyen d'optimiser la répétition de code suivante à l'aide d'une boucle:

...
Num := RandomRange(0, List2.Items.Count);
List2.ItemIndex := Num;
Liste2 := List2.Items.Strings[Num];
...

J'ai essayé avec for I := 1 to 9 do
et en remplacant les numéros par [i] mais çà n'allait pas.
Si une âme charitable veut bien m'initier ce n'est pas de refus.

Merci d'avance !
Rejoignez-nous