wxDev.fr, le portail francophone consacré à wxWidgets ! ( The french portal for wxWidgets )  
Esp. membre
Recheche rapide



Recherche avancée
Statistiques
Membres inscrits :2359

Membres en ligne : 0
Invités en ligne : 1

Valid XHTML 1.0 Transitional

Valid CSS2

Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Développement C/C++
» Afficher Heure Minutes Secondes en temps réel.
Conversation (Résolue) : Afficher Heure Minutes Secondes en temps réel.
30-06-2008 15:19:20  Afficher Heure Minutes Secondes en temps réel. #1
guyothomas (Membre)
Inscrit le : 05-06-2008
Messages: 66
Snippets: 0
Tutoriels: 0
Hors ligne
Bonjour,
J'ai une appli GUI, pour laquelle j'affiche un bitmap pour le fond, puis du texte et des contrôles divers par dessus. Jusque là aucun problème.
Parmi les bouts de texte affichée, il y a la date et l'heure (et les secondes surtout!).
J'aimerais que l'heure affichée soit correcte et évolue en temps réel, toutes les secondes.
Pour ça, j'ai mis un wxTimer d'une seconde en route avec une fonction OnTimer(wxTimerEvent& WXUNUSED(event)) qui fait juste un Refresh(); ce qui execute la fonction OnPaint() où se produit tout l'affichage.

Et là, en plus de clignoter, ça saccage tout mon affichage en effaçant sans redessiner mon bitmap de fond ni les textes... Le texte présentant l'heure n'est même plus visible...

Quelqu'un voit-il comment je pourrais avoir mon heure affichée correctement sans effacer tout le reste?

Merci!
30-06-2008 15:23:35  Re: Afficher Heure Minutes Secondes en temps réel. #2
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1383
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Salut.

Le texte que tu dois mettre à jour est affiché comment ?
- écriture directe avec le wxPaintDC sur le fond de la fenêtre ?
- modification du contenu d'un wxStaticText ou d'un autre contrôle ?

@+
Xav'

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
30-06-2008 15:56:50  Re: Afficher Heure Minutes Secondes en temps réel. #3
guyothomas (Membre)
Inscrit le : 05-06-2008
Messages: 66
Snippets: 0
Tutoriels: 0
Hors ligne
Je voulais le faire dans le OnPaint avec un DrawText().
Mais je suis en train d'essayer avec ma classe dérivée de wxStaticText, ça a l'air mieux, mais la difficulté va être d'avoir le fond du statictext exactement pareil que mon bitmap, qui présente des dégradés ;)
30-06-2008 16:09:11  Re: Afficher Heure Minutes Secondes en temps réel. #4
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1383
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Essayes de conserver ta méthode (avec le DrawText), mais en ajoutant le style wxCLIP_CHILDREN à ta fenêtre (ou au contrôle dont tu dois redessinner le fond).

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
30-06-2008 16:48:49  Re: Afficher Heure Minutes Secondes en temps réel. #5
guyothomas (Membre)
Inscrit le : 05-06-2008
Messages: 66
Snippets: 0
Tutoriels: 0
Hors ligne
Salut!
J'ai trouvé une solution, elle est sûrementassez crade, mais elle a le mérite de bien s'afficher.
J'ai crée un BitmapButton (parceque je connais bien cette classe!, un wxBitmap aurait suffit) et je modifie dans un wxMemoryDC le bitmap à afficher en lui collant l'heure.
ça donne ça:

Code wxWidgets:

OnTimer(wxTimerEvent & t_event)
{
    bmp = new wxBitmap(_T("bitmaps\\fond_du_haut.bmp"), wxBITMAP_TYPE_BMP);
    wxMemoryDC mem_dc = new wxMemoryDC(*bmp);
    mem_dc.SelectObject(*bmp);
    mem_dc.DrawText(* GetTime(), wxPoint(5, 7));
    btn_time->SetBitmapLabel(*bmp);
    mem_dc.SelectObject(wxNullBitmap);
};

Merci Xaviou pour ton intérêt pour nos problèmes.
à la prochaine!
Thomas.
30-06-2008 17:25:00  Re: Afficher Heure Minutes Secondes en temps réel. #6
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1383
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
guyothomas:
J'ai trouvé une solution, elle est sûrementassez crade, mais elle a le mérite de bien s'afficher.
Pour être crade, elle est crade ! :lol:
Mais pas pour la raison que tu penses : le principe est (à mon goût) bon.
Mais il faut quand même penser à détruire l'object wxBitmap que tu crées.
Le plus simple, dans ce cas, c'est de ne pas utiliser de pointeur, mais une variable "classique"  (d'ailleurs; la ligne de création du wxMemoryDC est on ne peut plus bizarre):

Code wxWidgets:

OnTimer(wxTimerEvent & t_event)
{
    wxBitmap bmp(_T("bitmaps\\fond_du_haut.bmp"), wxBITMAP_TYPE_BMP);
    wxMemoryDC mem_dc(bmp);
    mem_dc.SelectObject(*bmp);
    mem_dc.DrawText(* GetTime(), wxPoint(5, 7));
    mem_dc.SelectObject(wxNullBitmap);
    btn_time->SetBitmapLabel(*bmp);
};


De plus, pourquoi utiliser un wxBitmapButton pour l'affichage quand un simple wxStaticBitmap suffit ?

@+
Xav'

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
03-07-2008 14:39:56  Re: Afficher Heure Minutes Secondes en temps réel. #7
guyothomas (Membre)
Inscrit le : 05-06-2008
Messages: 66
Snippets: 0
Tutoriels: 0
Hors ligne
Salut Xaviou!

Merci pour tes conseils. Je l'avais pas mis dans ce que j'ai montré mais j'avais quand fait un "delete mem_dc". Ceci dit, c'est peut-être vrai que j'abuse un peu des new, il parait que ça vient du java...

Pour répondre à ta question, j'ai utilisé un wxBitmapButton parce que j'en ai plus l'habitude que des wxStaticBitmap. Simplement...

Une question annexe en rapport avec les new/delete: dis moi si tu penses qu'elle devrait être ailleurs, mais y a-t-il des utilitaires qui permettent de détecter la provenance de fuites de mémoires?

Merci pour ton aide, @+.

Thomas
03-07-2008 16:56:38  Re: Afficher Heure Minutes Secondes en temps réel. #8
4ian (Membre)
Inscrit le : 06-11-2007
Messages: 48
Snippets: 0
Tutoriels: 0
Site web
Hors ligne
guyothomas:
Une question annexe en rapport avec les new/delete: dis moi si tu penses qu'elle devrait être ailleurs, mais y a-t-il des utilitaires qui permettent de détecter la provenance de fuites de mémoires?
ça m'intéresserait aussi, actuellement j'utilise un détecteur directement intégré à l'appli, dont j'ai récupéré la source sur internet, ( il tient en 1 fichier .cpp et un fichier .h ).

C'est pratique, mais si il y avait des logiciels spécialisés, je serai preneur.

4ian

wwwcompilgames.net
03-07-2008 17:59:12  Re: Afficher Heure Minutes Secondes en temps réel. #9
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1383
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
4ian:
actuellement j'utilise un détecteur directement intégré à l'appli, dont j'ai récupéré la source sur internet, ( il tient en 1 fichier .cpp et un fichier .h ).
Fais péter un lien (ou le code si c'est pas trop long) : c'est toujours intéressant ce genre de choses.

Sinon, guyothomas, je ne sais pas si tu arriveras facilement à trouver un outil qui te permette de trouver la provenance d'une fuite mémoire.
Tu trouveras par contre des outils qui te permettent de détecter les fuites elles mêmes, mais la provenance, c'est une autre paire de manches :/

Enfin, si tu trouves, fais nous signe !

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
03-07-2008 18:13:24  Re: Afficher Heure Minutes Secondes en temps réel. #10
4ian (Membre)
Inscrit le : 06-11-2007
Messages: 48
Snippets: 0
Tutoriels: 0
Site web
Hors ligne
J'ai mis les deux fichiers en ligne :

www.compilgames.net/code/debugMem.cpp
www.compilgames.net/code/debugMem.h

Pour tester

-Incluez les deux fichiers à votre code source.

-Dans chaque fichier à debugger, mettez ça en tête des inclusions :

Code Cpp:

 
#define _MEMORY_TRACKER
#include "debugMem.h"
 


-Pour voir le rapport, mettez avant la fermeture de votre programme ( OnExit() par exemple )

Code Cpp:

 DumpUnfreed();


-La console devrait afficher quelque chose du genre :

Code:

 
Rapport de Memory Tracker----------------------------------
 
C:\Users\Florian\Programmation\Game Develop Editor\Game_Develop_EditorApp.cpp
Ligne 67 Adresse 49516976, 16 bytes non libérés
C:\Users\Florian\Programmation\Game Develop Editor\UnFichierQuiADesFuites.cpp
Ligne 10 Adresse 49502864, 16 bytes non libérés
-----------------------------------------------------------
Total non libéré: 32 bytes
 
 

Dernière modification par 4ian (03-07-2008 18:14:35)


4ian

wwwcompilgames.net
04-07-2008 08:39:11  Re: Afficher Heure Minutes Secondes en temps réel. #11
guyothomas (Membre)
Inscrit le : 05-06-2008
Messages: 66
Snippets: 0
Tutoriels: 0
Hors ligne
Salut!
ça a l'air bien ouf, je vais tester ça, merci!
----------
Rebonjour,

4ian, j'ai suivi ta procédure, et il y a un souci avec la ligne 19 de debugMem.h

Code Cpp:

#define DWORD unsigned long

on dirait que ça interfère avec le fichier de la SDK WinDef.h, à la ligne qui dit

Code Cpp:

typedef unsigned long       DWORD;

car mon compilo (Visual Cpp .NET 2002) me lance ça:

Code:

c:\Program Files\Microsoft Visual Studio .NET\Vc7\PlatformSDK\Include\WinDef.h(141) : warning C4114: même qualificateur de type utilisé plusieurs fois
c:\Program Files\Microsoft Visual Studio .NET\Vc7\PlatformSDK\Include\WinDef.h(141) : error C2632: 'long' ne peut pas être suivi de 'long'
c:\Program Files\Microsoft Visual Studio .NET\Vc7\PlatformSDK\Include\WinDef.h(141) : warning C4091: 'typedef ' : ignoré à gauche de 'unsigned long' quand aucune variable n'est déclarée

J'ai tenté de commenter la ligne 19 de debugMem.h, mais ça ne fait qu'empirer les choses.
qu'est-ce qui va pas?

Dernière modification par guyothomas (04-07-2008 09:05:53)

04-07-2008 10:18:54  Re: Afficher Heure Minutes Secondes en temps réel. #12
gbdivers (Membre)
Inscrit le : 05-03-2008
Messages: 92
Snippets: 2
Tutoriels: 0
Hors ligne

Code Cpp:

#define DWORD unsigned long

doit remplacer en "unsigned int" le "DWORD" de

Code Cpp:

typedef unsigned long       DWORD;


ce qui doit donner

Code Cpp:

typedef unsigned long       unsigned long;


:)

essaie de remplacer dans debugMem.h

Code Cpp:

#define DWORD unsigned long

par

Code Cpp:

typedef unsigned long       DWORD;

Dernière modification par gbdivers (04-07-2008 10:20:15)

04-07-2008 10:58:25  Re: Afficher Heure Minutes Secondes en temps réel. #13
guyothomas (Membre)
Inscrit le : 05-06-2008
Messages: 66
Snippets: 0
Tutoriels: 0
Hors ligne
Bonjour Gbdivers,

je suis d'accord avec ton raisonnement, je l'ai suivi et ça me donne ça:

Code:

Génération de code en cours...
Édition des liens en cours...
libcpd.lib(xmbtowc.obj) : error LNK2001: symbole externe non résolu _errno
libcpd.lib(xwcscoll.obj) : error LNK2001: symbole externe non résolu _errno
libcpd.lib(xstrcoll.obj) : error LNK2001: symbole externe non résolu _errno
libcpd.lib(locale.obj) : error LNK2001: symbole externe non résolu _errno
libcpd.lib(xwctomb.obj) : error LNK2001: symbole externe non résolu _errno
libcpd.lib(wlocale.obj) : error LNK2001: symbole externe non résolu _errno
libcpd.lib(xlocale.obj) : error LNK2001: symbole externe non résolu _errno
libcpd.lib(_tolower.obj) : error LNK2001: symbole externe non résolu ___mb_cur_max
libcpd.lib(_toupper.obj) : error LNK2001: symbole externe non résolu ___mb_cur_max
Debug/my_layout.exe : fatal error LNK1120: 2 externes non résolus
 

Je croyais que c'était lié à une librairie que j'ai spécifié au compilo d'ignorer mais en fait non, celle qu'il doit ignorer est "libcd.lib" et pas "libcpd.lib".
Je lui avais dit de l'ignorer car sinon il me sortait d'autres link errors 2001..., ce qui je pense n'était pas très normal non plus...

par ailleurs, je ne sais pas ce qu'en pensera Xaviou notre admin, mais on n'est plus du tout dans le sujet du titre. Si il faut déménager ou créer un nouveau sujet...
04-07-2008 15:19:24  Re: Afficher Heure Minutes Secondes en temps réel. #14
4ian (Membre)
Inscrit le : 06-11-2007
Messages: 48
Snippets: 0
Tutoriels: 0
Site web
Hors ligne
Je n'ai eu aucune erreur de ce type, mais j'utilise MinGW.
Je ne vois pas vraiment comment corriger ça.

Les erreurs au linkage viennent bien des 2 fichiers debugMem ?
Si tu les enlèves, ça marche ou pas ?

Par contre, oui, ce serait bien de couper le post en deux pour en faire un spécifique à la conversation.

4ian

wwwcompilgames.net
Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Développement C/C++
» Afficher Heure Minutes Secondes en temps réel.