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

 Delphi Discussion :

Besoins d'aide pour une application


Sujet :

Delphi

  1. #1
    Invité
    Invité(e)
    Par défaut Besoins d'aide pour une application
    Bonjour,
    J'ai décidé avant-hier de vraiment me mettre à la programmation (je commencerais vraiment après mon oral du bac soit dans 15jours) et j'ai choisis d'apprendre le Delphi (j'ai des connaissances en xHTML,CSS, VB.NET qui me permettent de bidouiller mais sans plus). Je suis donc le cours pour débuter ce language (celui sur ce site) et j'ai décidé de commencer une application tout de suite, que je vais peaufiner au fur et à mesure. Cette application n'a rien de très compliqué c'est tout simplement un minuteur qui, quand le temps est écoulé, va soit éteindre soit mettre en veille soit restart l'ordinateur.

    Un screenshot de l'application actuelle: (inutile de vous dire que le design est loin d'être finit)
    Nom : Screenshot_5.png
Affichages : 122
Taille : 283,2 Ko

    Et voici exactement ce que je veut faire:

    - L'utilisateur choisit entre "éteindre", "mettre en veille" ou "restart"
    - L'utilisateur rentre soit l'heure à laquelle l'ordi éxécute la tâche ou dans combien de temps via un Combobox.
    - L'utilisateur rentre les valeurs puis clique sur "Sleep"
    - Quand "Sleep" est activé, le bouton change en "Cancel" et un message apparait pour confirmer que l'ordinateur s'éteindra dans "XXh XXmin XXsec"
    - Un message apparait 10sec avant que l'action se fasse pour rappeler à l'utilisateur que l'ordi va s'éteindre si il n'est pas encore couché.
    - ProgressBar qui indique le temps restant
    - Désactiver Le bouton Sleep tant que tout n'est pas rentré

    Quelques problèmes rencontrés (à savoir que tout ce qui est dit plus haut n'est pas du tout fait et que je ne sais pas comment faire)
    - Les cases dans lesquelles l'user rentre un temps sont sur fond blanc et j'aimerais qu'ils soient transparent Finalement c'est pas utile
    - J'aimerais ques les chiffres dans les cases soient centrés Disponible dans l'inspecteur d'objet via alignment = taCenter
    - COLOR="#FF0000"]Les cases sont remplient par défaut par "H" "M" et j'aimerais que ceux là soit grisés et quand l'user cliquent qu'ils soient automatiquement suppr [/COLOR] Encore une fois, j'ai trouvé beaucoup plus simple dans l'inspecteur d'objet, laisser Text vide mais mettre le "H" dans TextHint, du coup dès que la case sera vide le H apparaitra en grisé sans problème en plus il n'y a pas besoin de supprimer le H comme ça aurait été le cas avec Text.
    - Shutdown et Standby sont en noir, j'ai essayé de modifier la couleur dans "font" mais ça n'a pas marché J'ai utilisé un label pour régler le problème
    - Changer le Boutton Sleep en Cancel . C'est peut être pas super optimisé mais voila comment j'ai procédé:
    J'ai deux bouttons les uns sur les autres: Button1=Sleep Button2=Cancel
    Pour Button1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Button2.Visible := True;
    Pour Button2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Button2.Visible := False;
    - J'aimerais que le boutton Sleep n'apparaisse que: Quand EditH et EditM soient remplis, qu'un choix à été fait dans GroupBox1, et que RadiobuttonStandby ou RadiobuttonShutdown ou RadiobuttonRestart soit coché .
    J'ai tenté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If RadiobuttonStandby.Checked = True or RadiobuttonShutdown.Checked = True or RadiobuttonRestart.Checked = True and ///JE SAIS PAS// Then Button1.Enabled = True
    - J'utilise une police spécial qui n'est pas par défaut sur les ordinateur, est-il possible d'importer cette police dans le programme sans pour autant utiliser un installateur? .
    - En scannant mon programme, les antivirus detectent des Génériques (voir: https://www.virustotal.com/fr/file/8...is/1402252168/, comment éviter ses faux positifs? mon programme n'est pas finit mais je ne pense pas qu'ils vont disparaitre .
    -J'aimerais que DateTimePicker soit Enabled uniquement quand Combobox = At . J'ai tout d'abord essayé de rentré dans Combobox "if Combobox1.Caption = 'In' then DateTimePicker1.Enabled := False; " Après avoir galéré à comprendre pourquoi j'avais une erreur. Je me suis rendu compte que Caption n'existait pas et que c'etait "Combobox1.text"

    J'ai pensé à:
    Pour faire l'action à une heure précise, convertir celle-ci en minutes puis faire "Temps en min mit par l'user"-"Temps en min actuel" puis afficher ce temps dans le texte de quelques secondes. Cependant imaginons qu'il soit 23h et que je veut que l'ordi se ferme à 1h du mat, ce calcul n'est alors plus bon.


    Vidéo de l'application (qui ne fonctionne pas réelement. Du moins peut importe ce qu'on rentre, l'action démarre à 120min):

    Si vous avez des solutions ou des pistes votre commentaire est le bienvenu

    Je suis sur Delphi XE6
    Dernière modification par Invité ; 09/06/2014 à 15h14.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2009
    Messages : 322
    Points : 310
    Points
    310
    Par défaut
    Citation Envoyé par SraX75 Voir le message
    -L'utilisateur choisit entre "éteindre" ou "mettre en veille"
    radiobutton
    -L'utilisateur choisit rentre soit l'heure à laquelle l'ordi éxécute la tâche ou dans combien de temps.
    idem
    - L'utilisateur rentre les valeurs puis clique sur "Sleep"
    Dépend si tu veux que l'application reste sur la barre de tache ou disparaisse complètement
    windowstate:=wsminimized
    j'ignore comment faire disparaitre completementune appli mais ça doit se trouver facilement
    -Quand "Sleep" est activé, le boutton change en "Cancel" et un message apparait pendant quelques secondes pour confirmer que l'ordinateur s'éteindra dans "XXh XXmin XXsec"
    button1.caption:='Cancel';

    - Un message apparait 10sec avant que l'action se fasse pour rappeler à l'utilisateur que l'ordi va s'éteindre si il n'est pas encore couché.
    showmessage('L'ordinateur va...');
    ou encore
    avec la création d'une seconde fiche: chercher splash screen
    Quelques problèmes rencontrés (à savoir que tout ce qui est dit plus haut n'est pas du tout fait et que je ne sais pas comment faire)
    -Les cases dans lesquelles l'user rentre un temps sont sur fond blanc et j'aimerais qu'ils soient transparent
    Écrire directement sur le canvas en interceptant directement les touches claviers,
    À moins de trouver une fonction permettant d'avoir des editmemo avec fond transparent, une recherche sur torry ou autre peut permettre de trouver se genre de composant

    -J'aimerais ques les chiffres dans les cases soient centrés
    - Choisi une police dont les chiffres ont tous la même largeur
    - Trouve un composant editmemo qui permettre de centrer le texte
    - Sinon fait un programme trouvant la largeur de chaque chiffre et place le directement dans l'image
    -Les cases sont remplient par défaut par "H" "M" "S" et j'aimerais que ceux là soit grisés et quand l'user cliquent qu'ils soient automatiquement suppr

    - Idem
    -Shutdown et Standby sont en noir, j'ai essayé de modifier la couleur dans "font" mais ça n'a pas marché
    Au lieu d'utiliser le caption de radiobutton, utilise un label dont la couleur est facilement modifiiable
    J'ai pensé à:
    Pour faire l'action à une heure précise, convertir celle-ci en minutes puis faire "Temps en min mit par l'user"-"Temps en min actuel" puis afficher ce temps dans le texte de quelques secondes. Cependant imaginons qu'il soit 23h et que je veut que l'ordi se ferme à 1h du mat, ce calcul n'est alors plus bon.
    Il y a la façon simple: un timer programmé a intervall= 1seconde (1000 ms) vérifie si l'heure choisi est plus petite que l'heure actuelle , mais faire ce test que si heure de programmation est plus petite que l'heure d'exécution.

    Façon complexe: convertir heure cible et heure en cours hh mm ss en fraction de journée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        heurecible:=encodetime(hh,mm,ss,zz);//zz=0;
        heureencours:=frac(now);
        intervalle:=heurecible-heureencours;
        if intervalle<0 then intervalle:=intervalle+1;
        timer1.interval:=intervalle*24*60*60*1000;//24 heures /jour; 60 minutes/heures; 60 secondes/minutes; 1000 milisecondes/seconde
    Écrit à la volée, à vérifier

    Bonne chance

  3. #3
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Bonjour,

    SraX75 : Quelques problèmes rencontrés (à savoir que tout ce qui est dit plus haut n'est pas du tout fait et que je ne sais pas comment faire)
    1) -Les cases dans lesquelles l'user rentre un temps sont sur fond blanc et j'aimerais qu'ils soient transparent
    -J'aimerais que les chiffres dans les cases soient centrés
    Utiliser un seul tEdit pour saisir H:M:S et associer celui-ci à trois tLabel avec leur propriété Transparent = True de la façon suivante :
    - lors de la saisie le tEdit est à visible = True et les tLabel sont à visible = False,
    - lors de l'appui sur la touche-clavier Enter on alimente le caption de chacun des tLabel par copie de H, M, et S depuis le tEdit,
    et en même temps on bascule le tEdit à visible = False et les tLabel à visible = True.
    (L'utilisation d'un tEDit est utile pour permettre à l'utilisateur de corriger des erreurs de saisie).
    Pour centrer les chiffres dans les cases les trois TLabel disposent de la propriété Alignement = taCenter.

    2) -Les cases sont remplies par défaut par "H" "M" "S" et j'aimerais que ceux là soit grisés et quand l'user clique qu'ils soient automatiquement suppr
    Pour le grisé : Label.font.color := clGray ou clSiver,
    Pour la suppression : Label.caption:='';

    3) - Shutdown et Standby sont en noir, j'ai essayé de modifier la couleur dans "font" mais ça n'a pas marché
    Bizarre car sous D6 RadioButton.Font.Color réagit normalement : Bug dans XE6 ???

    4) J'ai pensé à:
    Pour faire l'action à une heure précise, convertir celle-ci en minutes puis faire "Temps en min mit par l'user"-"Temps en min actuel" puis afficher ce temps dans le texte de quelques secondes. Cependant imaginons qu'il soit 23h et que je veut que l'ordi se ferme à 1h du mat, ce calcul n'est alors plus bon.
    Autre possibilité sans calculs : au lieu de saisir H, M, S saisir J, H, M, S = date-heure de fin du délai d'attente en respectant le format 08/08/2014 10:38:42
    donc si StringFinDelai = '08/08/2014 10:38:42' il suffit dans TForm1.Timer1Timer(Sender: TObject); de faire :
    if DateTimeToStr(now)=StringFinDelai alors le temps est écoulé on va soit éteindre, soit mettre en veille l'ordinateur.

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Il est probablement plus simple, voire fiable, de rester avec des TDateTime et DateTimeDebut := Now(); comme point de départ

    Si on saisit l'heure de fermeture, si DateTimeFin < Frac(DateTimeDebut) c'est qu'elle se situe le lendemain => il suffit d'ajouter 1 à DateTimeFin, soit un jour pour faire une simple soustraction avec la partie décimale qui donne l'intervalle :
    DateTimeDelai := (DateTimeFin + 1) - Frac(DateTimeDebut);.

    Si on souhaite saisir le délai, il suffit d'utiliser DatetimeFin := DateTimeDebut + DateTimeDelai;.

    Et dans le Timer, on décrémente DateTimeDelai pour affichage du délai restant et on teste si Now >= DatetimeFin pour déclencher l'action.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,
    Citation Envoyé par SraX75 Voir le message
    Je suis sur Delphi XE6
    Dans ce cas pourquoi ne pas développer une application FireMonkey ?
    Vous pourriez :
    • gérer la transparence de vos composants (Tlabel, TEdit, etc)
    • gérer la couleur de vos RadioButton (en utilisant les styles)
    • introduire des effets (apparition du texte annonçant la mise en veille, changement d'aspect des vos composants, etc)

    On peut faire tout cela avec une application VCL mais au prix de beaucoup plus de contorsions (donc de code)...

    Pour le reste un composant TTimer (comme déjà indiqué) permettra de gérer les déclenchements d'opération sans consommer inutilement des ressources.
    Philippe.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Ph. B. Voir le message
    Bonjour,
    Dans ce cas pourquoi ne pas développer une application FireMonkey ?
    Vous pourriez :
    • gérer la transparence de vos composants (Tlabel, TEdit, etc)
    • gérer la couleur de vos RadioButton (en utilisant les styles)
    • introduire des effets (apparition du texte annonçant la mise en veille, changement d'aspect des vos composants, etc)

    On peut faire tout cela avec une application VCL mais au prix de beaucoup plus de contorsions (donc de code)...

    Pour le reste un composant TTimer (comme déjà indiqué) permettra de gérer les déclenchements d'opération sans consommer inutilement des ressources.
    En réalité, j'ai tapé "application développement Delpi" sur Google et j'ai pris le premier truc qui m'est tombé sous la main. A moins que FireMonkey soit plus facile à prendre en main (je suis le plus débutant des débutant) ne vaut-il pas mieux que je reste sur l'application de base avant que je m'y connaisse mieux?
    J'ai mis à jour le post pour vous montrer ou j'en étais et j'applique (du moins j'essaie car je ne comprend pas encore tout) vos conseils.

    J'ai aussi ajouté d'autres problèmes comme les faux-positifs
    Dernière modification par Invité ; 08/06/2014 à 23h39.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Et si on utilisait la ProgressBar pour faire ce qu'on veut?
    Ex:
    Ajout d'un timer2 à 1000ms=1sec : enabled := False
    ProgressBar min = 0 et max = temps avant extinction

    Dans la "config" du Timer on met ProgressBar1.Position := ProgressBar1.Position+1;
    Si ProgressBar.Position = temps max
    Alors faire l'action demandé

    Dans Button1 (sleep):
    Timer2.Enabled := True;

    Et dans Button2 (Cancel):
    Timer2.Enabled := False;

Discussions similaires

  1. j`ai besoin d`une aide pour une application sur labview
    Par sarah1991 dans le forum LabVIEW
    Réponses: 3
    Dernier message: 14/05/2012, 19h24
  2. Réponses: 0
    Dernier message: 11/03/2010, 09h39
  3. Création requete besoin d'aide pour une date
    Par royrremi dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 14/07/2004, 22h03
  4. Besoin d'aide pour une Requête SQL ...
    Par Kokito dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/07/2004, 11h56
  5. besoin d'aide pour une requête
    Par Damien69 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 31/03/2004, 15h38

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