Avatar billede tommya Nybegynder
21. juli 2006 - 13:20 Der er 9 kommentarer og
1 løsning

Semitransparency på forms

Jeg forsøger pt at lave nogle forms hvor visse områder af formsne er mere eller mindre gennemsigtige, dvs. man kan se applikationerne (desktoppen) bagved. Det er ikke noget problem at maske en form så der sættes transparente områder, men disse er altid helt gennemsigtige eller helt synlige.

Dette giver kantede hjørner og en ikke særlig pæn effekt. Derfor ønsker jeg at angive alpha level eller i det hele taget være istand til at angive hvor gennemsigtig områderne skal være. Jeg har set dette før ved modern winamp skins.

En åbenlys måde at gøre dette på er at tage et screenshot af skærmen tegne billedet på formen, og derefter tegne form med mere eller mindre gennemsigtige områder på oven på dette, ulempen ved denne metode som jeg ser det er dog at den virker tung i det (teoretisk) og hver gang et objekt under formen ændres skal der tages et nyt screenshot og formen gentegnes oven på.

Findes der en hurtigere måde at gøre dette på? Jeg skal lave det i C++ men kan godt lave denne del i Delphi hvis det gør det meget lettere.
Avatar billede bertelbrander Praktikant
21. juli 2006 - 21:05 #1
Du skal nok kikke på AlphaBlend:
http://windowssdk.msdn.microsoft.com/en-us/library/ms532324.aspx

Så vidt jeg ved laver de "normale" funktioner kun enten/eller effekt.

Jeg har ikke selv prøvet at bruge den, men laver nok et eksempel en af de første dage.
Avatar billede tokelil Nybegynder
22. juli 2006 - 09:53 #2
Avatar billede tommya Nybegynder
25. juli 2006 - 16:11 #3
Det lykkedes mig at finde et eksempel program der gjorde gennem et billede:
http://www.codeproject.com/gdi/pxalphablend.asp?df=100&forumid=2057&exp=0&select=1584099#xx1584099xx

Men jeg ville gerne have en måde der var mere fleksibel så jeg kunne strække formen uden at ødelægge kvaliteten. Har kigget på SetLayeredWindowAttribues, men det ser ud til kun at være for hele formen, jeg kigger lidt nærmere på AlphaBlend funktionen nu, i håb om at det kan hjælpe :)
Avatar billede tommya Nybegynder
25. juli 2006 - 16:17 #4
Jeg kan se at AlphaBlend er samme metode som der findes i det program jeg fandt, så jeg kan ende med at skulle lave et fast defineret billede, og så finde en eller anden måde at håndtere resizing på.
Avatar billede tokelil Nybegynder
25. juli 2006 - 16:54 #5
Paint.net bruger alpha blend, men det er vist kun for visse vindue, er ikke sikker.

Men sourcekoden er i hvert fald tilgængelig hvis det er:
http://www.getpaint.net/download.html
Avatar billede tommya Nybegynder
26. juli 2006 - 11:35 #6
Det hjalp at bruge UpdateLayeredWindow som i eksemplet jeg linkede til, jeg måtte dog lave min form ramme som billeder og så indlæse dem og tegne dem, men det bliver gjort uden større mængde CPU brug, så det virker acceptabelt.

SetLayeredWindowAttributes er fin hvis hele vinduet skal være lige gennemsigtigt. Hvilket dog ikke er tilfældet her. AlphaBlend kunne dog bruges og virkede.

Jeg takker mange gange for hjælpen bertelbrander og tokelil hvis i smider et svar får i point :)
Avatar billede tokelil Nybegynder
26. juli 2006 - 14:37 #7
Held og lykke med det! :)
Avatar billede tommya Nybegynder
27. juli 2006 - 15:59 #8
bertel hvis du vil have pointene så skriv lige, så fikser jeg dem også til dig, skylder dem vidst til jer begge to.
Avatar billede bertelbrander Praktikant
27. juli 2006 - 20:17 #9
Jeg samler ikke på point.
Avatar billede tommya Nybegynder
28. juli 2006 - 12:56 #10
ok, men mange tak for hjælpen til jer begge to.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester