IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Quelques petites questions [Langage/Algorithme]


Sujet :

C++Builder

  1. #1
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Points : 44
    Points
    44
    Par défaut Quelques petites questions
    Bonjour à tous,

    voilà dans mon programme pour chercher si il y a un anniversaire aujourd'hui je teste LE jour de l'année avec celui de la date de naissance de la personne, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    TDate d = Now() ;
    TDate date = Q_Ajouter->FieldByName("dateNaissance")->AsDateString;
    if(DayOfYear(date) == DayOfYear(d))
    {
      HAPPY BIRTHDAY !
    }
    Bref ce code marche, mais pas pour toutes les années, j'explique :
    Des fois j'ai un décalage d'un jour entre la vraie date d'anniversaire et celle que je trouve, notamment avec les années 2000 et 1840.
    Evidemment j'ai pensé aux années bissextiles, mais je sais pas comment vérifier cette théorie, et surtout comment remédier à ce problème !


    Second problème, j'ai un TImage qui affiche donc une image, j'aimerai qu'il libère l'image pour qu'il redevienne "vide" si possible, y a une méthode pour ça ?

    Merci bcp.

  2. #2
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 307
    Points
    1 307
    Par défaut
    Pour ton problème de date, tu peux utiliser la fonction DecodeDate, puis tester le jour et le mois.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    WORD y1, m1, d1, y2, m2, d2;
    TDate d1= Date();
    TDate d2 = [...]
    DecodeDate(d1, y1, m1, d1);
    DecodeDate(d2, y2, m2, d2);
    if( (d1==d2) && (m1==m2))
    ///[...]
    Pour ton problème d'image, tu peut effectuer un delete pour libérer l'image, puis affecter NULL...
    Ce que l'on apprend par l'effort reste toujours ancré plus longtemps...

  3. #3
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Points : 44
    Points
    44
    Par défaut
    Yep merci beaucoup j'ai testé le DecodeDate et il marche impeccable, me reste à tester pour l'image.

    J'ai un autre problème :

    Je souhaite que mon programme se lance au démarrage de Windows, j'ai utilisé la méthode du tuto de Builder, à savoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      TRegistry *Reg = new TRegistry();
      Reg->RootKey = HKEY_LOCAL_MACHINE;
      Reg->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run", false);
      Reg->WriteString("AnniversaireM", "C:\\Users\\__sPiKe__\\Desktop\\Projets\\Anniversaire\\Debug\\AnniversaireM.exe");
      delete Reg;
    Ensuite mon programme se connecte à une BdD MS Access :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      AnsiString strDir = "..\\BdD\\BdDAnniversaire.mdb" ;
     
      try{
    		ADOConnection1->ConnectionString ="Provider=MSDASQL.1;Persist Security Info=False;Mode=ReadWrite;Extended Properties=""DBQ="
    									+ (AnsiString)strDir + ";DefaultDir=" + (AnsiString)strDir
                                        + ";Driver={Driver do Microsoft Access (*.mdb)};DriverId=25;FIL=MS Access;FILEDSN="
                                        + (AnsiString)strDir + ";MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5"
    									+ ";SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;";
    	ADOConnection1->Open();
    Lorsque mon PC démarre il lance bien le programme, mais il ne trouve pas la base de données ! Je ne sais pas pourquoi.. Une idée ?

  4. #4
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Change ton path relatif vers un path absolu. C'est juste une idée, qui a des chances de ne pas fonctionner
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

  5. #5
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Points : 44
    Points
    44
    Par défaut
    Finalement j'ai mis le chemin complet de la base de données et ça fonctionne

  6. #6
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Bonjour,

    Si tu veux faire un chemin dynamique, tu peux utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String RepApp = ExtractFilePath(Application -> ExeName) ;
    ensuite tu utilises RepApp pour accéder à la BDD.
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

  7. #7
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Points : 44
    Points
    44
    Par défaut
    Interessant, je vais tester ça, merci bien je vous tiens au courant :=)

  8. #8
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Points : 44
    Points
    44
    Par défaut
    Pour libérer le TImage de son image n'y a-t'il pas un autre moyen que de le détruire ?

  9. #9
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 307
    Points
    1 307
    Par défaut
    Citation Envoyé par __sPiKe__ Voir le message
    Pour libérer le TImage de son image n'y a-t'il pas un autre moyen que de le détruire ?
    Affecter la valeur NULL à sa propriété Picture...

    Mais que souhaite tu faire exactement? Si c'est juste pour masquer l'image, utilise la propriété Visible:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Image1->Visible = false ;
    Ce que l'on apprend par l'effort reste toujours ancré plus longtemps...

  10. #10
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Points : 44
    Points
    44
    Par défaut
    Voici le contexte :

    La personne remplie un formulaire, choisie sa photo, et lorsqu'elle clique sur le bouton "Envoyer" le TImage se libère.

    Affecter la valeur NULL à sa propriété Picture...
    C'est exactement ce que je voulais, merci

  11. #11
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Points : 44
    Points
    44
    Par défaut
    Une autre question, peut-on mettre un cadre autour d'un TIMage ?

  12. #12
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 307
    Points
    1 307
    Par défaut
    Tu peux utiliser un TBevel, ou alors placer ton TImage dans un TPanel pour avoir un effet de cadre.
    Ce que l'on apprend par l'effort reste toujours ancré plus longtemps...

  13. #13
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Si tu cherches à dessiner manuellement un cadre autour du TIMage, tu peux tracer une rectangle par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ... -> Canvas -> Rectangle(X, Y, X', Y') ;

    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

  14. #14
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Points : 44
    Points
    44
    Par défaut
    Le truc c'est que mon TImage est dynamique, il s'adapte à la forme de l'image qu'il contient, je vais exploiter vos solutions, merci beaucoup.

  15. #15
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Avec la solution que t'as donné sat83, tu peux mettre AutoSize du TBevel à true
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

  16. #16
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Points : 44
    Points
    44
    Par défaut
    Il n'y a pas d'AutoSize avec le TBevel

  17. #17
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 307
    Points
    1 307
    Par défaut
    Mail il y a un Autosize sur les Panel.
    Tu peux également jouer avec les propriétés BevelInner et BevelOuter pour modifier l'apparence du cadre autour.

    Après, si tu souhaite bien marquer la cadre autour de l'image, plutot que d'utiliser Autosize tu peux garder un écart (par exemple 5) entre le bord du Panel et le bord de l'image:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //[...]
    //CHARGEMENT DE L'IMAGE
    //[...]
    Image1->Top = 5 ;
    Image1->Left = 5;
    Panel->Width = Image1->Width + 10 ;
    Panel->Height= Image1->Height+ 10 ;
    Ce que l'on apprend par l'effort reste toujours ancré plus longtemps...

  18. #18
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Points : 44
    Points
    44
    Par défaut
    L'idée du Panel marche très bien

    Autre question :

    Je veux que mon programme se lance au démarrage comme je l'ai dit plus haut, seulement voilà je voudrai qu'on ai le choix de le lancer ou non avec un TCheckBox, voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void __fastcall TAnniversaire::CheckBox1Click(TObject *Sender)
    {
    	TRegistry *Reg = new TRegistry();
    	Reg->RootKey = HKEY_LOCAL_MACHINE;
    	if(CheckBox1->Checked){
    		Reg->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run", false);
    		Reg->WriteString("AnniversaireM", "C:\\Users\\__sPiKe__\\Desktop\\Projets\\Anniversaire\\Debug\\AnniversaireM.exe");
    	}else{
            Reg->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run", true);
    		Reg->DeleteValue("AnniversaireM");
    	}
    	delete Reg;
    }
    Ça me parait faux, d'autant plus que mon programme doit garder en mémoire si le TCheckBox est coché ou non...

    Voici le post duquel je me suis inspiré : http://www.developpez.net/forums/d12...nce-demarrage/

  19. #19
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Il suffit de d'enregistrer également l'état du CheckBox dans le registre
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

  20. #20
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Points : 44
    Points
    44
    Par défaut
    Oui c'est bien mon idée, mais voulais surtout savoir comment faire

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Séparer son code] quelques petites questions.
    Par echantillon dans le forum C
    Réponses: 33
    Dernier message: 07/03/2007, 17h29
  2. quelques petites questions
    Par la debutante dans le forum Windows
    Réponses: 1
    Dernier message: 20/12/2006, 09h08
  3. quelques petites questions sur les windows form
    Par natasha84 dans le forum C++/CLI
    Réponses: 22
    Dernier message: 25/05/2006, 22h14
  4. Quelques petites questions sur le shell
    Par Badaboumpanpan dans le forum Linux
    Réponses: 8
    Dernier message: 01/04/2006, 00h09
  5. [Tk] Quelques petites questions
    Par Damian dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 06/02/2006, 16h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo