Osd function (on screen display)

Soyez le premier à donner votre avis sur cette source.

Vue 6 529 fois - Téléchargée 732 fois

Description

J'ai fait une fonction qui permet d'afficher du texte en premier plan sur l'écran et de le placer ou l'on veut (avec fonction d'alignement verticale / horizontale...) On peut choisir la couleur du texte, la taille et la police.. J'ai aussi fait un exemple d'utilisation
Marche très bien... C'est très rapide ! Beaucoup plus rapide que la fonction consistant a faire un PictureBox.Print et ensuite de faire un fenetre "non-standard" en fonction de la picturebox (Cf. fonction MakeRegion)
Voilà j'espère que ça pourra vous aidé...
Si j'ai la motivation :) pour continuer ce proje, je vais faire un éditeur permettant de créé des fichier *.osd qui pourront être lu avec un viewer "osd" ce qui permettra de ne pas se faire "ch****" avec les pixel etc... Il suffira de dessiner son rond son carré son text et le prog fait tout le reste... Pour l'instant le prog supporte que le texte mais pour dessiner un rond ou carré etc... c'est d'une simplicité extrême !
Voilà j'espère une fois de plus que ça pourra vous aider

PS: mise à jour effectuée le 8.03.2003: Lorsque l'on affiche l'OSD, la fenêtre ayant précédemment le focus, perd le focus. Ce problème a été résolu ! (Pour plus de détail voir les commentaires)

Bonne progz a tous

Bye

Cyberdevil

Source / Exemple :


Public Function show_osd_text(frm As Form, txt As String, align_h As String, align_v As String, Optional top As Long, Optional left As Long, Optional font As String, Optional font_size As Long, Optional text_color As ColorConstants) As Boolean
Dim frmOSD As Form
Dim hRgn As Long
Dim hwnd_act As Long
On Error GoTo err:
If align_h <> "right" And align_h <> "left" And align_h <> "center" And left = 0 Then show_osd_text = False: Exit Function
If align_v <> "up" And align_v <> "down" And align_v <> "center" And top = 0 Then show_osd_text = False: Exit Function
If txt = "" Then show_osd_text = False: Exit Function
If font = "" Then font = "Arial"
If font_size = 0 Then font_size = 50
If text_color = 0 Then text_color = &HFF00&
Set frmOSD = frm
hwnd_act = GetActiveWindow()
Select Case align_h
Case "right":
With frmOSD
    .FontName = font
    .FontSize = font_size
    .BackColor = text_color
    .Width = .TextWidth(txt)
    .Height = .TextHeight(txt)
    BeginPath .hdc
    TextOut .hdc, 0, 0, txt, Len(txt)
    EndPath .hdc
    hRgn = PathToRegion(.hdc)
    SetWindowRgn .hWnd, hRgn, True
    DeleteObject hRgn
    Select Case align_v
    Case "down":
    .top = Screen.Height - .Height
    Case "up":
    .top = 0
    Case "center":
    .top = (Screen.Height - .Height) / 2
    Case Else:
    .top = top
    End Select
    .left = Screen.Width - .Width
    .Show
End With
RendreFormTjsVisible frmOSD
Case "left":
With frmOSD
    .FontName = font
    .FontSize = font_size
    .BackColor = text_color
    .Width = .TextWidth(txt)
    .Height = .TextHeight(txt)
    BeginPath .hdc
    TextOut .hdc, 0, 0, txt, Len(txt)
    EndPath .hdc
    hRgn = PathToRegion(.hdc)
    SetWindowRgn .hWnd, hRgn, True
    DeleteObject hRgn
    Select Case align_v
    Case "down":
    .top = Screen.Height - .Height
    Case "up":
    .top = 0
    Case "center":
    .top = (Screen.Height - .Height) / 2
    Case Else:
    .top = top
    End Select
    .left = 0
    .Show
End With
RendreFormTjsVisible frmOSD
Case "center":
With frmOSD
    .FontName = font
    .FontSize = font_size
    .BackColor = text_color
    .Width = .TextWidth(txt)
    .Height = .TextHeight(txt)
    BeginPath .hdc
    TextOut .hdc, 0, 0, txt, Len(txt)
    EndPath .hdc
    hRgn = PathToRegion(.hdc)
    SetWindowRgn .hWnd, hRgn, True
    DeleteObject hRgn
    Select Case align_v
    Case "down":
    .top = Screen.Height - .Height
    Case "up":
    .top = 0
    Case "center":
    .top = (Screen.Height - .Height) / 2
    Case Else:
    .top = top
    End Select
    .left = (Screen.Width - .Width) / 2
    .Show
End With
RendreFormTjsVisible frmOSD
Case Else:
With frmOSD
    .FontName = font
    .FontSize = font_size
    .BackColor = text_color
    .Width = .TextWidth(txt)
    .Height = .TextHeight(txt)
    BeginPath .hdc
    TextOut .hdc, 0, 0, txt, Len(txt)
    EndPath .hdc
    hRgn = PathToRegion(.hdc)
    SetWindowRgn .hWnd, hRgn, True
    DeleteObject hRgn
    .left = left
    .top = top
    .Show
End With
RendreFormTjsVisible frmOSD
End Select
Call SetActiveWindow(hwnd_act)
show_osd_text = True
Exit Function
err:
show_osd_text = False
Exit Function
End Function

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

RevDan
Messages postés
6
Date d'inscription
mercredi 19 février 2003
Statut
Membre
Dernière intervention
8 novembre 2006
-
Super génial ton code !

Juste un truc : quand le message OSD s'affiche, la form frm_affiche prend le focus, et j'aimerai que l'appli qui avait le focus avant le garde.

J'ai un affichage OSD sur mon PC pour le volume, etc... et ça "vole" pas le focus...
DarthPredateur
Messages postés
30
Date d'inscription
vendredi 17 janvier 2003
Statut
Membre
Dernière intervention
25 mars 2003
-
oki alors je vais modifier le truc du focus.. enfin g pas trol temps...
Mais bo si tu t'y connais un peu dans les apis.... tu prends le handle de la fenetre active avant d'affichier l'OSD avec l'api
ret= GetActvieWindow()
et après t'afiche la form et ensuite tu fait l'api
SetActiveWindow(re) et voilà...
a+
Cyberdevil
Messages postés
483
Date d'inscription
mardi 10 juillet 2001
Statut
Membre
Dernière intervention
12 juillet 2006
-
voilà j'ai mis a jour le code !
Retélécharger le zip !
RevDan
Messages postés
6
Date d'inscription
mercredi 19 février 2003
Statut
Membre
Dernière intervention
8 novembre 2006
-
Super sauf que ça prend la main. J'ai ajouté un Alt-TAB par un sendkeys mais c'est pas terrible : si on est en train de saisir un truc avec Shift, ça remet pas la bonne fenêtre.

Donc : comment faire un OSD qui ne prend pas la main ?
Cyberdevil
Messages postés
483
Date d'inscription
mardi 10 juillet 2001
Statut
Membre
Dernière intervention
12 juillet 2006
-
mais j'ai modifié la source (bon g deux pseudos c moi DarthPredateur lol) g modifié et maintenant ça prend plus la main en fin facon de dire car en fate ça prend la main ça affiche l'osd et ça redonne la main a lancienne fenete g testé et ça marche... ça vap sas chez toi ?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.