Miten saisin tehtyä sellaisen jutskan, että formin normaalit reunat ja tausta olisivat läpinäkyviä ja itse voisin tehdä ohjelmalleni oman ulkokuoren? Olen kyllästynyt ohjelmiin, joissa on se sama neliö siellä taustalla, vaikka värin voikin vaihtaa, joten haluaisin tehdä oman skinin esim. Reunat pitäisi saada pyöreiksi yms.
VB.NETillä:
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None 'Reunat pois Me.TransparencyKey = System.Drawing.Color.Purple 'Purple läpinäkyväksi.
VB6.0:lle on vähän pidempi tie: http://www.elitevb.com/content/01,0010,01/01.
Minä en oikein hoksaa tuota VB 6.0 versiota tuosta. Miten toi liittyy mitenkään noihin formin reunoihin? Saatan olla hieman tyhmä, mutta pakko kysyä, jos joku vaikka neuvoisi hieman, miten tuota voisi hyödyntää noihin formin reunoihin.
Lataa joku niistä lähdekoodipaketeista ja tutki ja kokeile.
Tämä taitaa olla aika lailla sellaista, mihin pyrit. Tuosta vain muokkaat loputkin reunat pois...
kuva: http://www.elitevb.com/content/01,0010,01/
http://www.elitevb.com/content/01,0010,01/
Kuvatagi ei näköjään toimi Putkan ulkopuolelle, hyvä niin. Tulipa nyt sekin testattua :) (kohta joku kysyy: mikä kuvatagi?)
Itseasiassa minulle on melkein ihan sama miltä tuo tausta näyttää, kunhan se ei näy ja minä voi ladata vaikka omat bitmap -tiedostot siihen skiniksi.
Se on se mihin minä pyrin?
Eli haluan esim, jotain sellaista koodia, jolla saisin omissa bmp-teidostoissa pinkillä olevat kohdat läpinäkyviksi tuossa formissa ja tuon formin läpinäkyväksi, mutta niin, että ne kaikki objektit näkyy siellä.
Voit yhdistellä alueita, jotka haluat läpinäkyviksi, ja sitten voit varmaan laittaa sen bitmapin pictureboxissa formille. Laita vaikka johonkin OnSkinLoad-subiin looppi, joka kokoaa isoon regioniin 1x1-palasia pinkkien pikseleiden kohdalle ja lopuksi laittaa sen regionin käyttöön. Sehän tarvitsee tehdä vain kerran, kun tausta ladataan. Tietysti algoritmia voi vielä tehostaa tekemällä mahdollisimman isoja osia kerralla.
Win2k:sta eteenpäin on mahdollista käyttää ihan yleisesti tuollaista VB.NETin tyylistä juttua, mutta en nyt muista, mistä se löytyi.
Noi sun neuvot on mulle ihan hepreaa... Ehkä mä lopetan koko projektin, kun en oikein hoksaa, mutta kiitos yrityksistä kuitenkin. :(
Jos minulla olisi VB-kääntäjä, kirjoittaisin tuon koodin vaikka valmiiksi. Kun keksii, mitä pitää tehdä, se on ihan helppo. Kai se menisi suunnilleen näin:
Dim X As Long Dim Y As Long Dim KokoAlue As Long Dim Pala As Long Dim Valipala As Long ' Oletetaan, että kuva on PictureBox:ssa ' Vari on se läpinäkyvä väri ' Kuvan mitat muuttujiin KuvanLeveys ja KuvanKorkeus Pala = CreateRectRgn(0, 0, 0, 0) ' Yksi pikseli (kai) KokoAlue = CreateRectRgn(0, 0, KuvanLeveys - 1, KuvanKorkeus - 1) For X = 0 to KuvanLeveys - 1 For Y = 0 to KuvanKorkeus - 1 If PictureBox.Point(X, Y) = Vari Then ' Siirretään pikseli oikeaan kohti ja poistetaan regionista. ValiPala = OffsetRgn(Pala, X, Y) CombineRgn KokoAlue KokoAlue ValiPala RGN_XOR DeleteObject ValiPala End If Next Y Next X DeleteObject SetWindowRgn(Form.hwnd, KokoAlue, True)
Tuota pitää sitten soveltaa, jos se nyt toimii alkuunkaan. En ole tosiaan testannut.
Metabolix kirjoitti:
Win2k:sta eteenpäin on mahdollista käyttää ihan yleisesti tuollaista VB.NETin tyylistä juttua, mutta en nyt muista, mistä se löytyi.
SetLayeredWindowAttributes. VB-esimerkki löytyy ihan täältä Putkasta: https://www.ohjelmointiputka.net/koodivinkit/
Aihe on jo aika vanha, joten et voi enää vastata siihen.