Membres inscrits :2359
Membres en ligne : 0
Invités en ligne : 7


|
Conversation (Résolue) : Afficher Heure Minutes Secondes en temps réel. |
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!
|
|
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1390
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à ... et effectivement, depuis le temps, ce n'est plus tellement nouveau....
|
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
|
|
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1390
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à ... et effectivement, depuis le temps, ce n'est plus tellement nouveau....
|
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.
|
|
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1390
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 !  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à ... et effectivement, depuis le temps, ce n'est plus tellement nouveau....
|
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
|
|
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
|
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1390
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à ... et effectivement, depuis le temps, ce n'est plus tellement nouveau....
|
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:
-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
|
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)
|
|
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)
|
|
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...
|
|
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
|
|