Překreslení obrazovky, zmizí obrázky   otázka

WinForms

Měl bych prosím dotaz. Snažím se vykreslit nějaké obrázky na form1.

Všechny se mi načtou a vše funguje v pořádku až do okamžiku, kdy okno minimalizuji, nebo ho překryju jiným. To se mi aplikace buď sekne (když zrovna vykreslovala obrázky), nebo mi obrázky prostě smaže a vykreslí se jen původní form.

Dim myBitmap1 As System.Drawing.Bitmap
 Dim kostka1 As String = "X"
 kostka1 = "Images\" & A & ".png"

myGraphics = Graphics.FromHwnd(ActiveForm().Handle) ' nevim co presne dela
myGraphics = Graphics.FromHwnd(me.Handle)	    ' to same, ale nehayi mi to obcas chzbu	

myBitmap1 = New System.Drawing.Bitmap(fileName:=kostka1)
 mySource = New Rectangle(x:=x, y:=y, Width:=30, Height:=30)
                myBitmap1.RotateFlip(RotateFlipType.Rotate90FlipNone)
                myGraphics.DrawImage(image:=myBitmap1, rect:=mySource)

dálle jsem se pokoušel o 
 
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As 

System.Windows.Forms.PaintEventArgs) Handles Me.Paint
        lajny()
    End Sub
' ale tomi vlastne vykreslí jen podklad. Ale již vykreslené obrázky to nezachrání a jejich pozice na opětovné vykreslení již nikde neni.

Nevíte čím zabráním tomu nechtěnému vymazání obrázků?

Pokud se vám zdá vykreslení obrázku příliš krkolomné, tak budu rád, když mi někdo poradí jiný způsob. (nejedná se o žádné animace). V okně kodu je jen poslepovaná část kódu, aby bylo vidět jakým způsobem se snažím vykreslovat.

Snad jste můj dotaz pochopili. Předem děkuji za rady. Díky.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Myslím, že přesně to co hledáte bylo popsáno v článcích zabývajících se psaním jednoduchých her. (Odkaz "Hry" v levém menu). Rozhodně pomůže, pokud budete vykreslovat právě pomocí události Form.Paint nejen lajny, ale i ony obrázky, protože Form.Paint je volán vždy, pokud je třeba form překreslit, což může být změny velikosti okna, posunu okna apod. Rozhodně si ale projděte zmiňovaný odkaz, kde je to vysvětleno mnohem podrobněji.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Děkuji za radu.

Nevíte prosím jestli se nedá a jak "típnout obrázek" mezi zadanými souradnicemi a ten pak v případě poteby nechat vykreslit? Protože opětovné vykreslování zabere moc času.

Seriály jsem si četl, ale tento problém se mi nějak nedaří vyřešit.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Co znamená "típnout obrázek"? A "tento problém se mi nějak nedaří vyřešit" myslíte ono "típnutí" anebo celý problém, tj. "mizení obrázků"?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Problém by mi pomohlo vyřešit udělat přintscreen aktuálního formu a v případě obnovování vykrestlit již jen tento bitmap. Jen vůbec nevím jak Jak takový obrázek vytvořit.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Asi jdete naprosto špatným směrem. Jestli vám jde o načtení obrázku ze souboru a jeho vykreslení na formulář s tím, že tam bude i po změně velikosti, po obnovení z minimalizace ap., pak to se na zdejším webu dá najít.

Jestli máte problém to objevit a použít, pak vám asi v programování chybí základy. Měl byste zvládnout zdejší kurz "Začínáme" (vlevo v nabídce, skoro až na konci) a z grafiky "Úvod do grafiky" na adrese:

http://vbnet.cz/clanek--47-vb_net_od_zac...

Ani po zvládnutí těchto lekcí asi nebude rozumět kódu, který jste použil, ale zjistíte že ho ani nebudete potřebovat. Tuto ukázku pochopíte (na C:\ si dejte malý obrázek s názvem obrazek.bmp anebo v kódu změňte "C:\obrazek.bmp):

Public Class Form1
  Dim stetec As New Pen(Color.Blue, 1)
  Dim x1 As Integer = 20
  Dim y1 As Integer = 50
  Dim obr As Bitmap = Image.FromFile("C:\obrazek.bmp")

  Private Sub Form1_Paint(ByVal sender As Object, _
     ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    e.Graphics.DrawLine(stetec, x1, y1 + 40, x1 + Me.Width - 50, y1 - 40)
    e.Graphics.DrawEllipse(stetec, x1, y1 - 40, Me.Width - 50, 80)
    e.Graphics.DrawImage(obr, x1, y1 + 70)
  End Sub

  Private Sub Form1_Load(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles MyBase.Load
    Me.Width = obr.Width + 50
    Me.Height = y1 + 120 + obr.Height
  End Sub
End Class

Základem je holý formulář Form1

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback