2009-10-28 5 views
2

Comment pourrait-on changer l'opacité d'un contrôle basé sur TWinControl? Et pourquoi n'ont-ils pas ajouté cette capacité au niveau TControl/TWinControl (pourquoi seulement TForm)?Opacité d'un TWinControl?

+1

Je ne sais pas comment vous le feriez. Si je comprends bien, Windows a seulement ajouté la translucidité à Windows, ce qui explique pourquoi TForm peut le gérer, mais pas les contrôles individuels. Rappelez-vous que la plupart des VCL sont simplement un wrapper autour des contrôles Windows Common, et si Windows ne le fait pas, le contrôle VCL associé le fera rarement. Les composants tiers étendent alors souvent les fonctionnalités de base. –

+0

@_J_: Vous avez raison. Pourquoi ne pas ajouter ceci comme une réponse pour qu'elle puisse être acceptée? –

Répondre

5

Le contrôle de l'opacité d'une fenêtre est offert par une fonctionnalité appelée , des fenêtres en couches. Vous pouvez read more about the feature on MSDN. Cette fonctionnalité est uniquement disponible pour les fenêtres de niveau supérieur. Pour autant que je sache, Desktop Window Manager (l'effet «verre» de Vista) n'est également disponible que pour les fenêtres de niveau supérieur.

Les alternatives disponibles pour les fenêtres enfants sont d'utiliser window regions pour marquer certaines zones d'une fenêtre comme complètement transparentes, ou d'utiliser bitmap alpha blending pour dessiner le contrôle entier vous-même.

+0

Merci pour l'effort supplémentaire pour la liaison. –

5

Merci Lars.

Je ne sais pas comment vous le feriez. Si je comprends bien, Windows a seulement ajouté la translucidité à Windows, ce qui explique pourquoi TForm peut le gérer, mais pas les contrôles individuels. Rappelez-vous que la plupart des VCL sont simplement un wrapper autour des contrôles Windows Common, et si Windows ne le fait pas, le contrôle VCL associé le fera rarement. Les composants tiers étendent alors souvent les fonctionnalités de base.

+3

S'il vous plaît modifier cela, même les contrôles sont des fenêtres (type 'HWND'). Le point important est que le support n'est là que pour les fenêtres sans le style 'WS_CHILD'. Un formulaire avec une méthode 'CreateParams' substituée qui définit le style' WS_CHILD' ne peut pas non plus être translucide. – mghie

+0

mghie, merci, je pense que votre commentaire dit tout. –