GÉNÉRATEUR FICHIER DOC EN HTML

yvessimon Messages postés 637 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 9 janvier 2017 - 30 nov. 2012 à 13:17
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 - 9 déc. 2012 à 00:24
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/54778-generateur-fichier-doc-en-html

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
9 déc. 2012 à 00:24
Voila pour enregistrer en UTF-8 :

procedure SaveToUTF8(aStrings: TStrings; aFileName: string);
var
U8:AnsiString;
begin
with TFileStream.Create(aFileName, fmCreate) do
try
U8 := UTF8Encode(aStrings.Text);
Write(U8[1], Length(U8));
finally
Free;
end;
end;
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
9 déc. 2012 à 00:15
#1120 : est-ce que le fichier HTML généré est bien en UTF-8 sans BOM ? (ou en OEM/ISO)

#1500 : il faut jouer avec Close et CloseQuery, peut être voir améliorer la gestion de la sauvegarde.

#1160 : dans le but de standardiser et de réduire les dépendances à Systus, n'oublie pas que même si la finalité c'est l'outils en lui même, le code source doit pouvoir être analyser/compiler par n'importe qui. J'ai tenter de supprimer un max d'appels à Systus mise à part 2 fonctions (CSV) le reste n'est pas vraiment justifié (INI, FRE, etc).

#1150 & #1160 :

Unit XXX;

interface

implementation

{ ... code ... }

initialization
{ executé en entrée de programme }

finalization
{ executé en sortie de programme, peut importe la sortie }

end.

#1100 & #1110 & #1170 : ok :)

#1130 : corriger comme cela alors :
function PremiereLigneFichier(const nomfichier:string; out aFirstLine: string): boolean;
begin
with TStringList.Create do
try
LoadFromFile(nomfichier);
result := Count > 0;
if result then
aFirstLine := Strings[0];
finally
Free;
end;
end;
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
8 déc. 2012 à 17:08
f0xi : quelques questions pour affiner !

#1120 (accent)
je l'ai essayé : ça ne fonctionne pas :
j'ai remplacé par exemple "accent(champ); par "champ := escapeText(champ); et quand je lance le html créé j'ai que des "?"
à la compile, ne trouve pas "indent" : spécifique à genHLP ?
le seul que j'utilise est dans la proc ALIGNE et n'est donc pas concerné

#1150 (terminate)
Ne fonctionne pas car je me sers du close pour pouvoir sortir sans sauver avec le clic sur la croix (porte de secours pour mise à jour intempestive des fiches) :
le quitter normal sauve automatiquement

#1160 (objets globaux)
Cela veut-il dire que je n'ai pas le droit d'écrire : INI(L1)
et qu'il faut que l'écrive : L1 := TstringList.Create;
quelle différence ? dans la proc INI(L1), L1 est passé en VAR est fait (à priori) la même chose
idem pour FRE(L1)

par contre j'ai déjà adopté :
#1100 (historique)
#1110 (versions)
#1130 (systus) : j'ai fait un fonction :
//------------------------------------------- Foxy#1130
function PremiereLigneFichier(nomfichier:string):string;
begin
with TStringList.Create do
try
LoadFromFile(nomfichier);
result := Strings[0];
finally
Free;
end;
end;
#1170 : (propriétés Form1)
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
8 déc. 2012 à 08:32
#1200 : effectivement j'ai regardé il y a effectivement un problème lorsque l'on fait Control V directement sur les 3 étoiles surlignées : ça coupe les lignes à la taille de la fenêtre
il faut que je voie cela
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
8 déc. 2012 à 08:23
Merci Foxy
un peu de lecture, d'accord, mais beaucoup de travail !
bien il y a certains points que je vais pouvoir adopter de suite (#110,#1110,#1120,#1140,1150,#1170,#1180,{1190)
certains points me posent (encore) quelques soucis :
#1150 et #1160 : je ne vois pas (pour l'instant) à quel endroit je dois mettre "initialization" et "finalization" ; mais je vais trouver.
#1170 : ce défaut vient du fait que lorsque je programme (sur un portable) j'aime bien avoir accès rapidement à l'unit, l'inspecteur d'objets ...) donc je réduis la fenêtre principale et je l'adapte au projet à l'exe ! c'est pas bien donc je vais améliorer
#1180 (opendialog) j'ai été amené à utiliser dirappli, dirparam (maison) car sans cela, je me retrouve souvent à l'ouverture du dialog un peu n'importe ou (ou je suis allé par exemple dans une autre appli ouverte précédemment) donc je me suis dit "il faut forcer, c'est moi qui commande"
il semblerait que ce ne soit pas la bonne manière, je vais voir comment faire
(sympa d'avoir pris tant de temps dans ce commentaire "constructif")
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
7 déc. 2012 à 22:48
Coucou, bon un peu de lecture ça fera pas de mal, je vais te le faire sous forme de TODO pour simplifier :

GENHLP :

#1100 : Historique de changelog -> inverser l'ordre, date la plus récente "en haut", la plus ancienne "en bas".

#1110 : remplacer l'information de version "manuelle" par une version automatisé :
-> Projet -> Options -> Information de version -> activer -> cocher incrementer automatiquement le n° de build -> regler a 1.0.7.0
-> compiler avec F9 comme d'habitude, puis MAJ+F9 pour construire avant la diffusion
-> ajouter cette fonction :
function GetAppVersion: String;
var
FileName: string;
VerInfoSize: Cardinal;
VerValueSize: Cardinal;
Dummy: Cardinal;
PVerInfo: Pointer;
PVerValue: PVSFixedFileInfo;
begin
FileName := ParamStr(0);
Result := '';
VerInfoSize := GetFileVersionInfoSize(PChar(FileName), Dummy);
GetMem(PVerInfo, VerInfoSize);
try
if GetFileVersionInfo(PChar(FileName), 0, VerInfoSize, PVerInfo) then
if VerQueryValue(PVerInfo, '\', Pointer(PVerValue), VerValueSize) then
with PVerValue^ do
Result := Format('v%d.%d.%d.%d', [
HiWord(dwFileVersionMS), LoWord(dwFileVersionMS),
HiWord(dwFileVersionLS), LoWord(dwFileVersionLS)]);
finally
FreeMem(PVerInfo, VerInfoSize);
end;
end;

elle renvois une chaine de type "vX.X.X.X" directement en lisant l'information de version de l'Executable.

#1120 : accent n'est pas complète. Voici une version tirée de mon HTMLWriter :
type
TEscapeEntitie = (
eeNone=0,
eeChar=1,
eeSpec=2,
eeAll = eeSpec+eeChar
);
const
_SpecEntities = '&><"'',;{}';
_HTMLSpecEntities : array[0..Length(_SpecEntities)-1] of string=(
'amp', 'gt', 'lt', 'quot', 'apos', '#44', '#49', '#123', '#125'
);

_CharEntities = 'ÂÀàÃãÄäÇ爩éÉÊêèÈëË€íÍîÎÌìÏïµóÓÔôŒœòÒÕõÖö¹²³˜úÚûÛÙùšüÜýÝÿŸ';
_HTMLCharEntities : array[0..Length(_CharEntities)-1] of string= (
'Acirc', 'Agrave', 'agrave', 'Atilde', 'atilde', 'Auml', 'auml',
'Ccedil', 'ccedil', 'circ', 'copy',
'eacute', 'Eacute', 'Ecirc', 'ecirc', 'egrave', 'Egrave', 'euml', 'Euml', 'euro',
'iacute', 'Iacute', 'icirc', 'Icirc', 'Igrave', 'igrave', 'Iuml', 'iuml',
'micro',
'oacute', 'Oacute', 'Ocirc', 'ocirc', 'OElig', 'oelig', 'ograve', 'Ograve', 'Otilde', 'otilde', 'Ouml', 'ouml',
'sup1', 'sup2', 'sup3',
'tilde', 'uacute', 'Uacute', 'ucirc', 'Ucirc', 'Ugrave', 'ugrave', 'uml', 'uuml', 'Uuml',
'yacute', 'Yacute', 'yuml', 'Yuml'
);

function escapeText(aStr: string; const aEntities:TEscapeEntitie=eeAll): string;
var P,L,X: integer;
T,W: string;
begin
result :='';
T := aStr;
L := Length(aStr);
for X := 1 to L do
begin
W := T[X];
case T[X] of
#0 : W := '';
#10: begin
if T[X+1] = #13 then
begin
W := '
';
T[X+1] := #0;
if (L-X) > 3 then
W := W + #10 + Indent;
end;
end;
else
begin
if aEntities = eeSpec then
begin
P := pos(W, _SpecEntities);
if P <> 0 then
W := '&'+_HTMLSpecEntities[P-1]+';';
end;
if aEntities = eeChar then
begin
P := pos(W, _CharEntities);
if P <> 0 then
W := '&'+_HTMLCharEntities[P-1]+';';
end;
end;
end;
result := result + W;
end;
end;

#1130 : pensez à commencer à standardiser le programme (suppression d'un maximum de dépendance à systus) tu te rendra compte même que beaucoup de procedure font des appels abusifs à systus car elle peuvent être remplacée facilement par :

with TStringList.Create do
try
LoadFromFile(OldFIC);
FIC := Strings[0];
finally
Free;
end;

#1140 : la procedure DirAppli ne sert a rien ! -> ajouter dans l'unité (ou systus) une variable globale _AppPath : string ='';
l'initialiser comme cela (dans l'initialization de l'unit) :

initialization
_AppPath := ExtractFilePath(ParamStr(0));

finalization

end.

remplacer tout les appels à DirAppli par _AppPath

#1150 : On ne ferme pas un programme par Application.Terminate, mais par le Close de MainForm :

Application.MainForm.Close; // <- plus respectueux de la chaine événementielle

#1160 : Creer et Liberer les objet globaux (L1, L2 ...) dans l'initialization et finalization de l'unité principale

#1170 : Il n'est pas necessaire de definir les propriétés de la fiche principale dans son OnCreate. Il faut les définir dans l'editeur de propriétés.

#1180 : Il ne faut pas forcer le répertoire (CurrentDir), toutes les ouvertures ou sauvegarde de fichier doivent se faire de façon l'URL absolue du fichier et non l'URL relative (au currentDir). Cette méthode etait bonne sous MsDos ou un seul programme tournant le répertoire courrant ne pouvait être changé que par ce dernier. Hors sous Windows, Linux, MacOs, cette notion doit être oubliée, même en Web il est "chiant" de maintenir des URL relative quand on mélange PHP et AJAX.

#1190 : Toujours un soucis d'indentation, +"2 espaces" après chaque ouverture, -"2 espaces" aprés chaque fermeture. C'est ma notion la plus rependue et la plus utilisé, la plus facile à lire et comprendre. NE FAIT SURTOUT PAS DE PYTHON sans changer ton indentation de forme.

#1200 : Il y a un soucis avec CreaFiche, il manque des éléments, je dois analyser plus en avant pour te dire ce qui cloche exactement.

Voila pour maintenant, ça fait pas mal de boulot :)
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
5 déc. 2012 à 16:04
M. Dubois,
Votre site c'est pas plutôt : "http://sports.roissy.free.fr/delphi" ?
:)
Très joli au passage... Ça me dit quelque chose... ;)

J'ai téléchargé l'éditeur en question (malgré les conseils d'Avast...), j'essaie d'y jeter un oeil dès que possible.

Ça a l'air d'être bien parti en tous cas, et pour quelqu'un comme moi qui est allergique aux balises, ça me permettrai de faire de jolis fichiers d'aide... Vivement la V2 !!!
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
5 déc. 2012 à 13:32
Simon pour l'html regarde un peu l'éditeur (mini) que je me suis fait pour le site de mon assos (avec visu interne du résultat svp !) :
tu peux le télécharger sur le site perso delphi : http://sports.roissy.free.fr/delphi/Edh.exe
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
5 déc. 2012 à 13:26
Je prends note Foxy !
Mais JSON je ne sais même pas ce que c'est, (je vais aller voir sur google pour mieux m'endormir ce soir !) tu es un peu trop pointu pour moi !
mais pour ce qui est de concevoir un générateur à partir d'une chose fournie, structurée (et que je comprends) là pas de souci, je peux participer
quant à html à jour, c'est pareil, moi j'en suis toujours à html4, ajax à par la poudre ! (humour)
CSS j'utilise un peu pour le site de mon assos (http://sports.roissy.free.fr) mais basic quand même
mais je suis preneur
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
5 déc. 2012 à 13:09
Pour l'HTML, il va falloir mettre à jours avec la nouvelle structure qui est améliorée pour la modification (non dépendance du core et des données utilisateurs).

Pour le menu, je prend note, je modifierai le core pour pouvoir le placer à divers endroit.
Je vais également étendre la configuration via JSON pour simplifier les modif et le paramètrage par le générateur (on pourra générer un JSON plus facilement que de générer des classes CSS ou des blocs HTML), on laissera à Ajax faire le reste.

Dans la version actuelle, la modification de l'aide est simplifiée :
configuration de base JSON (simple à aborder), override des CSS prés à être modifier (necessite des competences en CSS), création ajout de page simplifié, ajout d'element au menu simplifié et complété avec les liens externes.

@Dubois77 : je suis en train de préparer une API pour simplifier encore plus la génération d'aide, je te la fournirai dés que possible dans une nouvelle source. je m'occupe de l'API et toi du Generateur :) huhuhu
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
5 déc. 2012 à 12:36
ouahou !
Tout d'abord pour "- Menu à droite, à gauche, en haut ou en bas ?" je ne suis pas maitre de la chose puisque j'utilise le script de Foxy (fichier Help.aide.h) et je ne me hasarderais pas d'y toucher, déjà vu la taille éloquente qu'il a et puis je n'en suis pas capable.
(voir avec Foxy si lui il peut faire quelque chose dans ce sens)
(le script étant compacté un max, franchement je ne sais même pas ce qu'il fait)

Pour le reste j'ai noté !
(j'ai déjà modifié (pour moi) pour réaliser mon site perso (voir http://sports.free.fr/dephi)
donc ça ce sera fait dans une prochaine mouture :
je pense rajouter une option "OPTIONS" dans le menu pour régler ce genre de personnalisation (fonte du mémo par exemple !)

Bon il a encore du taf !
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
5 déc. 2012 à 11:03
Idées (Attention M. Dubois, ne me lancez pas...)

- Personnaliser les couleurs (préprogrammation de skins, image fond) ?
- Menu à droite, à gauche, en haut ou en bas ?
- Personnaliser le "?" dans le titre (idéalement, pouvoir insérer une image) ?
- Pouvoir insérer des images (balise image avec openDialog pour aller chercher l'image) ?
- Un outil pour insérer un tableau ?

euh... c'est tout ce qui me vient à l'idée pour le moment, mais si j'en ai d'autres, je reviens vers vous !!!
:)
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
5 déc. 2012 à 10:49
Pour les inconditionnels de l'HTML :
Surveillez bien cette page car un nouvelle mise à jour est en préparation : la 1.07 qui inclura notamment de nouvelles facilités pour faire du html
un aperçu de cette mise à jour :
1.07 :
1.07x : mise en "conformité"
1.07a : modif CreaHTM, suppression extension dans le titre
1.07b : revu retour lignes dans CreaHTML
1.07c : revu création lien URL (ajout http://)
(parfois bug si non présent en html) (essais sous chrome)
1.07d : ajout de l'option "espace insécable dans popmemu HTML : ' '
1.07e : personnalisation de l'impression avec la fiche en cours

Si vous pensez à d'autres possibilités pour améliorer, n'hésitez pas !
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
4 déc. 2012 à 14:37
Mon cher Roger,

Ne prends pas pour attaque personnelle une critique ne visant qu'à rendre ton code plus abordable sur la forme.
Si tu postes ton travail, je suppose que tu souhaites qu'il soit lu et compris par le plus grand nombre.
Et en info, le fond est souvent déjà assez difficile à saisir sans rajouter des obstacles formels.
Mais tu codes comme tu l'entends, en patois du Berry si tu veux.
On propose et tu disposes.

Tu as tort de prendre pour toi ma remarque sur la pédagogie. Après tout, le partage est déjà une bien belle chose et on t'en remercie.
Mais j'espère bien que ce que je dis ne fais pas loi car je m'aperçois chaque jour que ce que j'ai fait la veille était loin de la perfection.
Considère ce que je dis comme un simple avis à débattre, non péremptoire. Une petite briquette ajoutée à l'édifice de la programmation en Delphi.

Bien sûr, sans rancune. Depuis le temps j'ai appris à te connaître, toi et ta tête de bois, Dubois. :D
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
4 déc. 2012 à 13:21
Cari pour reprendre ton message qui m'a poussé à répondre un peu sèchement :
<C'est moins une question de goût personnel que d'empathie quand on poste ou qu'on travaille en équipe.>

et ensuite <Disons plutôt que tu continueras à poster et que je s'abstiendrais de commentaire sur tes posts.>
Franchement cela serait vraiment dommage car en général ce que tu dis fait loi, mais ma réaction vient juste de la deuxième partie du premier message :
Je le prends également pour moi, et comme je ne vais, pas contrairement à toi, programmer différemment pour codesSources que pour moi, et bien il ne me reste qu'une solution, non ?
bon; sans rancune
a+
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
4 déc. 2012 à 12:16
Un bon exemple d'utilisation !
http://sports.roissy.free.fr/delphi/
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
4 déc. 2012 à 10:24
Dernière mise à jour ( pour finir clean ) et tenir compte des derniers commentaires de foxy et Simonpelloquin :
- possibilité de taper du texte directement dans le mémo dès l'ajout d'une fiche
- html en minuscule
+ ajout de l'interdiction de taper dans le mémo si aucune fiche surlignée

Rappel d'utilisation : un clic droit sur chaque liste et sur le memo ouvre un popmenu spécifique

Rappel pour conventions des variables :
(ces conventions sont celles que j'utilise et ne doivent donc pas être suivies)

Les variables locales sont en minuscule pour bien faire ressortie les GLOBALES qui elles sont en majuscule avec en général 3 lettres minimum alors que les locales en ont généralement qu'une
ma convention pour les locales est :
h : chaine de caractères utilisée pour la gestion des champs (getH, HGET)
z : chaine standard
i,j : index pour for
x : index de liste ou avec y coordonnées
a,b : toute variables utilisées pour échanges ou dualité quelconque (c si 3 !)
n : quantité

La méme var locale est souvent utilisée pour plusieurs actions dans une même procédure d'ou le nom unique z par exemple, sinon il me faudrait déclarer plusieurs locales avec chacune un nom différents pour en fait ne servir que de tampon dans une action;

cordialement
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
4 déc. 2012 à 02:42
Pfiuuu, y'a du boulot.

Juste un truc, tant que j'ai le temps, en HTML on ne mets plus les tags et les attributs en MAJUSCULES mais en minuscules, like :

et non

Bon par contre pas mal de chose à corriger/améliorer je ferai l’état des lieu plus tard. dans l'ensemble ça marche nickel.
Par contre c'est bien ce que je pensais les format de fichiers utiliser peuvent être mis en echec facilement, je te montrerai pourquoi.
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
4 déc. 2012 à 00:02
Cher M. Dubois,

Ne vous découragez pas !!! On se prend tous des remarques pas toujours très faciles à accepter, mais ça fait avancer les choses. J'ai beaucoup appris sur ce site, et quand je regarde mes premières sources (au boulot ou sur ce site), y a des fois où je me dis "mais comment tu as pu pondre cette daube...". L'important c'est que les idées soient là, et qu'on puisse se critiquer, de manière constructive bien entendu.

Au plaisir de relire une de vos sources !
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
3 déc. 2012 à 18:53
Ce n'est pas très constructif comme réaction et ce serait dommage pour la communauté.

Disons plutôt que tu continueras à poster et que je s'abstiendrais de commentaire sur tes posts.
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
3 déc. 2012 à 18:41
bon bien disons que j'éviterais de poster pour ne pas déranger
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
3 déc. 2012 à 17:51
@dubois77
« Je comprends Cari, tous les goût sont dans la nature »

C'est moins une question de goût personnel que d'empathie quand on poste ou qu'on travaille en équipe.
Perso, je ne code pas de la même façon ce que je garde pour moi et ce que je poste. Ne serait-ce que pour la pédagogie.
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
3 déc. 2012 à 17:29
oui c'est possible :tu rajoute ces deux lignes à la fin de la procedure TForm1.AjoutFICHE;
juste avant le end;
M1.SetFocus;
M1.SelectAll;

j'ai corrigé chez moi, je posterai si autre grosse modif suggérée ou demandée
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
3 déc. 2012 à 14:43
Excellent au fait :
IndexDeBoucleForPourCalculTempsRestant
:D
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
3 déc. 2012 à 14:41
"Maintenant à l'intérieur d'une procédure, le nom de la variable n'est pas très significatif puisque utilisée en général en temporaire comme tampon donc qu'elle s'appelle XPierre ou Xpaul ne change pas grand" chose
->> Pas d'accord !

Procedure DessineCercle();
var
x, y, z : integer;

et
procedure DessineCercle();
var
iXCentre, // Coordonnée en abscisse du centre du cercle
iYCentre, // Coordonnée en ordonnées du centre du cercle
iRayon : integer; // Rayon du cercle

Si la procédure fait deux pages (ce qu'il vaut mieux éviter en général, mais c'est un autre débat...), c'est bien plus pratique de savoir à quoi correspond une variable en lisant son nom, plutôt que d'aller chercher sa définition (si elle est commentée, bien entendu).
Je veux bien que les variables ne soient pas commentées à partir du moment où elle sont suffisamment explicites (comme ici iRayon)

"Franchement je préfére 1000 fois (au moins) :
For i:=1 to 50 que for IndexDeBoucleForPourCalculTempsRestant to 50
c'est moins parlant c'est sur mais mois passé 5 lettres je m'y perds dans les variables !"
->> Moi aussi !!! Mais là, "i" est une variable traditionnelle de boucle et connue pour ça.

"c'est moins parlant c'est sur mais mois passé 5 lettres je m'y perds dans les variables !"
->> Utilisez l'achèvement du code : CTRL+Espace

Et sinon, ok pour les trois étoiles (un petit plus serait de les surligner pour qu'à la première touche appuyée, elles soient remplacées par la touche en question... je suis embêtant, hein ?)
:)
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
3 déc. 2012 à 14:13
Simon : < j'ai 3 * qui apparaissent >
oui c'est volontaire pour bien faire voir que la fiche est créée mais vide (sauf les *** que tu vas bien sur remplacer par ton texte)
cela évite d'avoir une ligne vide dans le fichier, c'est tout
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
3 déc. 2012 à 14:10
Je comprends Cari, tous les goût sont dans la nature
J'ai jamais assisté à un cours d'anglais et ça va être dur de m'y mettre maintenant !
mais bon je connais le principal (row,col, exit, print ... donc rien n'est perdu)

Maintenant à l'intérieur d'une procédure, le nom de la variable n'est pas très significatif puisque utilisée en général en temporaire comme tampon donc qu'elle s'appelle XPierre ou Xpaul ne change pas grand chose
Franchement je préfére 1000 fois (au moins) :
For i:=1 to 50 que for IndexDeBoucleForPourCalculTempsRestant to 50
c'est moins parlant c'est sur mais mois passé 5 lettres je m'y perds dans les variables !
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
3 déc. 2012 à 13:52
Je partage le goût personnel de Simon. :)

Et aussi, par pitié, évitez les abréviations indéchiffrables faites à la hache !



var
R1, R2 : Integer; //Insignifiant, à bannir !
RynCclCirc, RynCclInsc : Integer; // Pire que mieux ! Abréviations absconses à bannir !

RayonCercleCirconscrit, RayonCercleInscrit : Integer; //Acceptable.

Ou encore mieux !
L'anglais étant une langue véhiculaire compréhensible dans le monde entier et, de plus, étant très concise.
Et avec des variables systématiquement commentées, SVP :

var
ExcircleRadius; //Rayon du cercle circonscrit au triangle ABC.
IncircleRadius; //Rayon du cercle inscrit dans le triangle ABC.
yacinew Messages postés 18 Date d'inscription vendredi 21 août 2009 Statut Membre Dernière intervention 22 février 2018
3 déc. 2012 à 13:37
Bonjour;

Merci dubois77 pour cette application,
Svp je cherche plus d'information sur l’impression dans delphi 7.

Salutations.
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
3 déc. 2012 à 12:02
oui Simon Pellequin, je sais c'est ancestral chez moi (çà remonte au basic de mes années 80)
par contre, dans la dernière version postée, avec les monter, supprime ..., ce que tu demandes est fait il me semble
(je vais dorénavant essayer de revoir mes variables ....)
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
3 déc. 2012 à 09:42
Bonjour,

Quelques petites remarques :
- Quand je fais une nouvelle fiche, j'ai 3 * qui apparaissent et que je dois supprimer (ou pas ?)

- D'ailleurs, quand on ajoute une nouvelle rubrique ou une nouvelle fiche, ce serait bien de vider les champs de saisie des noms de rubrique ou de fiche (enfin, à mon humble avis...)

- Sur le code :
Je n'aime pas du tout (mais c'est tout à fait personnel) les déclarations de variables du genre :

procedure TForm1.CreaFICHES;
var R,F,Z,h,A,w,p:string; i,j,k,l,X:integer; L7:TstringList;

Ça fait perdre un temps fou à décrypter le code. Please, utilisez des noms de variables explicites (éventuellement avec une convention de nommage), et commentées dans la mesure où vous jugerez cela nécessaire, votre code gagnera énormément en clarté (surtout que Delphi, via l'audit de code, vous permet d'afficher rapidement l'achèvement du code et vous évite de retaper le nom de la variable...)

Voilà, sinon pour les compliments, c'est une très bonne idée, un programme simple d'utilisation et qui va sûrement s'avérer très utile à l'usage !
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
2 déc. 2012 à 19:50
ok
le renommage de unit1 !
Bonjour,

GENHLP1.dfm manquant :)
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
2 déc. 2012 à 19:05
GENHLP.dfm manquant :)
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
2 déc. 2012 à 18:46
@Dubois77 : grosse modif du code de l'aide, tu peux le trouver dans CSVList avec un projet d'aide vide à la clef ;)
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
2 déc. 2012 à 17:05
Merci Foxy pour tes remarques, j'avoue que je les attendais
-----------------

c'est normal puisque c'est ton idée au départ (voir post CSVList)
---------------------

je veux bien mais pourquoi ?
il se recrée automatiquement si il n'existe pas
(fait)
----------------------------
<fournir Systus.pas>.
fait (version épurée : systus9.pas)
---------------
<Remplacer composants Trucs>
fait
------------------
<Renommer Unit1>
fait (ça mange pas de pain !)
en fait je laissais unit1 car cette appellation est utilisée dans Form MAIN de l'éditeur et uMini et comme j'utilise toujours mon appli vide quand je débute une nouvelle appli, c'est unit1 qui est préalablement défini
Donc si on modifie Unit1 ne pas oublier de le changer dans MAIN.pas et uMini.pas
----------------

Je trouve que mon indentation n'est pas trop mauvaise (en fait j'au toujours indenté de cette façon)
(CTRL+MAJ+I) ne fait que déplacer le bloc sélectionné d'une case vers la droite, U vers la gauche
-------------------------
<structure fichiers LXH>
La constitution du fichier LXH est la suivante :
ligne 0 : NombreRubrique;NombreFiches;NomduFichier;DateDerniéreMiseàJour
(les 2 derniers champs ne sont actuellement pas utilisés)
Le premier champ initialise la variable NRUB dans la procedure CHARGE
Le deuxième champ initialise la variable NFICH

Les (Nombrerubriques) suivantes, donc autant de lignes que de rubriques, définissent le nom de chaque rubrique et le nom des fiches correspondantes :
chaque ligne est donc ainsi constituée :
RUB1;Fic1;FIC2 pour une rubrique appelée RUB1 et comportant 2 fiches appelées FIC1 et FIC2
RUB2 pour une rubrique appelée RUB2 sans fiche associée
Ces lignes sont stockées dans le TstringList L1 dans proc CHARGE

Les (Nombrerubriques) suivantes, donc autant de lignes que de rubriques, définissent l'index des fiches de chacune des rubriques
chaque ligne est donc ainsi constituée :
RUB1;1;0 pour une rubrique appelée RUB1 et comportant 2 fiches, la première avec l'index 1, la deuxième avec l'index 0
RUB2 pour une rubrique appelée RUB2 sans fiche associée
(le premier champ, nom de la fiche n'est pas utilisé car idem série précédente
Ces lignes sont stockées dans le TstringList L2 dans proc CHARGE

Toutes les lignes suivantes correspondent au contenu de chaque fiche : une ligne par fiche
Ces lignes sont stockée dans la la TstringList L3 dans proc CHARGE :
la première ligne de L3 (index 0) correspond à la fiche indéxée 0 dans la L2

Quand on quitte, le TstringList LX est reconstitué et sauvé

à priori rien d'hasardeux, tout est parfaitement défini
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
2 déc. 2012 à 03:28
Correction de la fonction d'execution de débiars :

utiliser des PChar :

function Launch(aHandle:HWND{0}; aOperation{Open}, aFileName, aParameters{''}, aDirectory{'' ou ExtractFilePath(aFileName)}: string; aShowCmd: integer{SW_SHOWNORMAL}): THandle;
begin
result := shellExecute(aHandle, PChar(aOperation), PChar(aFileName), PChar(aParameters), PChar(aDirectory), aShowCmd);
end;
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
2 déc. 2012 à 02:45
MMM ... je ne sais pas trop quoi penser ...

Bon déjà c'est une bonne idée. ok.
Par contre beaucoup de problèmes à corriger, je te fait la liste des fixs à faire :

- publier le GenHLP.res
- fournir Systus.pas et non son DCU sinon impossible de compiler.
- Remplacer les composants ButtonsTrucs par des composants standards ou équivalent.
- Renommer correctement Unit1
- indenter ton code correctement (CTRL+MAJ+I pour indenter, CTRL+MAJ+U pour désindenter, selon les réglages de ton IDE)

je n'ai pas trop compris la structure des fichiers LXH, elle me semble relativement hasardeuse, mais n'ayant pus compiler, impossible de s'en rendre compte autrement que par analyse du code/des fichiers LXH fournis.

Sinon dans l'ensemble, un bon projet, continus sur cette lancée.
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
1 déc. 2012 à 16:12
Merci Jean Pierre
J'ai posté la mise à jour incluant ta procédure
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
1 déc. 2012 à 15:41
Merci Jean Pierre
Je reposte la mise à jour qui inclue ta modif
KYBIO Messages postés 2 Date d'inscription dimanche 30 mai 2004 Statut Membre Dernière intervention 1 décembre 2012
1 déc. 2012 à 14:18
Very good!! Thank you!
Debiars Messages postés 285 Date d'inscription lundi 16 juin 2003 Statut Membre Dernière intervention 11 février 2018
1 déc. 2012 à 10:12
Merci Roger, j'l'avions pô vu.
Du coup, le l'ai chargé et j'ai généré le html.
Dans ton programme, j'ai ajouté une rubrique Aide au menu et dans unit1, ce qui suit :

function ExecProg(const FileName,Params,DefDir : string;
ShowCmd : integer) : THandle;
var zfile,zparm,zdir : array[0..79] of char;
begin
Result := ShellExecute(Application.MainForm.Handle,nil,
StrPCopy(zfile,FileName),StrPCopy(zparm,Params),
StrPCopy(zdir,DefDir),ShowCmd);
end;

procedure TForm1.Aide1Click(Sender: TObject);
var chemin : string;
begin
chemin := ExtractFilePath(Application.ExeName);
ExecProg('GENHLP.HTM','',chemin,SW_SHOW);
end;

ce qui me permet de consulter l'aide à partir du prog...

Cordialement

jp
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
30 nov. 2012 à 15:37
Salut Jean Pierre
As tu pu le compiler ?
Il y a un tout petit fichier d'aide : GestHLP.lxh (mal nommé : il devrait s'appeler GenHLP.lxh) qu'il faut charger lorsque l'appli est lancée
çà peut effectivement s'améliorer !
cordialement
Debiars Messages postés 285 Date d'inscription lundi 16 juin 2003 Statut Membre Dernière intervention 11 février 2018
30 nov. 2012 à 15:30
Bonjour,
Y manquerait peut-être une "Aide" à ton programme, non? ;-)
ça serait un bon test...
Faut penser aux vieux qu'ont de l'âge et quelques neurones en mois...
Merci
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
30 nov. 2012 à 14:47
Salut YvesSimon
Effectivement c'est un composant utilisé par le mini éditeur d'impression
tu peux le télécharger la :
http://sports.roissy.free.fr/delphi/buttoncomps.zip
yvessimon Messages postés 637 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 9 janvier 2017
30 nov. 2012 à 13:17
bonjour,

Dommage il ne trouve pas
" ButtonComps "

Merci
Rejoignez-nous