Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Problème (message : "exception EOSError : erreur système, ligne 87 : paramètre incorrect") [ Divers / Aide et documentation ] (Bacterius)

samedi 24 mai 2008 à 22:20:22 | Problème (message : "exception EOSError : erreur système, ligne 87 : paramètre incorrect")

Bacterius

Membre Club
Bonjour,
voici mon problème : j'essaye de refaire le petit jeu de Débiars (URL : http://www.delphifr.com/codes/CALCUL-MENTAL_46446.aspx), pour voir si je peux y arriver sans regarder le code source, et j'ai un problème :
j'utilise un fichier ressource qui contient toutes mes images (9 images pour 4 types de case différente, soit 36 images [25 pixels / 25 pixels])
et quand je sélectionne trop de cases dans ma grille (genre les 3 quarts), le débogueur me sort une erreur "exception EOSError : erreur système, ligne 87 : paramètre incorrect"). Quelqu'un a-t-il déjà eu ce message d'erreur, et pourrait m'indiquer comment arranger ca ?
Pour vous aider, je précise également là ou le controle d'execution s'arrête lorsque le message survient :
sur la ligne ou un composant TImage doit modifier son bitmap, en chargant une image du fichier ressource (utilisation de LoadFromResourceName).

Merci d'avance

Cordialement, Bacterius !

PS : si vous avez besoin de plus amples informations, demandez-les, je vous les donnerai si je les ai :)

PS2 : si je n'ai pas posté dans la bonne section, faites-le moi savoir, je pourrai rectifier pour mes prochains messages à l'avenir !

dimanche 25 mai 2008 à 00:39:56 | Re : Problème (message : "exception EOSError : erreur système, ligne 87 : paramètre incorrect")

f0xi

Membre Club Administrateur CodeS-SourceS

mmm probleme dans les ressources ou probleme d'index de ressource (nom de la ressource)
c'est frequent sur ce genre de prog.

faudrait voir le source pour dire.




dimanche 25 mai 2008 à 11:37:07 | Re : Problème (message : "exception EOSError : erreur système, ligne 87 : paramètre incorrect")

Bacterius

Membre Club
Bonjour, bon le source n'est pas très long, je vais donc le mettre ici : pour la fiche, imaginez une grille de 10 cases / 10 cases en haut à droite, un bouton nouvelle partie en haut à gauche, et en dessous de ce bouton, le score et le temps restant, et en dessous de la grille, un panel (pour afficher le calcul) et encore en dessous, un bouton "Valider".

Source :


unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Buttons;

type
        TTileState = (TFree, TUsed, TLost, TWon);

type
        TCalcul = record
        CalculString: String;
        Solution: Integer;
        Bonus: Boolean;
        end;

type
        TTile = record
        State: TTileState;
        Num: ShortInt;
        end;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    ActImg: TImage;
    Grid: TImage;
    Panel4: TPanel;
    Panel5: TPanel;
    Timer: TTimer;
    Panel6: TPanel;
    Panel7: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Shape1: TShape;
    BtNew: TSpeedButton;
    SpeedButton1: TSpeedButton;
    PauseLabel: TLabel;
    Shape2: TShape;
    SpeedButton2: TSpeedButton;
    Shape3: TShape;
    SpeedButton3: TSpeedButton;
    procedure Button2Click(Sender: TObject);
    procedure TimerTimer(Sender: TObject);
    procedure TimeExpired;
    procedure Win;
    procedure Lose;
    procedure Lose2;
    function RetreiveTileFromPos(Pos: TPoint): TTile;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FillGrid;
    procedure GetPic(TileType: TTileState; Num: ShortInt);
    procedure UpdateGrid;
    procedure GridMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
  function VerifyGrid: Boolean;
  function VerifyGridWin: Boolean;
    procedure SpeedButton1Click(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;
  Game: array [1..10, 1..10] of TTile;
  Score, Time: Integer;
  Calcul: TCalcul;

implementation

{$R *.dfm}

function TForm1.VerifyGrid: Boolean;
Var
        A, B: ShortInt;
begin
     Result := False;
     for A := 1 to 10 do
        for B := 1 to 10 do
                if Game[A, B].State = TFree then begin Result := True; break; Exit; end;
end;

function TForm1.VerifyGridWin: Boolean;
Var
        A, B: ShortInt;
begin
     Result := True;
     for A := 1 to 10 do
        for B := 1 to 10 do
                if Game[A, B].State <> TWon then begin Result := False; break; Exit; end;
end;

function GenCalcul: TCalcul;
Var
        X, Y, Z, A: ShortInt;
        T: Boolean;
        XFirst: Boolean;
        O: ShortString;
begin
     XFirst := False;
     X := random(25) + 1;
     Y := random(25) + 1;
     Z := random(1000);
     T := Odd(Z);
     if T = False then O := ' + ' else O := ' - ';
     if X = Y then begin XFirst := True; X := X + 1; end;
     if X > Y then XFirst := True;
     if X < Y then XFirst := False;

     A := random(9) + 1;
     if A = 2 then Result.Bonus := True else Result.Bonus := False;

     if (XFirst = True) and (O = ' + ') then
        begin
             Result.CalculString := IntToStr(X) + O + IntToStr(Y);
             Result.Solution := X + Y;
        end;

        if (XFirst = False) and (O = ' + ') then
        begin
             Result.CalculString := IntToStr(Y) + O + IntToStr(X);
             Result.Solution := Y + X;
        end;

        if (XFirst = True) and (O = ' - ') then
        begin
             Result.CalculString := IntToStr(X) + O + IntToStr(Y);
             Result.Solution := X - Y;
        end;

        if (XFirst = False) and (O = ' - ') then
        begin
             Result.CalculString := IntToStr(Y) + O + IntToStr(X);
             Result.Solution := Y - X;
        end;
end;

procedure TForm1.TimeExpired;
Var
        I, J: ShortInt;
begin
        for I := 1 to 10 do
                for J := 1 to 10 do
                begin
                     if Game[I, J].State = TUsed then Game[I, J].State := TLost;
                end;
        Calcul := GenCalcul;
                     Panel5.Font.Color := clBlack;
                     Panel5.Caption := Calcul.CalculString;
                     if Calcul.Bonus = True then begin Panel5.Font.Color := clRed; Panel5.Caption := Panel5.Caption + '  (Points bonus)'; end;
                     Time := 30;
                     UpdateGrid;
end;

procedure TForm1.Win;
Var
        I, J: ShortInt;
begin
     for I := 1 to 10 do
        for J := 1 to 10 do
                begin
                     if Game[I, J].State = TUsed then Game[I, J].State := TWon;
                end;
                        if Calcul.Bonus = True then Score := Score + (Calcul.Solution + (Calcul.Solution div (random(2) + 1)) + 15)
                        else Score := Score + Calcul.Solution;
                        Panel7.Caption := IntToStr(Score);
                        Calcul := GenCalcul;
                     Panel5.Font.Color := clBlack;
                     Panel5.Caption := Calcul.CalculString;
                     if Calcul.Bonus = True then begin Panel5.Font.Color := clRed; Panel5.Caption := Panel5.Caption + '  (Points bonus)'; end;
                     Time := Time + 10;
                     UpdateGrid;
end;

procedure TForm1.Lose;
Var
        I, J: ShortInt;
begin
     for I := 1 to 10 do
        for J := 1 to 10 do
                begin
                     if Game[I, J].State = TUsed then Game[I, J].State := TLost;
                end;
                Calcul := GenCalcul;
                     Panel5.Font.Color := clBlack;
                     Panel5.Caption := Calcul.CalculString;
                     if Calcul.Bonus = True then begin Panel5.Font.Color := clRed; Panel5.Caption := Panel5.Caption + '  (Points bonus)'; end;
                     Time := Time;
                     UpdateGrid;
end;

function TForm1.RetreiveTileFromPos(Pos: TPoint): TTile;
Var
        TmpX: ShortInt;
        TmpY: ShortInt;
begin
     // Ici on récupère les infos de la case par la position (par le click)
     TmpX := Pos.X;
     TmpY := Pos.Y;
     Result.State := Game[TmpX, TmpY].State;
     Result.Num := Game[TmpX, TmpY].Num;
end;

procedure TForm1.GetPic(TileType: TTileState; Num: ShortInt);
begin
     case TileType of
     TFree: ActImg.Picture.Bitmap.LoadFromResourceName(HInstance, 'TF' + IntToStr(Num));
     TWon: ActImg.Picture.Bitmap.LoadFromResourceName(HInstance, 'TW' + IntToStr(Num));
     TLost: ActImg.Picture.Bitmap.LoadFromResourceName(HInstance, 'TL' + IntToStr(Num));
     TUsed: ActImg.Picture.Bitmap.LoadFromResourceName(HInstance, 'TU' + IntToStr(Num));
     end;
end;

procedure TForm1.UpdateGrid;
Var
        I, J: ShortInt;
begin
     // On update la grid
     for I := 1 to 10 do
        for J := 1 to 10 do
                 begin
                      GetPic(Game[I, J].State, Game[I, J].Num);
                      Grid.Canvas.Draw((I - 1) * 25, (J - 1) * 25, ActImg.Picture.Bitmap);
                 end;
end;

procedure TForm1.FillGrid;
Var
        I, J: ShortInt;
        Tmp: ShortInt;
begin
     for I := 1 to 10 do
                for J := 1 to 10 do
                begin
             Game[I, J].State := TFree;
             Tmp := random(9) + 1;
             Game[I, J].Num := Tmp;
             GetPic(TFree, Tmp);
             Grid.Canvas.Draw((I - 1) * 25, (J - 1) * 25, ActImg.Picture.Bitmap);
                end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
        randomize;
        DoubleBuffered := True;
        Panel1.DoubleBuffered := True;
        Panel2.DoubleBuffered := True;
        Panel3.DoubleBuffered := True;
        Panel4.DoubleBuffered := True;
        Panel5.DoubleBuffered := True;
        Panel6.DoubleBuffered := True;
        Panel7.DoubleBuffered := True;
        Button1Click(self);
        TimerTimer(self);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
        FillGrid;
        Calcul := GenCalcul;
        Panel5.Font.Color := clBlack;
                     Panel5.Caption := Calcul.CalculString;
                     if Calcul.Bonus = True then begin Panel5.Font.Color := clRed; Panel5.Caption := Panel5.Caption + '  (Points bonus)'; end;
        Time := 31;
        Score := 0;
        Panel7.Caption := IntToStr(Score);
        Timer.Enabled := True;
end;

procedure TForm1.GridMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
Var
        TmpTile: TTile;
        P: TPoint;
begin
        P.X := (X div 25) + 1;
        P.Y := (Y div 25) + 1;
        TmpTile := RetreiveTileFromPos(P);
        if (TmpTile.State = TWon) or (TmpTile.State = TLost) then Exit;
        if TmpTile.State = TFree then TmpTile.State := TUsed else TmpTile.State := TFree;
        Game[P.X, P.Y] := TmpTile;
        UpdateGrid;
end;

procedure TForm1.TimerTimer(Sender: TObject);
begin
        Time := Time - 1;
        if Time = 0 then TimeExpired;
        if Time > 10 then Panel6.Color := $0000D900;
        if Time < 10 then
                begin
                        if Panel6.Color = $0000D900 then Panel6.Color := clRed else Panel6.Color := $0000D900;
                end;
        Panel6.Caption := IntToStr(Time);
end;

procedure TForm1.Lose2;
Var
     TmpRX, TmpRY: Integer;
     Found1, Found2: Boolean;
begin
     Found1 := False;
     Found2 := False;
     while Found1 = False do
        begin
        TmpRX := random(10) + 1;
        TmpRY := random(10) + 1;
        if Game[TmpRX, TmpRY].State = TFree then begin Found1 := True; Game[TmpRX, TmpRY].State := TLost; end;
        end;
     while Found2 = False do
        begin
        TmpRX := random(10) + 1;
        TmpRY := random(10) + 1;
        if Game[TmpRX, TmpRY].State = TFree then begin Found2 := True; Game[TmpRX, TmpRY].State := TLost; end;
        end;
     UpdateGrid;
end;

procedure TForm1.Button2Click(Sender: TObject);
Var
        Tmp: Integer;
        A, B: ShortInt;
begin
     Tmp := 0;
     for A := 1 to 10 do
        for B := 1 to 10 do
                if Game[A, B].State = TUsed then Tmp := Tmp + Game[A, B].Num;

     if Tmp = 0 then    // Si jamais le petit malin n'a rien coché pour ne rien perdre !
        begin           // On en fait partir 2 au hasard !
             Lose2;
        end;

     if Tmp = Calcul.Solution then Win else Lose;

        if not VerifyGrid then if VerifyGridWin then
                begin
                MessageDlg('Bravo !! Votre grille est complètement gagnée !', mtInformation, [mbOK], 0); // On vérifie si c'est fini !
                Timer.Enabled := False;
                Time := 0;
                Score := Score * 5;
                end
        else
                begin
                MessageDlg('Votre grille est remplie, mais vous n''avez pas tout gagné ...', mtInformation, [mbOK], 0); // On vérifie si c'est fini !
                Timer.Enabled := False;
                Time := 0;
                end;
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
        if Timer.Enabled = True then
                begin
                     Timer.Enabled := False;
                     Panel2.Enabled := False;
                     Panel5.Caption := 'Tss ... non !';
                     PauseLabel.Visible := True;
                     Exit;
                end;

        if Timer.Enabled = False then
                begin
                     Timer.Enabled := True;
                     Panel2.Enabled := True;
                     Panel5.Caption := Calcul.CalculString;
                     PauseLabel.Visible := False;
                     Exit;
                end;
end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
        if MessageDlg('Souhaites-tu vraiment quitter le Calcul Mental ?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then Close else MessageDlg('Allez ! On y retourne !', mtInformation, [mbOK], 0);
end;

end.


Bon j'ai pas vraiment renommé mes objets, mais le Button1 correspond au bouton Nouvelle partie et le Button2 au bouton Valider.

Voila :s

Mais f0xi, il doit bien y avoir un moyen de parer à cela ? On pourrait peut-être, à partir des ressources, créer 36 fichiers bitmap dans le dossier de l'executable, puis les utiliser, puis a la fin les détruire ?
Ou une autre parade ...

Cordialement, Bacterius !

dimanche 25 mai 2008 à 11:44:27 | Re : Problème (message : "exception EOSError : erreur système, ligne 87 : paramètre incorrect")

Bacterius

Membre Club
Re, au fait le code n'est pas du tout optimisé, je cherche juste à ce qu'il fonctionne, et ensuite je vais essayer de l'optimiser au maximum. Au fait le controle d'execution s'arrête ici :

procedure TForm1.GetPic(TileType: TTileState; Num: ShortInt);
begin
     case TileType of
     TFree: ActImg.Picture.Bitmap.LoadFromResourceName(HInstance, 'TF' + IntToStr(Num));
     TWon: ActImg.Picture.Bitmap.LoadFromResourceName(HInstance, 'TW' + IntToStr(Num));
     ICI **** TLost: ActImg.Picture.Bitmap.LoadFromResourceName(HInstance, 'TL' + IntToStr(Num)); **** ICI
     TUsed: ActImg.Picture.Bitmap.LoadFromResourceName(HInstance, 'TU' + IntToStr(Num));
     end;
end;

Donc le problème doit se situer avant le controle je crois, donc sur la ressource avec les images gagnées (TW1, TW2, TW3 ...).

Cordialement, Bacterius !

dimanche 25 mai 2008 à 12:41:53 | Re : Problème (message : "exception EOSError : erreur système, ligne 87 : paramètre incorrect")

Bacterius

Membre Club
Bonjour, j'ai opté pour la création de fichiers, dans un répertoire Temp, crée au lancement du programme, et détruit à sa fermeture.
Quelqu'un connait-il un moyen plus rapide ? Parce que les fichiers ce n'est pas terrible ... :/

Cordialement, Bacterius !

dimanche 25 mai 2008 à 12:52:50 | Re : Problème (message : "exception EOSError : erreur système, ligne 87 : paramètre incorrect")

f0xi

Membre Club Administrateur CodeS-SourceS


const
  MaxCase = 25;

type
  TCaseBmp : array[0..MaxCase-1, 0..MaxCase-1] of TBitmap;

procedure TFormX.LoadBitmaps(var CaseBmp: TCaseBmp);
var X,Y: integer;
begin
  for Y := 0 to MaxCase-1 do
    for X := 0 to MaxCase-1 do
    begin
      CaseBmp[Y,X] := TBitmap.Create;
      CaseBmp[Y,X].LoadFromResourceName(format('bmp%dx%d',[Y,X]));
    end;
end;

procedure TFormX.FreeBitmaps(var CaseBmp: TCaseBmp);
var X,Y: integer;
begin
  for Y := 0 to MaxCase-1 do
    for X := 0 to MaxCase-1 do
      FreeAndNil(CaseBmp[Y,X]);
end;



ce serat mieux que de charger a chaque fois. plus rapide, et surrement plus fiable.
Si tu vas trop loin avec les index, tu aura une erreur d'index hors limite et donc tu trouvera plus facilement l'erreur.








dimanche 25 mai 2008 à 12:58:15 | Re : Problème (message : "exception EOSError : erreur système, ligne 87 : paramètre incorrect")

f0xi

Membre Club Administrateur CodeS-SourceS

et je te conseil plutot d'utiliser des PNG (plus leger avec effet de transparence jolie jolie)

regarde mes sources DiskMon, MasterMind, Pazu ... tu y vera comment je gere les PNG (surtout dans diskmon ou pazu qui correspondent bien a l'utilisation que tu pourrai en faire.)





dimanche 25 mai 2008 à 13:14:55 | Re : Problème (message : "exception EOSError : erreur système, ligne 87 : paramètre incorrect")

Bacterius

Membre Club
Ok F0xi je vais aller voir tes sources pour voir comment gerer les png :)
Mais il peut être dessiné dans un canvas avec la propriété Draw pareil que pour les bitmaps ?

Cordialement, Bacterius !

dimanche 25 mai 2008 à 13:37:20 | Re : Problème (message : "exception EOSError : erreur système, ligne 87 : paramètre incorrect")

Bacterius

Membre Club
Bonjour,
désolé je ne comprends rien aux PngImage, j'ai téléchargé PngImage, PngLang, ZLibPas, et je trouve aucune fonction qui permette de gérer les images Png, il y a des fonctions genre UpdateCrc, ByteSwap ...
Un peu d'aide serait la bienvenue :(

Cordialement, Bacterius !

dimanche 25 mai 2008 à 13:43:47 | Re : Problème (message : "exception EOSError : erreur système, ligne 87 : paramètre incorrect")

Bacterius

Membre Club
Je pense avoir trouvé comment ouvrir une image png : et c'est vrai que ca prend moins de place que les Bmp ^^ et ca rend mieux (par contre j'ai eu un peu de ralentissement de programme au premier test ...), merci f0xi !

Maintenant je vais essayer de troquer mes MessageDlg contre des images stylées qui apparaissent au milieu du jeu :)

Cordialement, Bacterius !


1 2

Cette discussion est classé dans : message, problème, ligne, erreur, exception


Répondre à ce message

Sujets en rapport avec ce message

Message D'erreur : Key Violation ... [ par sabrinafouad ] Salut les amis, merci pour votre soutient ...je suis un nouveau débarqué ...je suis entrein de réaliser mon premèier projet, et à chaque fois que je j explication d un message d erreur !!! [ par khawarizm ] Bonsoir ou bonjour tout le monde !Je vous demande SVP si  quelqu'un voudrait bien  m expliquer la signification d'un  message que je trouve a chaque f erreur : Indice de liste hors limites [ par NicoIRIS ] Bonjour,je suis débutant en delphi et je me trouve devant une erreur provoqué par une classe d'exception EStringListError. Le message est le suivant:L Erreur IdSMTP [ par couf ] Bonjour à Tous, Voila je suis entrain de m'arracher les cheveux à propos d'un problème dont je ne vois pas la solution.J'écris un programme qui dois e Problème avec Delphi [ par Bacterius ] Bonjour,voila mon problème : j'ai installé un composant (ici : http://www.delphifr.com/codes/LIGNE-3D_12699.aspx).Et maintenant quand j'essaye de lanc Compilation: erreur plusieurs lignes en dessous de la ligne renseignée [ par PhilLU ] Salut à tous!J'ai depuis qq semaines un problème à la compilation:en fait, quand il y a une erreur de code ;-))) , l'erreur se trouve plusieurs lignes comment éléver un nombre à la puissance? [ par edlain ] Bonjour à tous, j'ai un souci sur mon algorithme qui fait des calculs. En effet, quand j'essaie d'éléver un nombre à la puissance d'un autre le messa [Error] RLINK32 [ par kizermomo ] Bonjour à tous,je suis en train de créer une appli. A ma grande surprise je démarre ce matin et dès que je compile j'ai un message d'erreur:[Error] RL SOS [ par hassaine ] Bonjour,Appel a tout le monde DELPHI j'ai un problème dans mon application un message d'erreur (Violation d'accés à l'adresse 0049FFE3 dans le module


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version


HTC G1

Entre 449€ et 449€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,827 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.