UNITÉ DE SUPPORT VISTA

Signaler
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
-
Messages postés
4
Date d'inscription
mercredi 21 juillet 2010
Statut
Membre
Dernière intervention
23 juillet 2010
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/50991-unite-de-support-vista

Messages postés
4
Date d'inscription
mercredi 21 juillet 2010
Statut
Membre
Dernière intervention
23 juillet 2010

Arf, c'est gênant, ce code fonctionne pourtant bien sous D2005 ... T'as essayé dans l'évenement OnPaint ?

(Je suis sous Seven, mais je pense pas que ca soit ca qui gene ...)
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
7
Désolé, j'ai essayé de faire ta méthode, sur Delphi 6 puis sur Delphi 7, ça s'affiche correctement pendant une fraction de seconde puis ça devient tout noir, définitivement. Voici mon code :

type
TMargins = record
Left, Right, Top, Bottom: Integer;
end;

pMargins = ^TMargins;

procedure DwmExtendFrameIntoClientArea(hWnd: Longword; Margins: pMargins); stdcall; external 'dwmapi.dll';

procedure TForm1.FormCreate(Sender: TObject);
Var
M: TMargins;
begin
M.Left := -1;
M.Top := -1;
M.Bottom := -1;
M.Right := -1;
DwmExtendFrameIntoClientArea(Handle, @M);
TransparentColorValue := clRed;
TransparentColor := True;
Color := clRed;
end;

Cordialement, Bacterius !
Messages postés
4
Date d'inscription
mercredi 21 juillet 2010
Statut
Membre
Dernière intervention
23 juillet 2010

A la base, je connais 2 techniques qui permettent d'obtenir une form non rectangulaire : jouer avec les SetRgn, mais ca, en effet ca désactive les themes, ou alors jouer avec la propriété TransparentColorValue, mais la encore, si on ajoute un effet Glass, les zones invisibles deviennent Glass ... Donc je ne crois pas que ca soit possible, a moins qu'il n'existe une 3eme méthode ...

"les fenêtres vitrées ont une petite bordure fine, avec une ombre en prime. Si tu commences à découper la fenêtre, cette bordure ne collera plus avec la forme de la fenêtre et ça sera très moche (il manquera aussi l'ombre)."

Ouais, mais c'était histoire de tester quoi ... Mais je crois avoir vu récemment l'API qui dessine l'ombre ... donc il serait peut etre possible de l'ajuster au contour personnalisé de la form ...

Sinon, merci aussi de m'avoir fait découvrir l'API DwmGetColorizationColor. Ta source est très interressante sur ce point, elle contient plein de trucs utiles, comme le treeView style Vista ^^
http://www.developpez.net/forums/d950803/environnements-developpement/delphi/langage/recuperer-couleur-theme-seven/

A+

Mick605
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
7
"une form entierement vitrée ET non rectangulaire"
Je ne crois pas que tu obtiendras un joli rendu avec tout ceci, car si tu regardes bien, les fenêtres vitrées ont une petite bordure fine, avec une ombre en prime. Si tu commences à découper la fenêtre, cette bordure ne collera plus avec la forme de la fenêtre et ça sera très moche (il manquera aussi l'ombre).

D'autant plus que d'après mon expérience, découper une fenêtre entraîne automatiquement le retrait des thèmes pour cette fenêtre (donc adieu la vitre, bonjour les fenêtres style windows 95)

Donc à moins de faire ton propre moteur de rendu vitré (qui sera probablement moins performant que celui intégré dans Windows et également plus lourd car étant utilisé seulement par tes fenêtres) ... mais bon, peut-être que si il est très bien réussi, Krosoft te le rachètera à prix d'or ^^

Je teste bientôt l'astuce des composants en tout cas.

Cordialement, Bacterius !
Afficher les 18 commentaires