luc desruelle's Blogue

Community Browser
cancel
Showing results for 
Search instead for 
Did you mean: 

Re: Les fenêtres LabVIEW ne sont pas toutes rectangulaires

Desruelle_luc
Trusted Enthusiast

0] Introduction

Il existe sur internet plusieurs exemples, très intéressants, de code LabVIEW pour avoir des fenêtres qui ne sont pas rectangulaires.

splash3.png

Tous les exemples utilisent le même code, qui permet via la dll Windows "user32.dll" fonction SetLayerdWindowAttributs, de :

> rendre transparent l'ensemble des pixels d'une couleur spécifiée de la face-avant ;

> gérer l'opacité de la fenêtre.

http://msdn.microsoft.com/en-us/library/windows/desktop/ms633540(v=vs.85).aspx

L'intérêt est :

  1. principalement esthétiquepour les spash screen, Cf Wikipédia : la toute première fenêtre affichée par un logiciel. Cette fenêtre incite l'utilisateur à patienter pendant le chargement et l'installation d'un logiciel tout en lui apportant diverses informations comme le nom du logiciel, le nom de l'éditeur, le logo de l'éditeur ou du logiciel, les droits d'auteur associés au logiciel, la version et l'état du chargement du logiciel.
  2. insérer des fenêtres "particulières"
  3. opacité, afin de permettre une comparaison par superposition de plusieurs fenêtres

Je vais montrer un exemple avec ma photo suivante

Capture5.PNG

I] Certains codes incomplets

Certains exemples sont incomplets, car ils ne fonctionnent qu’avec des « jeux » de couleurs particuliers.

Le problème provient de la différence de gestion des couleurs entre LabVIEW et Microsoft : RGB VS BGR >>> COLORREF value has the following hexadecimal form : 0x bbggrr

Par exemple http://forums.ni.com/t5/LabVIEW/Darren-s-Weekly-Nugget-04-17-2006/m-p/352929?view=by_date_ascending#...

ou le très bon post de DaHelmut

1 erreur.PNG

II] Rendre Transparent Des Pixels - Fonction Set Window Color To Transparent

D’autres exemples sont très complets, et fonctionnent avec toutes les couleurs, car ils convertissent la couleur RGB de LabVIEW en BGR pour Windows

Par exemple une référence : https://decibel.ni.com/content/blogs/labviewramblings/2013/11/30/groovy-splash-screen

Je ne sais pas qui est la première personne à avoir réalisé le code. J'ai réalisé un vi modifié, avec la documentation du code et en intégrant directement le Get Window Handle.vi

Set Window Color to Transparent.png

Pour utiliser le code il faut ouvrir la référence du vi via Capture.PNG puis Capture3.PNG

par exemple Capture2.PNG

La fenêtre est alors transparente mais ... avec une bordure!

Capture4.PNG

III] Une fenêtre sans bordure

La transparence ne va pas suffir. En effet la fenêtre a encore la bordure. Il faut modifier les options de la fenêtre pour avoir

Capture7.PNG

devient Capture8.PNG

La fenêtre n'est plus rectangulaire! Mais n'est plus une fenêtre, car comment la fermer?

IV] Fermer la fenêtre sans bordure

il faut ajouter un bouton "croix" pour fermer... Sans titre.png

Image2.png

Toutes les formes sont possibles.

Même un "Petit poisson" voir le code en PJ

Capture11.PNGCapture12.PNG

Luc Desruelle | avatar_ld.gif | Voir le profil LinkedIn de Luc DesruelleVoir mon profil

CLA : Certified LabVIEW Architect / Certifié Architecte LabVIEW
CLD : Certified LabVIEW Developer / Certifié Développeur LabVIEW

Contact , About me. , Google+. , Twitter.

banniere Luc Livre NXG Champion.png

Luc Desruelle | Mon profil | Mon blog LabVIEW
Auteur livre LabVIEW : Programmation et applications - Introduction à LabVIEW NXG
Certified LabVIEW Architect (CLA) & Certified TestStand Developper (CTD)
LabVIEW Champion

Download All
Comments
djaune
Member

Bonjour,

j'ai regardé avec attention votre post sur les fenêtres non rectangulaires, merci pour ce travail.

Je voudrais bien une précision sur un point qui me surprend un peu : même sans exécuter le VI, le poisson est déjà animé...

j'avoue que je ne sais pas comment on parvient à ce résultat !

car l'objet est une simple commande U16 ???? (comment associer cette commande avce un gif animé par exemple???)

Merci d'avance pour une brève explication,

Desruelle_luc
Trusted Enthusiast

Bonjour et merci. L’objet est un pictures Ring ou menu déroulant d’images, qui représente une ou plusieurs images, et il est possible d’insérer un GIF animé. Ce type de contrôle est un entier, la valeur indiquant le numéro de l’image dans le menu déroulant.

plus d'infos sur le lien

Un GIF animé pour éviter de faire du code

A+

banniere Luc Livre NXG Champion.png

Luc Desruelle | Mon profil | Mon blog LabVIEW
Auteur livre LabVIEW : Programmation et applications - Introduction à LabVIEW NXG
Certified LabVIEW Architect (CLA) & Certified TestStand Developper (CTD)
LabVIEW Champion

DaHelmut
Active Participant

Très bonnes explications Luc

J'avoue que j'ai jamais fait attention au point que tu soulignes entre couleur RGB de LabVIEW et BGR de Windows ! Bon a savoir ! J'ai toujours utilisé la même couleur jusqu'à présent et ça a toujours fonctionné

J'aime bien cette technique pour simuler des tableaux de bord dans l'automobile et l'agricole.

Kudos !

++

Da Helmut
Voir le profil de Maxime M. sur LinkedIn - View Maxime M.'s profile on LinkedIn
Desruelle_luc
Trusted Enthusiast

Salut DaHelmut,  Il est vrai que ton exemple était super sympa !

banniere Luc Livre NXG Champion.png

Luc Desruelle | Mon profil | Mon blog LabVIEW
Auteur livre LabVIEW : Programmation et applications - Introduction à LabVIEW NXG
Certified LabVIEW Architect (CLA) & Certified TestStand Developper (CTD)
LabVIEW Champion

M.athieu.
Member

Bonjour Luc ! Super VI ... !

Je note cependant une petite incompatibilité : lors de mes devs j'affiche le N° révision de mon VI, le texte récupéré par le noeud de propriété FA.Titre est bien Poisson.vi mais pas pour windows (ex : Poisson.vi rev.36), produisant ainsi une erreur comme il ne trouve pas la fenêtre

DaHelmut
Active Participant

Bonjour Helscrean et Luc,

Pour récuperer la référence de la fenêtre du VI en cours il vaut mieux passer par un noeud de propriété (qui est caché par défaut je crois, il faut ajouter SuperSecretPrivateSpecialStuff=true dans LAbVIEW.ini).

Ainsi on a ce code qui remplace celui ou on récupère le titre de la fenêtre pour pouvoir utiliser la fonction FindWindow de l'API Windows :

hwnd.png

Cordialement,

Da Helmut
Voir le profil de Maxime M. sur LinkedIn - View Maxime M.'s profile on LinkedIn
M.athieu.
Member

Merci pour l'astuce DaHelmut !

Très utile

Desruelle_luc
Trusted Enthusiast

salut M.athieu, Helscrean et DaHelmut, merci pour vos retours! effectivement pour la fenêtre avec la version... merci pour vos retours, c'est sympa.

Avec un DaHelmut, mister "super secret", comme d'habitude très bonne astuce!

A+

banniere Luc Livre NXG Champion.png

Luc Desruelle | Mon profil | Mon blog LabVIEW
Auteur livre LabVIEW : Programmation et applications - Introduction à LabVIEW NXG
Certified LabVIEW Architect (CLA) & Certified TestStand Developper (CTD)
LabVIEW Champion