Ondex
Messages postés11Date d'inscriptionmercredi 26 décembre 2001StatutMembreDernière intervention 4 mars 2004
-
13 janv. 2002 à 12:41
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 2021
-
7 févr. 2002 à 21:37
Salut,
je cherche une technique pour afficher quelque chose en OSD (un composant ou du code).
J'ne ai trouver un mais c'etait un faux, ce n'etait en fait qu'une fenetre sans bordure toujour au dessus des autre.
Le but c'est d'afficher un timer dans Quake3 (pour le quad damage) et il n'y a que du 'vrai' OSD qui s'affiche par dessus le jeux (je ne veut pas jouer en mode fenetre).
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 24 janv. 2002 à 20:45
C simple , grace a une API
( GetDesktopWindow ) tu recupere le Device Context de l'ecran
(numero identifiant pour windows)
maintenant , tu peux utiliser toutes les fonctions graphiques que tu veux , grace a ce hDc.
Ondex
Messages postés11Date d'inscriptionmercredi 26 décembre 2001StatutMembreDernière intervention 4 mars 2004 25 janv. 2002 à 19:07
Salut,
effectivement, je suis interresser par ton idée, peut m'envoyer plus d'information (ou me dire ou en trouver), si possible assez simple, je ne suis pas un grand programmeur VB
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 28 janv. 2002 à 10:32
comme je te l'ai dit ,
ex:
dans un module :
Public Declare Function GetDesktopWindow Lib "user32" Alias "GetDesktopWindow" () As Long
Public Declare Function Rectangle Lib "gdi32" Alias "Rectangle" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
et dans ton code
dim ecran HDC as long
ecranHDC = GetDesktopWindow
dim tim as long
tim=Timer
Do:Doevents
Rectangle ecranHDC 50,150,400,370
Loop until tim+2<timer
'Affiche un rectangle à l'ecran pendant 2 secondes
'by RENFIELD
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 28 janv. 2002 à 10:33
comme je te l'ai dit ,
ex:
dans un module :
Public Declare Function GetDesktopWindow Lib "user32" Alias "GetDesktopWindow" () As Long
Public Declare Function Rectangle Lib "gdi32" Alias "Rectangle" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
et dans ton code
dim ecran HDC as long
ecranHDC = GetDesktopWindow
dim tim as long
tim=Timer
Do:Doevents
Rectangle ecranHDC 50,150,400,370
Loop until tim+2<timer
'Affiche un rectangle à l'ecran pendant 2 secondes
'by RENFIELD
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 28 janv. 2002 à 10:33
comme je te l'ai dit ,
ex:
dans un module :
Public Declare Function GetDesktopWindow Lib "user32" Alias "GetDesktopWindow" () As Long
Public Declare Function Rectangle Lib "gdi32" Alias "Rectangle" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
et dans ton code
dim ecran HDC as long
ecranHDC = GetDesktopWindow
dim tim as long
tim=Timer
Do:Doevents
Rectangle ecranHDC 50,150,400,370
Loop until tim+2<timer
'Affiche un rectangle à l'ecran pendant 2 secondes
'by RENFIELD
Ondex
Messages postés11Date d'inscriptionmercredi 26 décembre 2001StatutMembreDernière intervention 4 mars 2004 31 janv. 2002 à 20:47
Salut,
j'ai essayer ton code mais impossible de le faire fonctionner, il ne se passe rien.
J'ai modifier les qques erreurs (genre dim ecran HDC) mais sans resultats, il ne se passe rien. Si tu as une idée, je suis sous winXP si cela peut influencer tes idée.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 31 janv. 2002 à 21:21
desole , j'ai ouble un detail :
GetDesktopWindow renvoie le Hwnd , non le HDc
(le handle de la fenetre , non le handle graphique !)
if faut que tu utilise GetDc pour recuperer le Hdc a partir du hWnd :
Declare Function GetDC Lib "user32" Alias "GetDC" (ByVal hwnd As Long) As Long
puis dans ton code
dim ecranHDC as long
dim ecranHwnd as long
ecranHwnd = GetDesktopWindow
ecranHdc = getdc(ecranHwnd)
dim tim as long
tim=Timer
Do:Doevents
Rectangle ecranHDC,50,150,400,370
Loop until tim+2<timer
'Affiche un rectangle à l'ecran pendant 2 secondes
j'ai ecris le code de tete donc j'avais pas pu verifier.
desole pour la perte de temps
Ondex
Messages postés11Date d'inscriptionmercredi 26 décembre 2001StatutMembreDernière intervention 4 mars 2004 1 févr. 2002 à 14:22
Salut,
je te remerci de ton code mais je en voit tjr rien, pourrai tu m'envoyer la source de ton projet quand ça marchait, parceque je pense avoir bien fais mais il n'y a rien.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 2 févr. 2002 à 18:21
Tu m'as l'air sacrement embette !
desole , ton prbleme aurai pu etre regle vite et bien.
au lieu de ca , ca fait une semaine que tu reste bloque , par ma faute :
bon , treve de plaisanterie:
ce code fonctionne à 100% (C sur, la j'avais VB sous la main)
de plus , il est plus simple !! (autre api , il en existe souvent des tas , pour faire une chose...)
********************
Declarations :
********************
Public Declare Function Rectangle Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Public Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long
*********************
Code :
*********************
Dim tim As Long
tim = Timer
Do: DoEvents
Rectangle GetWindowDC(0), 0, 0, 400, 370
Loop Until tim + 2 < Timer
End
*********************
pour eviter que le rectangle reste , il faut que l'ecran se rafraichisse integralement.
un bon moyen :
Demarrer -> Arreter -> Annuler
Je te prie d'accepter moes exscuses (si si)
et espere que tu me contactera , si tu as d'autres problemes
Ondex
Messages postés11Date d'inscriptionmercredi 26 décembre 2001StatutMembreDernière intervention 4 mars 2004 5 févr. 2002 à 21:32
Merci bcp,
le code marche bien mais le probleme c'est que dans Quake 3, il doit se remettre par dessus tt le tps et ça fait bcp ramer le pôv PC.
Ce qui me faudrait c'est un bloc qui reste par dessus et que je peux actualiser (ou bien dont je modife le texte a l'interieur).
En tt cas, même on ne peux pas faire ce qu'il me faudrait, merci de m'avoir aider.
@+ 8-)
PS : ne soit pas si dur avec toi même, tu n'etais pas obliger de m'aider, et tu l'a fais, c'est deja bien.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 7 févr. 2002 à 21:37
Salut , tu aurais du le dire tout de suite !
je pense que tu peux utiliser une form que tu place en TopMost ( style Winamp )
en la reduisant , voire en mettant des zones transparentes(là , j'ai peur pour la vitesse )
ca devrais marcher !!
'*****************************************
Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2
Const SWP_NOSIZE = &H1
Const SWP_NOMOVE = &H2
Const SWP_NOACTIVATE = &H10
Const SWP_SHOWWINDOW = &H40
Private Declare Sub SetWindowPos Lib "User32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)
Private Sub Form_Activate()
'KPD-Team 1998
'URL: http://www.allapi.net/ 'E-Mail: KPDTeam@Allapi.net
'Set the window position to topmost
SetWindowPos Me.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE
End Sub
'***************************************