cedricpc Posté(e) le 20 octobre 2004 Partager Posté(e) le 20 octobre 2004 (Voir un peu plus bas la question.) Pour mon premier programme en pascal, j'essaye de faire sous delphi une calculette pour calculer les lois d'electricite... P=UI pour le moment et une fois celle la faite, je passerai a d'autre. Mais le probleme, c'est que je n'arrive pas a multiplier le contenu de deux Edit... Voici le code que j'ai pour le moment : 01: unit Unit1; 02: 03: interface 04: 05: uses 06: Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 07: Dialogs, StdCtrls; 08: 09: type 10: TForm1 = class(TForm) 11: Edit1: TEdit; 12: Edit2: TEdit; 13: Edit3: TEdit; 14: Button1: TButton; 15: Label1: TLabel; 16: procedure Button1Click(Sender: TObject); 17: private 18: { Déclarations privées } 19: public 20: { Déclarations publiques } 21: end; 22: 23: var 24: Form1: TForm1; 25: u,i: TCaption; 26: p: integer; 27: implementation 28: 29: {$R *.dfm} 30: 31: procedure TForm1.Button1Click(Sender: TObject); 32: begin 33: u:=Edit1.Text; 34: i:=Edit2.Text; 35: p:=u*i; 36: Edit3.Text:=p; 37: 38: end; 39: 40: end. Mais quand je l'execute, j'ai cette erreur : [Erreur] Unit1.pas(35): Opérateur non applicable à ce type d'opérande [Erreur] Unit1.pas(36): Types incompatibles : 'String' et 'Integer' [Erreur fatale] Project1.dpr(5): Impossible de compiler l'unité utilisée 'Unit1.pas' La derniere est normal... Mais comment rendre compatible u et i pour pouvoir les multiplier ? C'est mon tout premier programme et j'ai pas de bouquin pour m'aider... Merci par avance :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
mogwai93 Posté(e) le 20 octobre 2004 Partager Posté(e) le 20 octobre 2004 C'est ici que ca plante : 31: procedure TForm1.Button1Click(Sender: TObject); 32: begin 33: u:=Edit1.Text; 34: i:=Edit2.Text; 35: p:=u*i; <== PLANTAGE 36: Edit3.Text:=p; 37: 38: end; car u et i sont de type TCaption et p de type integer; il te faut d'abord transformer les string en integer Voila 2 méthodes utiles : Val ( x, s, error ); Procédure qui convertit la chaîne de caractère de nom s en un nombre (Integer ou Real) x et renvoie un code erreur error (de type integer) qui est égale à 0 si la conversion est possible. Str ( x, s ); Procédure qui convertit le nombre (Integer ou Real) x en chaîne de caractère de nom s. donc ton code : u:=Edit1.Text; i:=Edit2.Text; Val (x, u, error_x); Val (y, i, error_y); p := x * y; str (p, result); Edit3.Text:=result; à tester... et il faut penser à rajouter le test sur les variables error_x et error_y dans le cas où la chaine n'est pas un nombre et à type les variables x, y et result Lien vers le commentaire Partager sur d’autres sites More sharing options...
cedricpc Posté(e) le 20 octobre 2004 Auteur Partager Posté(e) le 20 octobre 2004 Ok merci beaucoup je vais tester ca. Lien vers le commentaire Partager sur d’autres sites More sharing options...
cedricpc Posté(e) le 20 octobre 2004 Auteur Partager Posté(e) le 20 octobre 2004 Bon il fallait aussi declarer d'autre variable et tu as inverser l'ordre dans val unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Button1: TButton; Label1: TLabel; Label2: TLabel; Label3: TLabel; procedure Button1Click(Sender: TObject); private { Déclarations privées } public { Déclarations publiques } end; var Form1: TForm1; ux,ix,p: TCaption; px,u,i,errux,errix: Integer; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin ux:=Edit1.Text; ix:=Edit2.Text; Val (ux, u, errux); Val (ix, i, errix); px:=u*i; Str (px, p); Edit3.Text:=p; end; end. Celui-ci marche. Par contre, enfaite, il faut qu'il accepte les nombres relatif... J'ai essaye de mettre Real a la place d'integer dans la declaration de variable, mais Val n'accepte pas le format :/ Lien vers le commentaire Partager sur d’autres sites More sharing options...
cedricpc Posté(e) le 20 octobre 2004 Auteur Partager Posté(e) le 20 octobre 2004 J'ai tenter de faire I=P/U mais avec le / il me mets [Erreur] Unit1.pas(52): Types incompatibles : 'Integer' et 'Extended' (ligne 52 : i:=p/u;) C'est pas comme ca les division ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
cedricpc Posté(e) le 20 octobre 2004 Auteur Partager Posté(e) le 20 octobre 2004 J'ai trouvé ! unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Button1: TButton; Label1: TLabel; Label2: TLabel; Label3: TLabel; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Déclarations privées } public { Déclarations publiques } end; var Form1: TForm1; ux,ix,px: TCaption; p,u,i: Real; errux,errix,errpx: Integer; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin ux:=Edit1.Text; ix:=Edit2.Text; Val (ux, u, errux); Val (ix, i, errix); p:=u*i; Str (p, px); Edit3.Text:=px; end; procedure TForm1.Button2Click(Sender: TObject); begin ux:=Edit1.Text; px:=Edit3.Text; Val (ux, u, errux); Val (px, p, errpx); i:=p/u; Str (i, ix); Edit2.Text:=ix; end; end. Par contre, j'aimerai pouvoir arrondir le resultat x chiffre(s) après la virgule, mais je ne trouve pas... Vous avez une idée svp ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
cedricpc Posté(e) le 20 octobre 2004 Auteur Partager Posté(e) le 20 octobre 2004 Ah j'ai trouvé ! Ca viens du Str l'affichage scientifique... faut mettre Str (i:0:3, ix); par exemple... Mais y'a un trucs que je pige pas trop... C'est le Str (i:width:decimals, ix); Ca sers a quoi le Width ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
mogwai93 Posté(e) le 20 octobre 2004 Partager Posté(e) le 20 octobre 2004 J'ai tenter de faire I=P/U mais avec le / il me mets[Erreur] Unit1.pas(52): Types incompatibles : 'Integer' et 'Extended' (ligne 52 : i:=p/u;) C'est pas comme ca les division ? comme tu as pu voir, le / renvoie un résultat réel si tu veux en résultat entier, soit tu arrondis le résultat, soit tu utilises DIV à la place de / Lien vers le commentaire Partager sur d’autres sites More sharing options...
mogwai93 Posté(e) le 20 octobre 2004 Partager Posté(e) le 20 octobre 2004 Ah j'ai trouvé ! Ca viens du Str l'affichage scientifique... faut mettre Str (i:0:3, ix); par exemple... Mais y'a un trucs que je pige pas trop... C'est le Str (i:width:decimals, ix); Ca sers a quoi le Width ? Str ( <variable_en_entree>:<nombre de caracteres à mettre devant>:<nombre de chiffre que doit contenir la variable en sortie>, <variable_en_sortie>) Tu peux faire des tests pour voir les différents résultats. Lien vers le commentaire Partager sur d’autres sites More sharing options...
cedricpc Posté(e) le 20 octobre 2004 Auteur Partager Posté(e) le 20 octobre 2004 Bah j'ai essaye, mais je vois rien de special ! La j'ai un autre probleme... Dans l'aide de Delphi y'a marque dans EditFormat : Syntaxe Delphi : propertyEditFormat:String; Mais je dois y mettre ou ca ? Ca va modifier tout les Edit ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Pascal_974 Posté(e) le 20 octobre 2004 Partager Posté(e) le 20 octobre 2004 On m'a appelé ? ok --> Lien vers le commentaire Partager sur d’autres sites More sharing options...
cedricpc Posté(e) le 20 octobre 2004 Auteur Partager Posté(e) le 20 octobre 2004 Effectivement... Lien vers le commentaire Partager sur d’autres sites More sharing options...
cedricpc Posté(e) le 22 octobre 2004 Auteur Partager Posté(e) le 22 octobre 2004 La, j'aimerai bien pouvoir mettre que des caracteres numerique dans un edit, si une lettre est presse, rien ne se passe... (j'entend par numerique : 1 2 3 4 5 6 7 8 9 0 . , - + (mais pas / * par contre)) C'est fesable en pascal ? Merci par avance Lien vers le commentaire Partager sur d’autres sites More sharing options...
mogwai93 Posté(e) le 23 octobre 2004 Partager Posté(e) le 23 octobre 2004 J'ai trouvé pour ton pb de chiffre dans un champ edit: http://delphi.developpez.com/faq/?page=compopropri#numbers sinon d'autres infos utiles : http://delphi.developpez.com/faq/ http://delphi.developpez.com/faq/?page=typ...re#formaterreel (formattage d'un nombre réel) Lien vers le commentaire Partager sur d’autres sites More sharing options...
cedricpc Posté(e) le 23 octobre 2004 Auteur Partager Posté(e) le 23 octobre 2004 Ok merci beaucoup ca marche Encore une petite question toujours en rapport plus ou moins... Quand on fait un click droit sur l'edit y'a coller... Et bien si des lettres etait copier, elle vont venir... Donc voila la question, quel est l'evenemets qui gere ca ? J'essayerai de me debrouiller pour enlever les lettres... Merci par avance Lien vers le commentaire Partager sur d’autres sites More sharing options...
cedricpc Posté(e) le 24 octobre 2004 Auteur Partager Posté(e) le 24 octobre 2004 Bon j'ai trouver plus au moins la solution en remplacent l'evenement du menu contextuelle (et celui du ctrl+c) par : procedure TForm1.Coller1Click(Sender: TObject); begin j:= 1; Edit1.PastefromClipboard; edt:=Edit1.Text; for k:=1 to length(edt) do if (edt[k] in ['0'..'9', DecimalSeparator]) then begin edt1:=edt1+edt[k]; j:=j+1; end; Edit1.Text:=edt1; end; appeler par un popupmenu avec une ligne nomme Coller... Mais le problème quand je colle pour le première fois du texte dedans, il filtre bien les caracteres, mais lors du deuxieme coller, il a une reaction bizarre... Si vous pouvez tester et me dire d'ou ca viens svp ? Merci par avance. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.