cavalier2400
Messages postés120Date d'inscriptionmardi 8 juillet 2008StatutMembreDernière intervention 1 décembre 2010
-
11 juil. 2008 à 16:23
cavalier2400
Messages postés120Date d'inscriptionmardi 8 juillet 2008StatutMembreDernière intervention 1 décembre 2010
-
16 juil. 2008 à 12:40
On voulant un mot de passe pour mon application, j'ai les fiches suivantes:
Application.Initialize;
Application.ShowMainForm:= False;
Application.HelpFile := 'C:\Gest_TP\TIERPAYANT.HLP';
Application.CreateForm(Tmpasse1, mpasse1);
Application.CreateForm(TFichePrincipale, FichePrincipale);
Application.CreateForm(TDataModule4, DataModule4);
Application.CreateForm(TfrmRechercher, frmRechercher);
Application.CreateForm(Theritage, heritage);
Application.Run;
dans la fiche mpasse1 sur le button ok
Var fichier : textfile; Registre: TRegistry;t,s:string; trouve:boolean;begin
Registre:=TRegistry.Create; Registre.RootKey:=HKEY_CURRENT_USER; Registre.OpenKey('\software\'+'sablier',true); s:= Registre.ReadString (Edit1.Text) ; Registre.Free; trouve := false;
if fois = 3 then application.Terminate ;
if ((edit2.Text = s) and (edit1.Text <> '')) then trouve := true; fois:=fois+1;
if trouve then
begin
mpasse1.free
Application.ShowMainForm:= true;
ficheprincipale.show;
sur ficheprincipale (onCreate)
mpasse1: =tmpasse1.Create(ficheprincipale);
mpasse1.free
Et là mon application démarre, avec 1er plan, et en second plan la fiche du mot de passe, qui ne veut accepter aucune commande de la fiche principale, et en second plan la fiche du mot de passe, qui répond à toutes les commandes directe.
En bref, je ne sais pas réaliser (Une première page qui se charge, ---> donne naissance à une autre fiche et... mourir) Je vous remerci si une personne pourra m'aider, ou m'orienter . J'ai saisi en caractère enrichi les parties intéressantes de mon problème. Merci
cavalier2400
Messages postés120Date d'inscriptionmardi 8 juillet 2008StatutMembreDernière intervention 1 décembre 20101 11 juil. 2008 à 21:40
Bonsoir tous le monde, bref... je suis si navré et je m'excuse pour mon impolitesse, c'est vrai je débarque, je ne connais les U ni les coutumes du site... Mais au faite un petit pouce pour réussir le lancement de ma fichePrincipal marci.(PS- Je joue aux échecs sur Yahoo, et voilà on va directement au but).
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 11 juil. 2008 à 23:07
belle réaction, la meilleur défense, c'est..
çà me rappelle des souvenirs, où je passais les nuits à travailler les ouvertures..
Bref, ah oui ta forme..
ben écoutes, on y comprend rien dans ton fourbi, le mieux est de fournir le code
sans les commentaires.
on y verra plus clair..
cavalier2400
Messages postés120Date d'inscriptionmardi 8 juillet 2008StatutMembreDernière intervention 1 décembre 20101 11 juil. 2008 à 23:24
Bsr, C'est surement élémentaire mon cher Watson, (réussir convenablement le mot de passe dans tricherie du genre hide...),
1. la form motdepasse est lancé, (mais Delphi veut qu'elle soit une mainform
2. Si le mot de passe est correcte la Vrai fiche principale avec le menu principale apparait,
3. La fiche motdepasse s'éclipse, et l'application ferme sans problème
Obs: J'arrive pas à faire disparaître la fiche motdepasse.
{
if s='' then
begin
Registre.writestring('youcef' ,'docteur') ;
Registre.Free;
Application.Terminate ;
end;
}
Registre.Free;
trouve := false;
if fois = 3 then application.Terminate ;
if ((edit2.Text = s) and (edit1.Text <> '')) then trouve := true; fois:=fois+1;
if trouve then
begin
mpasse1.Visible :=false;
Application.ShowMainForm:= true;
ficheprincipale.show;
end
else
begin
Showmessage('Votre mot de passe ou votre nom utilisateur est faux '+ #13+ 'Essai : 0'+ Inttostr(fois));
Edit1.Clear ; Edit2.Clear ;edit1.SetFocus ;
mpasse1.Hide;
If fois = 3 then application.Terminate ;
end;
procedure TFichePrincipale.Rechercher1Click(Sender: TObject);
begin
frmrechercher.show;
end;
procedure TFichePrincipale.Statistiques2Click(Sender: TObject);
begin
Application.CreateForm(tstatistiques, statistiques);
statistiques.show;
end;
procedure TFichePrincipale.Fermer1Click(Sender: TObject);
begin
cooltrayicon1.Destroy;
Application.Terminate ;
end;
procedure TFichePrincipale.Copiedesauvegarde1Click(Sender: TObject);
var x : pansichar;
begin
x:='c:\savedunit1.pas';
{
savedialog1.FileName := table1.fieldbyname('emplacementMDB').AsString ;
copyfile('Cmedical.mdb','SavedCmedical.mdb',true);
showmessage('Une copy de la base Cmedical est faite sous le nom de: ' + #13+ 'SavedCmedical');
Var fichier : textfile;
Registre: TRegistry;
t,s,n,p:string; trouve:boolean;
begin
Showmessage('Signaler l''opération à l''administrateur');
Registre:=TRegistry.Create;
Registre.RootKey:=HKEY_CURRENT_USER;
Registre.OpenKey('\software\'+'sablier',true);
n:=inputbox('Ajout utilisateur','Pseudo utilisateur','xxxxxx');
p:=inputbox('Ajout utilisateur','mot de passe utilisateur','xxxxxx');
// s:= Registre.ReadString (Edit1.Text) ;
Registre.writestring(n ,p) ;
Registre.Free;
showmessage('Noter votre Nom utilisateur et le mot de passe: ' +#13+ n +' '+p);
end;
procedure TFichePrincipale.Help2Click(Sender: TObject);
begin
Application.HelpJump('cotisant');
end;
procedure TFichePrincipale.Aideaveclesage1Click(Sender: TObject);
begin
{
Agent1.Connected:=True;
Agent1.Characters.Load('Merlin','Merlin.acs'); //Charge l'agent
Merlin:=Agent1.Characters.Character('Merlin'); //Associe la variable à l'agent
Merlin.Show(0); //Affiche l'agent
Merlin.MoveTo( 300,400,20);
Merlin.Play('DoMagic1');
//Merlin.Play('Congratulate'); //Anime l'agent, "Congratulate" est le type de l'animation
//Merlin.Play('DoMagic1');
//Merlin.MoveTo(500,0,1000);
}
end;
procedure TFichePrincipale.Fichierdaide1Click(Sender: TObject);
begin
ShellExecute(0, nil,'tierpayant.hlp' , nil,nil, sw_maximize);
end;
procedure TFichePrincipale.Recherchedelaide1Click(Sender: TObject);
begin
Application.HelpContext(0);
end;
procedure TFichePrincipale.FileListBox1Click(Sender: TObject);
begin
//showmessage(filelistbox1.FileName);
vers:= filelistbox1.FileName;
end;
procedure TFichePrincipale.RoundButton1Click(Sender: TObject);
begin
panel3.Visible := false;
end;
// Fonction "CallBack" appelée par CopyFileEx pour signaler l'avancement de la copie
function CopyCallBack(
TotalFileSize: LARGE_INTEGER; // Taille totale du fichier en octets
TotalBytesTransferred: LARGE_INTEGER; // Nombre d'octets déjàs transférés
StreamSize: LARGE_INTEGER; // Taille totale du flux en cours
StreamBytesTransferred: LARGE_INTEGER; // Nombre d'octets déjà tranférés dans ce flus
dwStreamNumber: DWord; // Numéro de flux actuem
dwCallbackReason: DWord; // Raison de l'appel de cette fonction
hSourceFile: THandle; // handle du fichier source
hDestinationFile: THandle; // handle du fichier destination
ProgressBar : TProgressBar // paramètre passé à la fonction qui est une
// recopie du paramètre passé à CopyFile Ex
// Il sert à passer l'adresse du progress bar à
// mettre à jour pour la copie. C'est une
// excellente idée de DelphiProg
): DWord; far; stdcall;
var
EnCours: Int64;
begin
// Calcul de la position du progresbar en pourcent, le calcul doit être effectué dans
// une variable intermédiaire de type Int64. Pour éviter les débordement de calcul
// dans la propriété Position de type integer.
EnCours := TotalBytesTransferred.QuadPart * 100 div TotalFileSize.QuadPart;
If ProgressBar<>Nil Then ProgressBar.Position := EnCours;
// La fonction doit définir si la copie peut être continuée.
Result := PROGRESS_CONTINUE;
if encours = 100 then showmessage('copie terminée');
begin
nomf:=Inputbox('Nom du fichier destination','Nom et extension','');
if nomf='' then par:= par + rightstr(vers,length(vers)-3) else par:= par+nomf;
if (par '') or (vers '') or (par = vers) then
Exit;
if FileExists(par) and
(MessageDlg('Le fichier de destination existe, voulez-vous le remplacer ?',
mtconfirmation, [mbYes, mbNo], 0) <> mrYes) then
Exit;
Retour := False;
if not CopyFileEx(
PChar(vers), // Nom du fichier d'origine
PChar(par), // Nom du fichier de destination
@CopyCallBack, // Adresse de la fonction appelée durant la copie
ProgressBar1, // Paramètre auxiliaire qui sert ici à définir le progress bar
// à mettre à jour [DelphiProg]
@Retour, // adresse d'une variable booléène que la fonction teste
// en permanence pour éventuellement stopper la copie
COPY_FILE_RESTARTABLE) // Si la copie est stoppée, un nouvel appel avec les mêmes
// paramètres permet de la continuer
then ShowMessage(SysErrorMessage(GetLastError));
end;
procedure TFichePrincipale.Aide1Click(Sender: TObject);
begin
Application.CreateForm(tapropos, apropos);
apropos.show;
end;
procedure TFichePrincipale.MediaPlayer1Click(Sender: TObject;
Button: TMPBtnType; var DoDefault: Boolean);
begin
panel4.Visible := true;
end;
procedure TFichePrincipale.Image4Click(Sender: TObject);
begin
image8.OnClick(sender);
panel4.Visible :=true;
mediaplayer1.play ;
end;
procedure TFichePrincipale.Apropos1Click(Sender: TObject);
begin
Application.CreateForm(tapropos, apropos);
apropos.show;
end;
procedure TFichePrincipale.Emplacementdelabasededonne1Click(
Sender: TObject);
begin
Application.CreateForm(tdsn, dsn);
dsn.show;
end;
procedure TFichePrincipale.ToolButton16Click(Sender: TObject);
begin
if t then
begin
panel4.Visible := true;
monthcalendar1.Visible := true;
monthcalendar1.BringToFront ;
end
else
begin
panel4.Visible :=false;
monthcalendar1.Visible := false;
mediaplayer1.stop ;
end;
t:= not t;
end;
procedure TFichePrincipale.ToolButton17Click(Sender: TObject);
begin
frmrechercher.show;
end;
procedure TFichePrincipale.ToolButton14Click(Sender: TObject);
begin
application.CreateForm(texplorateur, explorateur);
explorateur.show;
end;
procedure TFichePrincipale.Minimiserlapplication1Click(Sender: TObject);
begin
cooltrayicon1.HideMainForm ;
end;
procedure TFichePrincipale.Afficherlapplication1Click(Sender: TObject);
begin
cooltrayicon1.ShowMainForm ;
end;
procedure TFichePrincipale.Fermerlapplication1Click(Sender: TObject);
begin
cooltrayicon1.Destroy;
Application.Terminate ;
end;
procedure TFichePrincipale.CoolTrayIcon1DblClick(Sender: TObject);
begin
if t then cooltrayicon1.ShowMainForm else cooltrayicon1.HideMainForm ;
t:= not t;
end;
procedure TFichePrincipale.Supprimerunutilisateur1Click(Sender: TObject);
Var fichier : textfile;
Registre: TRegistry;
t,s,n,p:string; trouve:boolean;
begin
Showmessage('Signaler l''opération à l''administrateur');
Registre:=TRegistry.Create;
Registre.RootKey:=HKEY_CURRENT_USER;
Registre.OpenKey('\software\'+'sablier',true);
n:=inputbox('Ajout utilisateur','Pseudo utilisateur','xxxxxx');
p:=inputbox('Ajout utilisateur','mot de passe utilisateur','xxxxxx');
// s:= Registre.ReadString (Edit1.Text) ;
Registre.DeleteValue(n) ;
Registre.Free;
showmessage('L'' utilisateur: ' +#13+ n +' '+p+#13+'n''est plus valide');
end;
procedure TFichePrincipale.ToolButton13Click(Sender: TObject);
begin
Application.CreateForm(tlogoappform,logoappform);
logoappform.show;
end;
procedure TFichePrincipale.ToolButton8Click(Sender: TObject);
begin
ShellExecute(Handle,nil,'winchat',nil,'winchat',SW_SHOW);
end;
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 11 juil. 2008 à 23:33
j'ai déjà réglé un souci de ce genre dans une ancienne appli...
Je cherche dans mon bazar..............................................................................
.........................................................................................
..............................................................
................................................
cantador
Vous n’avez pas trouvé la réponse que vous recherchez ?
cavalier2400
Messages postés120Date d'inscriptionmardi 8 juillet 2008StatutMembreDernière intervention 1 décembre 20101 11 juil. 2008 à 23:54
BSR, Je te remerci
Là, je tombe sur plusieurs problèmes
1. Si je dois fermer l'application je dois passer par (un bouton avec Application.terminate) , tandis que onclose, il ya pas de basic actions
2. Le x de la fenetre fermer génère à certain moment des erreurs,
3. Mon TrayIcon, est hors jeux (Puisque son activité est liée avec la fiche principale),
4. Et j'ai aussi un Timer relié à la fiche pricipal (un souci de plus).
cavalier2400
Messages postés120Date d'inscriptionmardi 8 juillet 2008StatutMembreDernière intervention 1 décembre 20101 12 juil. 2008 à 00:18
Bsr, J'ai trouvé la solution, basé sur une véritable simulation (extraordinaire), grace à l'astuce de Application.processMessage (do events) jusqu'à l'apparition de la fiche principale. Réponse sur ce même site , "loggin avec utilisateur mot de passe". PS (La fiche Motdepasse n'est pas la fiche principal).
cavalier2400
Messages postés120Date d'inscriptionmardi 8 juillet 2008StatutMembreDernière intervention 1 décembre 20101 12 juil. 2008 à 11:55
BSR, J'ai encore trouvé une autre solution proposé par Abdousoft (Email: [mailto:djezarsoft@yahoo.fr djezarsoft@yahoo.fr], Mais celle là est vraiment cool, et répond à toutes les exigences, et d'une esthétique!!! j'en dis pas plus.thx (Abdul)
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 12 juil. 2008 à 14:11
1. la form motdepasse est lancé, (mais Delphi veut qu'elle soit une mainform
2. Si le mot de passe est correcte la Vrai fiche principale avec le menu principale apparait,
3. La fiche motdepasse s'éclipse, et l'application ferme sans problème
j'ai répondu simplement à la question posée..
A noter que dans une appli, il faut un seul point d'entrée..
jlen100
Messages postés1606Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention25 juillet 201413 12 juil. 2008 à 16:51
bonjour
il suffit simplement de créer ton appli avec la forme principale en visible:=false; ta form mot de passe en visible:=true; à la fermeture de la form mot de pas tu fais formPricipal.show; et le tour est joué.
cs_Loda
Messages postés814Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention30 juillet 20093 16 juil. 2008 à 09:37
salut,
la réponse est déjà bien répondu, mais voilà quelques détails:
une petite imprécision dans la réponse jlen:
Bonjour
il suffit simplement de créer ton appli avec la forme principale en visible:= false; ta form mot de passe en visible:=true; <strike>à la fermeture de la form mot de pas tu fais formPricipal.show</strike> dans le btnOk.onclick, si le mot de pass est bon, tu fais formPricipal.show et frmLogin.hide; et le tour est joué.
#
tu crée deux fois ta form mpass1. Une fois dans le projet (a garder) et une fois dans le principal.onCreate (a effacer)
#
mpasse1.free -> je suppose que tu voulais le mettre dans principal.onShow
(et je ne sais pas si tu peux appeler mpasse1.free depuis le ButtoOnClick de cette même form.)
note que tu ne peux pas détruire le form principal de l'application.
#
TFichePrincipale.FormActivate est appeler a CHAQUE fois que la form est activé. Ce ne PAS le bon endroit pour charger des images / changer des trucs. (plustot onCreate)
#
Windows.SetParent(pharmacie6.Handle, Panel2.Handle);
-> connaîs-tu les TFrame ? Et les TPageControl?
# nommer tes composant est une bonne idée (et sur le long terme, tu gagnes bcp de temps)
#
procedure TFichePrincipale.Aide1Click(Sender: TObject);
begin
Application.CreateForm(tapropos, apropos);
apropos.show;
end;
avant de (re) creer la form, test si elle exist déjà.
bon code,
Loda
<hr size ="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
cavalier2400
Messages postés120Date d'inscriptionmardi 8 juillet 2008StatutMembreDernière intervention 1 décembre 20101 16 juil. 2008 à 12:40
BSR,
Voilà je poste le code remodeler, que j'ai trouvé sur un autre site,
{$R *.dfm}
function Tloginfrm.LoginCorrect(Util: String; MDP: String): Boolean;
Var
Registre : Tregistry;
begin
Registre:= TRegistry.Create;
Registre.RootKey:=HKEY_CURRENT_USER;
Registre.OpenKey('\software\'+'sablier',true);
m:= Registre.ReadString (util) ;
Registre.Free;
result := False;
if not ((util<>'') and (MDP = m )and(MDP <>'' ) ) then // verification du nom d'utilisateur et mot de passe
begin
//Application.MessageBox('Utilisateur ou mot de passe incorrect!','Erreur',MB_IconError); // afficher un message d'eereur
showmessage('Nom utilisateur incorrect ou mot de passe'+#13+'Esscai d''activation: '+ IntToStr(Controle+1) + '/3.');
ModalResult := mrCancel;
utiledit.Clear ;
mdpedit.Clear ;
inc(controle);
if controle < 3 then // si le boutton ok est clicke <3 fois
abort; // l'aaplication dot etre fermé apres afficher le message si dessus
Application.MessageBox('Fermeture de l''Application','Erreur',MB_IconError);
end;
result := True;
end;
procedure TLoginfrm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if ModalResult = mrOk then
if not LoginCorrect(utiledit.Text, mdpedit.Text) then
end;
procedure TLoginfrm.FormActivate(Sender: TObject);
begin
okbtn.SetFocus ;
utiledit.SetFocus ;
end;
et ne pas oublier dans le module:
{$R *.res}
var F: Tloginfrm;
begin
F : = Tloginfrm.Create(Application);
try
if F.ShowModal =mrOk then
begin
Application.Initialize;
Application.CreateForm(Tficheprincipale, ficheprincipale);
Application.CreateForm(TfrmRechercher, frmRechercher);
Application.CreateForm(Tfrm_imp_SQL, frm_imp_SQL);
Application.CreateForm(TApropos, Apropos);
Application.CreateForm(Tdsn, dsn);
Application.CreateForm(Tfrm_Sauvegarde, frm_Sauvegarde);
Application.CreateForm(Tlibre_pour_tester, libre_pour_tester);
Application.CreateForm(Tgrid, grid);
Application.Run;
end;
finally
F.Free;
end;
Obs:
Trois solution sont possible pour la bonne réalisation (du genre deltree), on ne peut pas supprimer la branche sur laquelle on est assis, (La fiche (mère) principale, il faut bien ruser(méthode hide), ou simuler (méthode exemple trouvé d'un prog -login...), ou ce cas que je propose.
1. Dans mon premier essai, mpasse1.hide (figure un peu partout) en désespoir!
2. Pour les frames, j'étais tombé quelque part sur un programme (je me rappelle) il porte le nom de tutorial frame, programmé par un Martiniqué, mais son exemple était très beau, mais le chargement de la page et des composant laisse à désirer, un peu plus tard (Frames, splitter et treeview) sont la base pour la réalisation d'un explorateur.
un peu plus tard, j'étais tombé sur un exemple de programme, sur la fiche principale, un petit panel et un grand, le petit peu alors jouer le role du menu et le grand le rôle de la fiche principal, c'est ce que le Martiniqué voulait hélas reéussir.
(L'ensemble des fiches n'est pas chargé automatiquement au démarrage de l'application, mais les fiches sont chargées au fur et à mesure Application.createform(tf1,f1)[Après les avoir effacé de l'unité module, ou graçe à options du projets];
(Dommage, beaucoups de fonctions systèmes ne se trouvent ni sur le help windows, ni sur le help de delphi, maintenant pour progresser , je suis dans l'obligation d'installer la visionneuse d'APi du VB).