cs_Paounet
Messages postés36Date d'inscriptionmercredi 14 avril 2004StatutMembreDernière intervention 6 juin 2023
-
18 août 2007 à 20:31
cs_Paounet
Messages postés36Date d'inscriptionmercredi 14 avril 2004StatutMembreDernière intervention 6 juin 2023
-
21 août 2007 à 02:58
Apres creation de mon composant TGetPassword qui fonctionne.. j'ai créé une feuille principale Form1 (Unit1) qui utilise la 2ème feuille Modale Form2 avec Unit2 qui contient le composant..
La fonction Test(x,y,z) du Composant fonctionne bien à l'interieur de la feuille modale Form2 ou il est installé, mais non a partir de la feuille principale Form1 en m'affichant le message:
« Acess violation At Address 0046B5D1 in Module 'Programme.exe'
(mon programme compilé). Read of Addres 00000364...
Quelqu'un peut-il m'aiguiller pour trouver l'Erreur.. et les codes..D'avance Merci
Unit 1 Unit 2
Form 1 Form2
...
Uses Unit2; Uses Unit1;
.
. ModalResult:=mrOk;
Procedure...
If (Form2.Test(MDP,Login,Codes) Then --- Message Erreur.
Paounet
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 20136 20 août 2007 à 21:12
non je pense pas que ca vienne de ton composant avec ce que tu nous met.
par contre ce qui m'etonne c'est que ton compo herite de TPanel! je suppose qu'il contient les edits de saisie des valeurs.
enfin, si je comprend bien ce que tu as fait, j'aurait fait un truc dans ce genre (c'est peut etre deja ce que tu as fait):
cs_Paounet
Messages postés36Date d'inscriptionmercredi 14 avril 2004StatutMembreDernière intervention 6 juin 20233 19 août 2007 à 16:13
Merci pour la réponse .....
Mais elle ne répond pas à mon problème.. Tout se passe comme si ma fonction Test(....) de mon composant n'est pas accesible depuis une feuille autre que celle ou se trouve le composant..
Le code ' if not Assigned(Form2) then ShowMessage('form2=nil');' me renvoit le message 'form2=nil' et mon code du test(...) le même message Access Vialotion...
Bien que que feuille1 a l'unité de feuille2 c'est comme si mon compo est invisible..
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 20136 19 août 2007 à 23:06
heuuuu je crois que tu n'as pas bien compris ce que je voulais dire !!!
ta variable Form2 n'est pas affectée .
donc plusieurs possibilités:
- ta form n'est pas créée automatiquement (tu dois avoir un createforl(Form2, TForm2) dans la source de ton dpr
- tu as une autre variable qui s'appele form2 qui n'est pas intialisée
- la fonction test est appelée dans le Create ou le OnCreate de ta Form1
- ...
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Paounet
Messages postés36Date d'inscriptionmercredi 14 avril 2004StatutMembreDernière intervention 6 juin 20233 20 août 2007 à 04:05
Je te remercie sincérement de ta sollicitude Guillemouze
..
Ma forme2 se trouve bien dans le Dpr.
la fonction Test est demandée sur le OnShow de Form1.
En fait je te passe les codes:
------------------------------DPR --------------------
program Protection;
uses
Forms,
Demo in 'Demo.pas' {FormDemo}, Feuille Prinicpale -> Form1
Saisie in 'Saisie.pas' {FormSaisie}, Feuille Modale -> Form2
ProtectF in 'ProtectF.pas' {FormF}, "
ProtectR in 'ProtectR.pas' {FormR}; "
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.Title := 'Protection des Logiciels';
Application.CreateForm(TFormDemo, FormDemo); -> Form1
Application.CreateForm(TFormSaisie, FormSaisie); -> Form2
Application.CreateForm(TFormF, FormF);
Application.CreateForm(TFormR, FormR);
Application.Run;
end.
--------------------------Feuille Principale Form1= FormDemo ---------
Unit Demo
.........
Uses ProtectF,ProtectR,Saisie; Saisie est l'unité ou se trouve le Compo.
{$R *.dfm}
// Test d'existence du fichier Licence.dat et prise des Codes
procedure TFormDemo.FormShow(Sender:TObject);
Const Fichier='Licence.dat';
Var F:TextFile;Code:String;Res:Array[0..2] Of String;i,j:Integer;
begin
Flag:=False;For i:=0 to 2 Do Res[i]:='';
If FileExists(Fichier)=False Then Exit Else
Begin AssignFile(F,Fichier);Reset(F);Read(F,Code);CloseFile(F);
Code:=Crypte(Code);End;i:=0;For j:=1 to Length(Code) Do
If Code[j]<>#13 then Res[i]:=Res[i]+Code[j] Else Inc(i);
// Execute le Test par rapport au composant TGetPassword des Codes
// Exemple '3452CB6A','DELPHI','4381B685A8075C3452CB'
If FormSaisie.GetPW.Test(Res[0],Res[1],Res[2]) Then Begin
Enregistre.visible: =False;Version.Caption:='Version Complète';
End Else Flag:=False;
end;
-------------------- Feuille Modale Form2 = FormSaisie --------
Unit Saisie;
interface
uses Forms,GetPassword,StdCtrls,Buttons,Classes,Controls,ExtCtrls,
Dialogs;
type
TFormSaisie = class(TForm)
Retour:TBitBtn;
GetPW:TGetPassword;
procedure RetourClick(Sender:TObject);
end;
var FormSaisie:TFormSaisie;Flag:Boolean;
implementation
Uses Demo;
{$R *.dfm}
procedure TFormSaisie.RetourClick(Sender:TObject);
Const Mess='Valide';Var Mess1:String;
begin
If GetPW.Test('3452CB6A','DELPHI','4381B685A8075C3452CB') then
Mess1:='' Else Mess1:='Non ';
ShowMessage(Mess1+Mess+#13); ( Par contre ici ça marche)
ModalResult:=mrOk;
end;
end.
-------------------------------------------------------------------------------
A tout hasard c'est le compo TGetPassword qui crée automatiquement en partie la feuille 2 - FormSaisie ( Attributs - rien d'autre)...
Paounet
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 20136 20 août 2007 à 13:36
pas facile de debugger comme ca ...
je te conseille de faire du pas a pas et d'evaluer tes variables la ou ca plante.
tu peux aussi mettre un point d'arret dans le OnCreate de ta formeSaisie et un sur ta ligne qui pose probleme pour voir l'ordre d'appel (le create doit etre appelé avant la ligne en question)
cs_Paounet
Messages postés36Date d'inscriptionmercredi 14 avril 2004StatutMembreDernière intervention 6 juin 20233 20 août 2007 à 17:09
Effectivement... J'ai contourné la difficulté en copiant de mon compo TGetPassword la fonction publique Test(etc...):Boolean; je l'ai intégrée dans ma 2ème feuille modale Formsaisie. En l'appelant de ma feuille princiaple tout fonctionne.. Bizarre, pourtant elle était déclarée comme publique. C'est dommage car je la retrouve 2 fois désormais.. Ca vient du compo c'ezst sûr mais je ne vois pas...
A tout hasard....
TGetPassword = class(TPanel)
.
.
.
Function Test(MDP,Login,Codes:String):Boolean;
.
.
// Fonction qui teste les valeurs saisies avec l'algorithme de calcul
Function TGetPassword.Test(MDP,Login,Codes:String):Boolean;
Var Chaine:String;i,Valeur,Nbre,Nb:Integer;
Begin
Valeur:=0;
// On récupère le Nombre Nb de Passe.Text:=MotPasse(IntToHex(Nbre,1))
Nbre:=Round(Hexa(MDP));
// Calcul de la Somme Ascii du Nom = Valeur
For i:=1 To Length(Login) Do Inc(Valeur,Ord(Login[i]));
// Calcul du Nombre générateur de Random Nb:=Valeur*Nbre
Nb:=Valeur*Nbre;
// Calcul du Code Activation Valide
Chaine:=Copy(IntToStr(Valeur)+IntToHex(Valeur,1)+
IntToHex(Nb,1)+IntToHex(Nbre,1),1,20);
If Chaine=Codes then Test:=True Else Test:=False;
End;
Paounet
cs_Paounet
Messages postés36Date d'inscriptionmercredi 14 avril 2004StatutMembreDernière intervention 6 juin 20233 21 août 2007 à 02:58
Effectivement ca y ressemble... mon compo est de type TPanel et comprend pas mal d'objets... Merci tout de même... Au debut je pensais que mon compo lorsqu'il était déposé sur une feuille, et qu'il la reformatait, celle-ci pouvait poser problème.. Mais avec ton aimable concours j'ai compris que lorsque la feuille 2 était lancée le compo devient après sa création accessible.. mais dès lors j'appelais la fonction du compo depuis la feuille 1, sa création n'étant pas faite....> ERREUR.. Je pense que c'est cela..
Dis moi à tout hasard.. lorsque je crée la feuille qui reçoit mon compo comment faire pour ajouter à ladite feuille (Form1) de nouvelles propriétés, voire fonction si tu sais Merci...
Je faisais ceci pour c=recréer ma feuille
------------------------------------------
Constructor TGetPassword.Create(Owner:TComponent);
Begin
Inherited Create(Owner);
If Owner is TForm then with TForm(Owner) Do Begin
Begin { Mes propriétés celles visibles normalement }End;
Mes Objets... etc.. MERCI. Paounet