Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: VB Paint eli rajatun alueen maalaus

Tapsa [14.08.2012 05:36:04]

#

Tiedän että VB ei ole grafiikkaohjelma mutta sieltähän löytyy kaikkia kivaa kuten värejä (RGB) rajattomasti ja viivanpaksuus ym. Mutta kun QBasicistakin tuttu PAINT-funktio puuttuu. Olen kysynyt tätä aiemmin ja saanut hyvän vastauksen. Valitettavasti koneeni sekosi ja niin ohjekin hävisi. Nyt haluaisin saada ne muutaman lauseen jolla tuo rajatun alueen maalaus onnistuu.

Olen muuten opetellut VB:n käyttöä ihan kokeilemalla ja siinä keksinyt että kun vaihtaa lomakkeen(Form) tunnuksen "Load" sanaan "Paint" VB muuttuu grafiikkatilaan onko oikea metodi? Joskus haluaisin käyttää komentonäppäimiä ym. grafiikan kanssa se ei onnistu.

Kirjastosta voi lainata VB:n ohjelmointiin kirjoja, mutta niissä opetetaan vain alkeet tai sitten niin vaikeaselkoisia jossa neuvotaan niin etten ymmärrä niistä juuri mitään.

PS. QB on mielestäni paras, onneksi vanha XP on vieläkin käytettävissä.

Grez [14.08.2012 10:28:57]

#

Siis onkohan nyt VB vai VB.Net kyseessä. Jotenkin sellainen fiilis, että VB olisi, joten vastaukset sen mukaan.

Tapsa kirjoitti:

Mutta kun QBasicistakin tuttu PAINT-funktio puuttuu. Olen kysynyt tätä aiemmin ja saanut hyvän vastauksen. Valitettavasti koneeni sekosi ja niin ohjekin hävisi. Nyt haluaisin saada ne muutaman lauseen jolla tuo rajatun alueen maalaus onnistuu.

Netistä löytyi tällainen koodi:

Option Explicit

Private Declare Function FloodFill Lib "gdi32" _
        (ByVal hdc As Long, _
         ByVal X As Long, _
         ByVal Y As Long, _
         ByVal crColor As Long) As Long

Private Sub Form_Load()
    P1.AutoRedraw = True
End Sub

Private Sub Command1_Click()
    Dim ret As Long

    P1.FillStyle = 0  'Solid
    P1.FillColor = vbBlue

    P1.Line (50, 50)-(200, 50), vbRed
    P1.Line (200, 50)-(200, 200), vbRed
    P1.Line (200, 200)-(50, 50), vbRed

    'Flood Fill works in Pixels so you need to
    'Either set the picturebox scalemode to pixels
    'or convert your seed coordinates with a function.
    FloodFill P1.hdc, 150, 100, vbRed '<--- This color needs to be the same as the bounding lines.
End Sub

Tapsa kirjoitti:

VB muuttuu grafiikkatilaan onko oikea metodi?

VB on aina grafiikkatilassa*. Voit toki tunkea koodisi mihin tapahtumakäsittelijään haluat, metodi ei asiaan liity.

* VB.Net tukee suoraan myös konsolisovelluksia.

Tapsa kirjoitti:

Joskus haluaisin käyttää komentonäppäimiä ym. grafiikan kanssa se ei onnistu.

Komentontonäppäinten käsittely tapahtuu keypress, onkeydown tai onkeyup -tapahtumissa. Voit määritellä keypreview:n formille jolloin näppäinpainallukset näkyvät sen em. tapahtumissa vaikka fokus olisikin muualla.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta