mick605
Messages postés4Date d'inscriptionmercredi 21 juillet 2010StatutMembreDernière intervention23 juillet 2010 23 juil. 2010 à 15:47
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 ...)
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 23 juil. 2010 à 07:55
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;
mick605
Messages postés4Date d'inscriptionmercredi 21 juillet 2010StatutMembreDernière intervention23 juillet 2010 22 juil. 2010 à 10:25
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 ...
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 22 juil. 2010 à 05:52
"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 !
mick605
Messages postés4Date d'inscriptionmercredi 21 juillet 2010StatutMembreDernière intervention23 juillet 2010 21 juil. 2010 à 22:56
J'avoue que j'y suis tombé dessus un peu par hasard, en essayant de creer une form entierement vitrée ET non rectangulaire ... (chose impossible a mon avis). Tient moi au courant de tes tests, et dis moi ce qui ne va pas ^^
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 21 juil. 2010 à 22:17
Salut,
bizarre que je sois passé à côté d'une solution si simple, je vais la tester dès que possible, merci en tout cas !
Cordialement, Bacterius !
mick605
Messages postés4Date d'inscriptionmercredi 21 juillet 2010StatutMembreDernière intervention23 juillet 2010 21 juil. 2010 à 17:55
Salut
Merci pour ta source, elle est de très bonne qualité. (10/10)
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 6 janv. 2010 à 10:57
Bon ... j'ai fait en sorte que ça *fonctionne* sous XP. Par contre je ne l'ai pas sous la main, donc quand je posterai le code, si quelqu'un pourrait tester sur XP afin de voir si ça marche et si le résultat n'est pas trop foireux ?
Un truc que je n'arrive pas à comprendre : en appellant les API de façon dynamique, on se rend compte que lorsque l'on lance l'appli en mode normal, tous les appels à des API de Vista échouent lamentablement, alors que si l'on passe en mode compatibilité XP SP2, tous les appels se réalisent avec succès ... wtf ?
Je posterai la mise à jour dans quelque temps.
Cordialement, Bacterius !
oldpadawan
Messages postés1Date d'inscriptionmercredi 8 septembre 2004StatutMembreDernière intervention29 décembre 2009 29 déc. 2009 à 15:10
Ca marche nickel avec Delphi 7 sous Windows 7 rien à dire.
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 22 déc. 2009 à 01:29
Désolé pour ce retard, mais c'est Noël :p donc je ne peux pas dire quand ça sera fait.
A faire : implémenter le support pour les versions de Windows inférieures à Vista et permettre toutefois les options disponibles sous XP (cue banner, marquee ..), nettoyer certains bugs.
Cirec, penses-tu que ça vaudrait la peine de basculer LinkLabel/CommandLink selon le système d'exploitation (XP vs Vista/Seven) ?
Cordialement, Bacterius !
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 19 déc. 2009 à 11:23
non t'as raisons ... CommandLink n'est disponible qu'à partir de Vista
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 18 déc. 2009 à 13:15
Ah oui, je vois, le DoubleBuffered est déjà mis il me semble. Je l'avais remarqué moi-même, mais chez moi cet effet était très léger (c'était rare et pas très voyant), mais apparemment chez toi c'est plus accentué ... si quelqu'un a une solution ? Je vais chercher de mon côté aussi ..
Cordialement, Bacterius !
djmmix
Messages postés152Date d'inscriptionlundi 28 juillet 2003StatutMembreDernière intervention29 avril 2009 18 déc. 2009 à 13:11
ben en faite le bouton quitter a du clipping, un petit effet de clipping (leger) quand je me deplace sur la forme et très accentuer quand je me déplace sur le bouton en lui même.
il y a pas la commande en doublebuffer pour corrigé sa ? (enfin si je me trompe pas je fait pas de composant visuel ^^")
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 18 déc. 2009 à 12:53
Salut Cirec,
en effet, j'ai oublié que ces unités appartiennent à Borland. Je vais les retirer (au pire, elles sont trouvables sur le net).
Je vais ajouter la compatibilité avec les systèmes antérieurs à Vista. C'est bien, car j'aurai juste à importer les API dynamiquement, vu que les messages restent les mêmes sous XP.
Es-tu sûr que le CommandLink était présent sous XP n'empêche ?
Je vais remplacer le flag dans le Perform :p
Cordialement, Bacterius !
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 18 déc. 2009 à 12:39
tout d'abord je doute que tu aies le droit de publier "Themes.pas" & "UXTheme.pas" !!! (d'ailleurs elles ne sont pas compatibles avec ma version de Delphi ... il refuse de compiler avec)
je ne suis donc pas certain que l'on puisse conserver le Zip en l'état !!!
en suite que se passe t-il si une application compilée avec ce code est exécutée sous XP ?
réponse:
---------------------------
Test.exe - Composant introuvable
---------------------------
Cette application n'a pas pu démarrer car dwmapi.dll est introuvable. La réinstallation de cette application peut corriger ce problème.
---------------------------
OK
---------------------------
tu ne fais aucun teste de version avant !!
surtout que la majeur partie des changements (en dehors du style aéro) sont aussi disponibles sous XP (CommandLink, CueBanner, Marquee etc. etc.) c'est dommage de s'en priver.
En dehors de ça ... t'as fait sacré travail ... Bravo
ps: S.T.P. remplace
Perform(WM_SYSCOMMAND, $F012, 0);
par
Perform(WM_SYSCOMMAND, SC_MOVE or HTCAPTION, 0);
c'est quand même plus parlant non ?
ps2: le TBitmap n'a toujours pas 5 états :p ^^
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 18 déc. 2009 à 12:19
Salut,
cool que ça marche sous Seven, je m'y attendais pas :)
Je ne vois pas trop ce que tu veux dire, tu veux dire que le bouton a un comportement bizarre quand on déplace la fiche ?
Cordialement, Bacterius !
djmmix
Messages postés152Date d'inscriptionlundi 28 juillet 2003StatutMembreDernière intervention29 avril 2009 18 déc. 2009 à 11:57
salut bactérius ,
beau boulot, je vien de tester sa marhche impec sous seven aussi ;)
au debut je me demandait pourquoi tu avais fait sa mais après avoir lancer ta démo j'ai bien compris :D
un petit point noir nénmoins, le bouton quitter en bas de ta démo a un effet de clipping sur le déplacement de la form ou sur le bouton( d'ailleur plus accentué sur le bouton ), sa vien peut être de seven je c'est pas ^^"
sinon je vais suivre l'évolution de ton petit projet la :p
encore bravo et merci du partage .
JulioDelphi
Messages postés2226Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention18 novembre 201014 18 déc. 2009 à 09:59
Je n'ai pas testé et peu de chances que je le fasse mais je dis "Bravo" et j'ajoute à mes favoris tout de même. Quel sacré boulot !
23 juil. 2010 à 15:47
(Je suis sous Seven, mais je pense pas que ca soit ca qui gene ...)
23 juil. 2010 à 07:55
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 !
22 juil. 2010 à 10:25
"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
22 juil. 2010 à 05:52
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 !
21 juil. 2010 à 22:56
21 juil. 2010 à 22:17
bizarre que je sois passé à côté d'une solution si simple, je vais la tester dès que possible, merci en tout cas !
Cordialement, Bacterius !
21 juil. 2010 à 17:55
Merci pour ta source, elle est de très bonne qualité. (10/10)
Je viens de découvrir une astuce, qui permet de ne plus avoir de problemes avec les composants posés sur une surface vitrée. Voici le lien, si ca t'interresse : http://www.developpez.net/forums/d954438/environnements-developpement/delphi/contribuez/solution-probleme-composants-surface-vitree-vista/#post5359695
C'est en travaillant sur ta source que j'ai découvert ca.
Encore merci et félicitations :)
6 janv. 2010 à 10:57
Un truc que je n'arrive pas à comprendre : en appellant les API de façon dynamique, on se rend compte que lorsque l'on lance l'appli en mode normal, tous les appels à des API de Vista échouent lamentablement, alors que si l'on passe en mode compatibilité XP SP2, tous les appels se réalisent avec succès ... wtf ?
Je posterai la mise à jour dans quelque temps.
Cordialement, Bacterius !
29 déc. 2009 à 15:10
22 déc. 2009 à 01:29
A faire : implémenter le support pour les versions de Windows inférieures à Vista et permettre toutefois les options disponibles sous XP (cue banner, marquee ..), nettoyer certains bugs.
Cirec, penses-tu que ça vaudrait la peine de basculer LinkLabel/CommandLink selon le système d'exploitation (XP vs Vista/Seven) ?
Cordialement, Bacterius !
19 déc. 2009 à 11:23
c'est le "LinkLabel" qui est disponible sous XP
http://msdn.microsoft.com/en-us/library/bb760706(VS.85).aspx
18 déc. 2009 à 13:15
Cordialement, Bacterius !
18 déc. 2009 à 13:11
il y a pas la commande en doublebuffer pour corrigé sa ? (enfin si je me trompe pas je fait pas de composant visuel ^^")
18 déc. 2009 à 12:53
en effet, j'ai oublié que ces unités appartiennent à Borland. Je vais les retirer (au pire, elles sont trouvables sur le net).
Je vais ajouter la compatibilité avec les systèmes antérieurs à Vista. C'est bien, car j'aurai juste à importer les API dynamiquement, vu que les messages restent les mêmes sous XP.
Es-tu sûr que le CommandLink était présent sous XP n'empêche ?
Je vais remplacer le flag dans le Perform :p
Cordialement, Bacterius !
18 déc. 2009 à 12:39
je ne suis donc pas certain que l'on puisse conserver le Zip en l'état !!!
en suite que se passe t-il si une application compilée avec ce code est exécutée sous XP ?
réponse:
---------------------------
Test.exe - Composant introuvable
---------------------------
Cette application n'a pas pu démarrer car dwmapi.dll est introuvable. La réinstallation de cette application peut corriger ce problème.
---------------------------
OK
---------------------------
tu ne fais aucun teste de version avant !!
surtout que la majeur partie des changements (en dehors du style aéro) sont aussi disponibles sous XP (CommandLink, CueBanner, Marquee etc. etc.) c'est dommage de s'en priver.
En dehors de ça ... t'as fait sacré travail ... Bravo
ps: S.T.P. remplace
Perform(WM_SYSCOMMAND, $F012, 0);
par
Perform(WM_SYSCOMMAND, SC_MOVE or HTCAPTION, 0);
c'est quand même plus parlant non ?
ps2: le TBitmap n'a toujours pas 5 états :p ^^
18 déc. 2009 à 12:19
cool que ça marche sous Seven, je m'y attendais pas :)
Je ne vois pas trop ce que tu veux dire, tu veux dire que le bouton a un comportement bizarre quand on déplace la fiche ?
Cordialement, Bacterius !
18 déc. 2009 à 11:57
beau boulot, je vien de tester sa marhche impec sous seven aussi ;)
au debut je me demandait pourquoi tu avais fait sa mais après avoir lancer ta démo j'ai bien compris :D
un petit point noir nénmoins, le bouton quitter en bas de ta démo a un effet de clipping sur le déplacement de la form ou sur le bouton( d'ailleur plus accentué sur le bouton ), sa vien peut être de seven je c'est pas ^^"
sinon je vais suivre l'évolution de ton petit projet la :p
encore bravo et merci du partage .
18 déc. 2009 à 09:59