RIEN RIEN RIEN RIEN RIEN RIEN RIEN RIEN RIEN RIEN RIEN RIEN RIEN RIEN RIEN RIEN

JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 - 29 janv. 2005 à 13:42
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 - 2 févr. 2005 à 15:42
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
2 févr. 2005 à 15:42
Paître ne se conjugue pas au passé simple. L'intérêt était tout là...

Si le grammairiens ne rajoutent pas de verbes irréguliers souvent, au moins l'utilisateur peut être intéressé de les éditer. D'où l'utilité de la TStringList.

Je cite: «Mais toutes ces idées n'ont rien à faire sur ce site: cela ne sert a rien de poster 2 fois le meme prog.» ??? Tout dans le même prog par exemple avec des menus qui sélectionnent la langue. On aurait des fichiers CSV qu'il serait facile de gérer des listes dont le nom de fichier est particulier.

«c'est (Sender as TButton).Caption qu'il faut utiiser à la place de TButton(Sender).Caption»
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
1 févr. 2005 à 00:20
Pour Debiars >
"Troller": amener des arguments dans une discussion, qui vont enflammer le propos, au point qu'un admin va être obligé d'intervenir avant que l'échange ne devienne incontrôlable.
Un exemple de "troll" classique étant les échanges "amicaux" entre partisans de Windows de Microsoft, MacOs de Apple, et Linux, les derniers se retrouvant volontiers dans le même camp pour taper sur les premiers, va comprendre pourquoi, lol (mort de rire).
Je crois que l'origine vient du fait que ça devient "trop laid".
Si quelqu'un a une autre explication...
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
1 févr. 2005 à 00:03
florenth> la propriété Position du Form, tu peux la déterminer avec l'inspecteur d'objets, tout simplement.
Réglé sur "poScreenCenter", ça me paraît assez cohérent, la propriété étant d'office sur poDesigned.
On va dire que par exemple, ça évite en l'occurence que le form s'ouvre n'importe où, là ou tu l'as laissé au moment de la conception... you see what I mean ?
Je progresse dans ma révision des verbes irréguliers, mais y'a encore du boulot ;)
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
31 janv. 2005 à 23:48
Ben pour info, la propriété AutoCheck d'un TMenuItem n'existe pas sous Delphi 4 pro. On fait avec (ou sans, pour être plus exact, lol).
On souffre, quoi, avec nos vieilles versions de Delphi...
Pourvu qu'on soit pas trops envahis de codes en delphi 2005, c'est tout ce que j'espère. Sinon, on s'adapte :(
Ca va trop vite, les mecs...
.net, pas convaincu, win xp non plus, mais enfin, je veux pas troller... ;)
Hein, pardon ....
Ou ca qu'il n'y a pas de Passé Simple ???

GrandVizir > Ah, OK.

Sinon, pour les conjugaisons francaises, pourquoi pas.
Ne me parlez pas de STARKE VERBEN !!! Je les hais.

Mais toutes ces idées n'ont rien à faire sur ce site: cela ne sert a rien de poster 2 fois le meme prog.

Sinon, comment as tu deviné que j'avais Delphi 7 ?? Surtout que ce prog vient tout droit de la version 6 !!!
(sauf les correctons de JulioDelphi).

Mais au fait: si j'ai bien tout compris, c'est (Sender as TButton).Caption qu'il faut utiiser à la place de TButton(Sender).Caption ??

@ ++ Florent
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
31 janv. 2005 à 20:16
Autre chose : la conjugaison de ce verbe (paître) au passé simple est tout simplement impossible car..... Il n'a pas de passé simple !!! (pas de temps composés d'ailleurs ! ;) )

++
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
31 janv. 2005 à 20:12
C'est JulioDelphi qui en parlait.
Je suis entierement d'accord avec toi grandvizir, mais où as tu vu un "TMenuItem(sender).tag" dans mon code ??

Même dans la 1ere version il n'y avait qu'un "(Sender as TMenuItem).Tag".

Explique moi donc pourquoi tu as mis cette remarque qui m'aura quand meme apris quelque chose.

D'accord sur la comparaison avec Format().

Mais par contr en ce qui concerne la liste de verbes et ton TStringList, je n'y reviens pas: les grammairiens n'ajoutent pas des verbes tous les jours !!
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
31 janv. 2005 à 20:01
Complètement d'accord avec TStringList :)

Sinon, le test de la rapidité de Format est très concluant ;)

PS : La propriété Autocheck existe sour D6

@+
Nico
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
31 janv. 2005 à 19:41
Pour le ARRAY, autant prendre un TStringList qui est une variable infiniment extensible (dans la limite du raisonnable tout de même). Jouons après avec les fonctions POS, COPY et DELETE pour extraire ce que l'on veut.

Juste pour info:
"TMenuItem(sender).tag" <=> "(Sender as TMenuItem).Tag"

L'équivalence n'est en fait pas vraiment juste. Prenez un nouveau projet, et insérez un TButton dans la fenêtre. On garde les noms de composant par défaut. Créon (le roi) un évènement OnCreate sur Form1, et tapons:

procedure TForm1.FormCreate(Sender: TObject);
var obj : TObject;
begin
obj:=Button1;
{#1} ShowMessage(IntToStr(TMenuItem(obj).Tag));
{#2} ShowMessage(IntToStr((obj as TMenuItem).Tag));
end;

Pour la ligne #1, aucune erreur n'est générée et ça affiche 0. Dans le second cas, on a une exception EInvalidCast ("transcryptage de classe incorrect"). Entre nous, l'idée #1 est complètement nulle. TMenuItem ne dérive pas de TButton et inversement. Moi, je préfère largement utiliser le petit mot "AS". Pourquoi alors existerait-il dans Delphi si on peut faire autrement avec des parenthèses ? Au moins, ce AS provoque des exceptions lorsque cela est requis et c'est très bien pour repérer les erreurs qui ont osé nous échapper.

Vous me direz: pourquoi tu nous embête avec tes histoires puisqu'ici on est sûr que Sender est un TMenuItem ? Oui, mais le jour où vous universaliserez (ou partagerez) votre Sender entre plusieurs classes différentes qui n'ont aucun rapport entre elles, alors il ne faudra pas s'étonner si ça bugge.

NOTE: Dans le cas «if (Sender is TMenuItem) then (Sender as TMenuItem).[...]», on pourrait très bien avoir «if (Sender is TMenuItem) then TMenuItem(Sender).[...]» car là on est sûr de la chose.

Comme indiqué à divers endroits, lorsqu'on utilise le mot AS, il faut toujours utiliser des parenthèses afin d'éviter des malheureuses compilations.

*************
Qui l'eût cru ?

function IntToStr(Value:Integer):string;
begin
FmtStr(Result,'%d',[Value]);
end;

Remarquons: FmtStr = Format.

*************
Petit test de performances. Il faut une fenêtre et deux boutons:

procedure TForm1.Button1Click(Sender: TObject);
var t0, t, f : Int64;
i : integer;
s : string;
begin
QueryPerformanceFrequency(f);
QueryPerformanceCounter(t0);
for i:=0 to 15000000 do
begin
s:='';
s:='Actuellement, i vaut '+IntToStr(i)+'.';
end;
QueryPerformanceCounter(t);
ShowMessage(FormatFloat('0.000 s', (t-t0)/f));
end;

procedure TForm1.Button2Click(Sender: TObject);
var t0, t, f : Int64;
i : integer;
s : string;
begin
QueryPerformanceFrequency(f);
QueryPerformanceCounter(t0);
for i:=0 to 15000000 do
begin
s:='';
Format('Actuellement, i vaut %d.',[i])
end;
QueryPerformanceCounter(t);
ShowMessage(FormatFloat('0.000 s', (t-t0)/f));
end;

Le s:='' est là pour tenter de ralentir.

Résultat:
> Concaténation avec IntToStr: 14,459 secondes
> Format de JulioDelphi: 11,628 secondes

Ne pas se moquer si vous avez des temps moindres...

*************
Je cite: «mais les MenuItem ont une propriété "autocheck" qui evite ça». Ca n'existe pas sous D3, D4 (japee?), D5, et peut-être pas non plus sous D6 (DelphiProg?)... Tu as donc D7, mais ça on le savait !

*************
Sinon, j'attend une version "STARKE VERBEN", voire même "LES CONJUGAISONS FRANCAISES".
Entraînement: conjuger PAÎTRE au passé simple. Il faut ouvrir un bouquin pour vérifier.
Tiens je ne la connaissais pas celle là ...
Enfin, je ne m'y été jamais interressé.

Par contre, j'en connais un qui va se faire un malin plaisir (!) de réviser ces fameux verbes ;-)

Florent
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
30 janv. 2005 à 15:32
euh... en delphi :
Form1.Position := poScreenCenter;
mais tu avais compris, hein ?
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
30 janv. 2005 à 15:29
La note que j'ai obtenu au test : 3/10 :(
La note que j'attribue à ton code : 9,5/10
Fallait mettre Form1.Position = poScreenCenter, non mais... ;)

Bravo, Florenth, utile (!) et bien réalisé.
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
29 janv. 2005 à 17:34
mais j'ai deja du le faire pour lire le .pas, c'est ça qui m'embette ;)
je prefere lisre le .pas via le site (merci membre club) et apres la MAJ, je prends le bon zip ;p
allez je prends ça bientot
OK c'est tout bon.
Mais maintenant julioDelphi, tu peux le télécharger le .zip puisqu'il n'a plus d'accents

@ ++ Florent
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
29 janv. 2005 à 16:34
7) et bien j'imagine que ça :
Demarrage10Verbes.Checked
Demarrage20Verbes.Checked
ce sont deux TMenuItem 'normaux', j'entends par là, ni "autochecked" ni "radioitem"
donc si tu veux, tu mets ces deux props à "true" et tu pourras ajouter mon 'else' au milieu =)

capicce ?
Merci à toi aussi Delphiprog.

Julio > Pour le 7) je parlait de cela : "et ces items peuvent etre des radioitems si ce n'est pas le cas".

Merci d'avoir pris la peine de lire tout le .pas !

Florent
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
29 janv. 2005 à 16:21
7) tu mets un if, si il est vrai, tu re fait un if, a priori ce if sera forcement faux si ton premier if est vrai ! donc tu mets un ELSE entre els deux comme ça, si le 1er est true, il saute le reste
8) ok je vois
9) oui comme tout le reste de mes commentaires puisque ton prog marche ! mais avec StrToIntDef pas besoin de générer des exception et de les catcher =)
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
29 janv. 2005 à 15:40
Très intéressant et très utile.
Merci Florenth.
Merci JulioDelphi pour tes commentaire constructifs.
Je vais voir ce que je peux faire.
Je répare immédiatement le pb avec les accents.

Merci pour le Format() ;-)
super le truc du Tag, je n'y avais jamais pensé.. ca va me faire modifier des sources ca !!

Mais je vais préferer ta 2eme solution (celle du Inputbox)

concernant ton histoire sur le 7eme commentaire, je n'ai pas compris ce que tu voulais dire.

8) lol mais je charchait plutot une constante toute faite pour s'en souvenei plus facilement

9) Cela revient au même.

Bon je m'attele au travail ...

PS : Pourquoi faite un tableau dynamique ?? normalement on ne rajoute pas des verbes irréguliers. Et puis cela ferait changer les index des verbes spéciaux.

@ ++
Florent
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
29 janv. 2005 à 14:06
Hello !! voila mes modifs:

1) si j'ajoute un verbe dans le cvs, il sera is automatikement dans le prog ?
a en voir le code en dur : non

> TVerbesIrreguliers = array[0..105] of TVerbeIrregulier;
j'aurais mis un :
> TVerbesIrreguliers = array of TVerbeIrregulier;
suivi plus tard d'un :
> SetLength(Verbes, x); // où x vaut le nb de lignes de mon fichier

2) dans ton block try except finnaly tu mets :
> "aie dsl pour l'erreur" suivi d'un "form1.close", tu pourrais aussi mettre ça entre deux :
> CellulesLignes.Free; non ??

3)et donc partout où tu as ecrit "105", tu modifie par lenb de lignes de ton fichier =)

4) HOHOHO je vois un Format() ! merci j'adore :D

5) par contre la mes yeux piquent, ça fait mal :
procedure TForm1.Test10verbes(Sender: TObject);
begin
NbreVerbesTest:=10;
Resultat.Clear;
Resultat.Lines.Add('Début d''un test de 10 verbes.');
NbreVerbes:=0;
NbreJustes:=0;
Note.Caption:='Pas de note';
Fermer.Enabled:=not EmpecherFermeture;
NouveauVerbe;
end;

procedure TForm1.Test20verbes(Sender: TObject);
begin
NbreVerbesTest:=20;
Resultat.Clear;
Resultat.Lines.Add('Début d''un test de 20 verbes.');
NbreVerbes:=0;
NbreJustes:=0;
Note.Caption:='Pas de note';
Fermer.Enabled:=not EmpecherFermeture;
NouveauVerbe;
end;

pourquoi se retapper 2 fois la meme proc pou un Word modifié ? lol
tu fais :

procedure TForm1.TestVerbes(Sender: TObject);
begin
NbreVerbesTest:=TMenuItem(sender).tag;
Resultat.Clear;
Resultat.Lines.Add(Format('Début d''un test de %d verbes.',[TMenuItem(sender).tag]));
NbreVerbes:=0;
NbreJustes:=0;
Note.Caption:='Pas de note';
Fermer.Enabled:=not EmpecherFermeture;
NouveauVerbe;
end;

et tu mets "10" et "20" dans le tag de tes MenuItem !

tu peux donc creer facilement un Item qui ferait un InputBox() pour choisir le nb de verbe voulus ! =)

6) je vois aussi un :
> (Sender as TMenuItem).Checked:=True;
mais les MenuItem ont une propriété "autocheck" qui evite ça

7) ensuite je vois ça :
if Demarrage10Verbes.Checked then
TestOuverture:=0;
if Demarrage20Verbes.Checked then
TestOuverture:=1;
qui devrait etre ça :
if Demarrage10Verbes.Checked then
TestOuverture:=0
else // <<------------------------------------- ELSE
if Demarrage20Verbes.Checked then
TestOuverture:=1;

et ces items peuvent etre des radioitems si ce n'est pas le cas (je ne regarde ke le .pas, je n'ouvre pas la source la)

8) tu veux simplifier $F01F ? 5 caracteres ? alors cree ta propre constante d'une lettre ! lol

9) je vois aussi :
> Nbre:=StrToInt(Reponse);
puis tu gere une exception si ya une erreur, alors je te conseille ça :
> Nbre:=StrToIntDef(Reponse,-1);
puis :
> if Nbre=-1 then Messagedlg(...);

voila pour ce que j'ai pu voir a l'ouverture du .pas

bien joué florenth !
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
29 janv. 2005 à 13:46
cool : ça donne l'occasion de les réviser... lol
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
29 janv. 2005 à 13:42
merci de reposter le zip sans les accents !!
Rejoignez-nous