|
Trouver une ressource
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)
Informations & options pour cette discussion
samedi 24 mai 2008 à 22:20:22 |
Problème (message : "exception EOSError : erreur système, ligne 87 : paramètre incorrect")

Bacterius
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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 !
|
|
|
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
Livres en rapport
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version

HTC G1
Entre 449€ et 449€
|