Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Nombre d'objets | |
|
+4Jack 659_minifly Nardo26 JL35 8 participants | |
Auteur | Message |
---|
Invité Invité
| Sujet: Re: Nombre d'objets Ven 29 Oct 2010 - 19:47 | |
| Je reprend ce qui a été mis. J'ai la désagréable impression d'être le père fouettard, et même si il y a des choses sur lequel je partage pas une idée, j'ai pas à en remettre une couche. Par contre je viens de corriger une erreur dans mon programme, et là je crois qu'il faudra qu'un jour, on fasse un programme pour éviter celle-ci., et je vais en parler à la place de l'ancien texte.
Il s'agit de l'instruction If et END_IF. D'ailleurs je pense qu'avec for/next repeat/until et while/end_while, cela doit être la même chose.
Jusqu'à présent j'utilisais mon programme normalement et ne me donnait pas d'erreur. Par le biais des boutons,je suis arrivé dans un sous programme avec une erreur sur une ligne, et c'était avec IF ....... Ce IF s'était un erreur vu que j'avais IF font_name x,fonte$. J'ai donc supprimé le IF, et la en essayant le programme, j'ai eu le message d'erreur: MORE.... End_if. En fait le END_IF était dans un autre sous-programme 500 lignes plus bas.
Cela veut dire qu'il y a un décompte des boucles seule, sans se préoccuper de l'emplacement de celui-ci. Un jour ou l'autre il faudra faire un programme pour rechercher ce genre d'erreur, et montrer les sous programme qui sont mal finis
Travaillez bien! |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Nombre d'objets Ven 29 Oct 2010 - 23:10 | |
| C'est vrai que le "More If than End_If" est une erreur sur laquelle je me suis cassé les dents plusieurs fois, parce qu'on n'a aucune idée de l'endroit où elle se produit. En général c'est suite à une manoeuvre malheureuse à l'éditeur, on supprime des lignes devenues inutiles et par inadvertance on a sélectionné également à un endroit la ligne du dessus qui était un end_if, alors là, patatras, si le programme est un peu long tu peux chercher pendant un bon moment ! C'est là que l'indentation est intéressante pour repérer l'endroit. Par contre le programme pour pister ce genre d'erreur ne me paraît pas facile à réaliser, il y a tellement de cas de figure, mais c'est vrai que ça ferait gagner du temps... et de l'énervement ! On peut bien compter les If et les End_If et s'apercevoir qu'il en manque un, mais ça ne dira pas où. Cela dit cosmos tu n'es pas le père fouettard bien sûr, tu as des idées souvent intéressantes et c'est bien de les communiquer, et d'en faire profiter tout le monde, même si on n'est pas toujours d'accord sur la façon de procéder c'est toujours enrichissant d'avoir l'avis des autres. C'est justement le grand intérêt de la programmation, c'est qu'il y a en général plusieurs façons de résoudre un problème, sinon ça ne serait pas amusant ! Allez | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Nombre d'objets Sam 30 Oct 2010 - 6:46 | |
| Ca y est ! La dll est écrite ! Trop galérer pour essayer d'installer Delphi sur mon portable: - Impossible de se connecter sur le site borland pour obtenir une clé - Après plusieurs essais, j'ai enfin réussi... pour m'apercevoir au final que la version 6 de delphi n'est pas compatible avec Windows 7... Il a fallu négocier avec ma chère et tendre quelques minutes pour pouvoir écrire la dll sur son PC (et c'était pas gagné! ) J'ai fait la mise à jour sur mon site. Il y a un lien pour récupérer la DLL. Je rajouterai un lien pour le source delphi dès que j'aurais de nouveau accès au PC... [Edit] Ce n'est pas encore parfait car j'utilise, pour ceux qui connaissent en peu delphi, la fonction FileAge, et malheureusement il faut au moins un écart de 1 minute pour "détecter" une différence... Donc je continu mes recherches... c'est ok ! [/Edit] | |
| | | dragonno
Nombre de messages : 341 Localisation : Près de Toulouse Date d'inscription : 22/01/2009
| Sujet: Re: Nombre d'objets Sam 30 Oct 2010 - 13:51 | |
| Merci pour les précisions, je vois que ma question a servi le sujet d'une certaine façon (recentrage) 1) Mais pourquoi rechercher les objets situé dans un source ? 2) Pour attribuer un numéro à un objet que l'on veut créer il suffit de tenir une liste à jour (tableau) des numéros déjà créés non ? Quand on crée un objet on lui attribue un Numéro que l'on met dans le tableau des numéros créés, et quand l'objet est détruit on enlève ce numéro du tableau et on le place dans le tableau des numéros libres (à attribuer). Quand un monstre ou une unité quelconque a pour cible un certain objet elle cherche vérifie d'abord que le numéro de l'objet existe dans le tableau des numéros créés, s'il s'y trouve c'est que l'objet existe potentiellement, elle vérifie donc si le nom de l'objet correspond au nom de l'objet qu'elle a pour cible, si c'est le cas, c'est que l'objet existe réellement et donc elle fait l'action voulue sur cet objet. FIN : L'avantage de la recherche par numéro c'est que c'est pratique et rapide, son inconvénient c'est le vide créé par la destruction de l'objet. L'avantage de la recherche par nom c'est que l'on est sûr que l'objet existe bien, il n'y a pas le problème du vide comme dans la suite de numéros attribués, mais son inconvénient est une rcherche plus laborieuse que la recherche par numéro. Donc dans mon exemple en début de mon post, c'est d'utiliser la recherche par numéro pour trouver rapidement et la vérification du nom pour être sûr que c'est bien l'objet voulu. AUTRE : AU fait, vous avez essayé Lazarus ? (l'autre Delphi) Je suis en train en ce moment et ça m'a l'air vraiment bien, en plus pas besoin de numéro de licence, libre, et multi-plateforme. Des composants bien étudiés. AUTRE BIS : - Citation :
- et de l'énervement ! On peut bien compter les If et les End_If et s'apercevoir qu'il en manque un, mais ça ne dira pas où.
Si, en relevant le numéro de la ligne au moment de la détection du mot manquant (non ?) | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Nombre d'objets Sam 30 Oct 2010 - 14:35 | |
| Bonjour Drogonno, A défaut de delphi, je vais essayer Lazarus... C'est quoi ton pb de if.. end_if ? JE viens d'essayer : dommage j'avais espoir... J'ai réussi à compiler une DLL mais impossible de la charger avec Pano. Pourtant elle est déclarée dans le modele stdcall Du coup je suis allé sur le forum... pour me rendre compte qu'a premiere vue, lazarus est buggé jusqu'à la moelle et que les utilisateurs se trainent des bugs considéré comme "Majeur" depuis 2006.... c'est sûr ce n'est pas la même réactivité que celle de notre ami Jack !! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nombre d'objets Sam 30 Oct 2010 - 17:58 | |
| Juste pour montrer comment je fais mes DLL, voici le source de ma petite DLL Strings.dll: - Code:
-
library Strings;
uses Windows, Sysutils, Classes, // Dialogs, { pour showmessage } TextToPanoramic;
{ définir un type de Pointeur sur Integer pour déclaration de procédure } type PInteger = ^Integer; PString = ^String;
// comparer 2 strings, retourner <0 si s1<s2 0 si s1=s2 >0 si s1>s2 function CompareStr(const s1,s2: pchar): integer; stdcall; export; var pstr: PString; str1, str2: pchar; begin pstr := PString(s1); str1 := pchar(pstr^); pstr := PString(s2); str2 := pchar(pstr^);
result := AnsiCompareStr(str1,str2); end;
function StringOverString(inp,offs,out: integer):integer; stdcall; export; begin CopyTextToPanoramic(inp,offs,out); result := 0; end;
function InString(str1, str2, offs: integer):integer; stdcall; export; var n: integer; x1,x2:pchar; begin x1 := pchar(pstring(str1)^); x2 := pchar(pstring(str2)^); n := offs; while n>0 do begin if x1^ <> #0 then inc(x1); n := n - 1; end; n := AnsiPos(x2,x1); if n>0 then n := n + offs; result := n; end;
function ItemIndexInString(str,sep,item: integer):integer; stdcall; export; var x1,x2,xsep: pchar; stri: TStrings; begin x1 := pchar(pstring(str)^); xsep := pchar(pstring(sep)^); x2 := pchar(pstring(item)^); stri := TStringList.Create; stri.Delimiter := xsep^; stri.DelimitedText := string(x1); result := stri.IndexOf(string(x2)); stri.Free end; { accès direct à un string par d.j.peters function DoItWithString(var s1: pchar): integer; stdcall; export; begin showmessage(s1); result := 1; end; }
exports CompareStr , StringOverString , InString , ItemIndexInString ;
begin end.
| |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: +++ Sam 30 Oct 2010 - 19:26 | |
| C'est quel langage, ça ? Du C++ ? | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Nombre d'objets Sam 30 Oct 2010 - 19:36 | |
| Merci beaucoup Klaus ! Là où j'ai tendance à coincer c'est le passage des chaines PANO <->DLL et pourtant on en a dejà parlé !...
@@jjn4: non c'est du Delphi (Pascal)
| |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: +++ Sam 30 Oct 2010 - 22:49 | |
| Ca a l'air nettement moins simple que panoramic ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nombre d'objets Dim 31 Oct 2010 - 2:24 | |
| @jjn4: le langage est Delphi (langage dans lequel est réalisé Panoramic), et c'est la version Delphi 6 Personal que j'utilise (freeware). @Nardo26: pour être complet, il faut que je donne aussi l'unité qui est utilisée dans le source posté ci-dessus: - Code:
-
unit TextToPanoramic; { Cette unité contient la procédure CopyTextToPanoramic(source,offset,destination); source et destination sont des pointeurs sur des strings Panoramic ou des PChar en Delphi. offset est le décalage à partir duquel on écrit dans la destination ( 0 signifie depuis le début). La copie s'arrêtre automatiquement dès que la fin d'un des strings est rencontré. }
interface procedure CopyTextToPanoramic(inp, offs, out:integer); stdcall;
implementation
procedure CopyTextToPanoramic(inp, offs, out:integer); stdcall; var xout,yinp: pchar; n: integer; begin xout := pchar(pstring(out)^); yinp := pchar(pstring(inp)^); if offs>0 then begin for n:=1 to offs do begin inc(xout); if (xout^ = #0) then exit { sortir si l'offset va à la fin} end end; while (xout^ <> #0) and (yinp^ <> #0) do begin xout^ := yinp^; inc(xout); inc(yinp); end; end;
end.
Cette unité contint justement la procédure pour recopier un texte proprement de la DLL vers Panoramic. La récupération d'un texte Panoramic par la DLL est gérée dans les fonctions exportées, par les lignes: - Code:
-
pstr := PString(s1); str1 := pchar(pstr^);
Tu trouveras une construction similaire dans toutes les routines, et en regardant les déclarations de variables, tu as la clé... Je n'ai pas trouvé cela tout seul: c'est avec l'aide de Panoramiciens et d'un forum spécifique pour Delphi que j'ai pu trouver cela. Merci à tous. | |
| | | dragonno
Nombre de messages : 341 Localisation : Près de Toulouse Date d'inscription : 22/01/2009
| Sujet: Re: Nombre d'objets Dim 31 Oct 2010 - 5:17 | |
| En fait Lazarus est buggué seulement pour un probleme de type de string utf8 il me semble, mais le projet est open source ce qui fait qu'il est constamment en développement. Le créateur est un gars très confirmé du forum "développez.com" il un un forum sur ce site d'ailleurs, ainsi qu'une FAQ LAZARUS sur le même site, que tu devrais aller voir.
Le problème des if n'est pas de moi, je l'ai relevé sur deux ou trois posts plus haut de ce topic.
| |
| | | Invité Invité
| Sujet: Re: Nombre d'objets Mar 2 Nov 2010 - 14:28 | |
| Bonjour, Elle fait quoi ta dll. J'ai eu une micro coupure ce matin, et depuis j'ai essayé ton programme, mais j'ai une fenêtre de windows qui me dit bloquer le programme par sécurité. J'ai mis les programmes en exception mais ça bloque toujours. C'est quoi la fenêtre de droite?. C'est pas une fenêtre Panoramic, il y a le triangle d’extension en bas à droite. (Delphi?) |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Nombre d'objets Mar 2 Nov 2010 - 15:36 | |
| Bonjour Cosmos ! La dll ne fait que "lire" la date système du fichier et elle modifie le contenu de la chaine de caractère qu'on lui a passé en paramètre. Tu peux trouver le code de la DLL avec les explications (sommaires) sur mon site. Quand à la fenêtre de droite, c'est un formulaire de débug (déclaration en ligne 12:FORM Debug% , que j'ai oublié de désactiver ) mais qui n'a aucune influence sur le programme en lui-même... Qu'est que tu entend par : "le triangle d’extension en bas à droite." PS: je n'ai pas beaucoup eu de temps pour regarder le forum ces derniers jours ni même aujourd'hui d'ailleurs.... peut être ce soir... A+ | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Nombre d'objets Mer 3 Nov 2010 - 11:41 | |
| Concernant mon programme d'analyse de source : c'est le dernier post dans ce sujet. J'ai ouvert un fil de discussion à ce sujet dans le forum dans la rubrique "Le site de Nardo26". C'est à cet endroit que continueront les échanges concernant ce programme. A+ | |
| | | Contenu sponsorisé
| Sujet: Re: Nombre d'objets | |
| |
| | | | Nombre d'objets | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |