Picture box genau zuschneiden (auf Pixel genau oder)
- VB6
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von Neptun.
-
-
Visual Basic-Quellcode
- 'Funktion
- Sub abrunden(ByVal was As Object, _
- ByVal x As Integer, ByVal y As Integer, _
- ByVal width As Integer, ByVal height As Integer, _
- ByVal radius As Integer)
- Dim gp As System.Drawing.Drawing2D.GraphicsPath = _
- New System.Drawing.Drawing2D.GraphicsPath()
- gp.AddLine(x + radius, y, x + width - radius, y)
- gp.AddArc(x + width - radius, y, radius, radius, 270, 90)
- gp.AddLine(x + width, y + radius, x + width, y + height - radius)
- gp.AddArc(x + width - radius, y + height - radius, radius, radius, 0, 90)
- gp.AddLine(x + width - radius, y + height, x + radius, y + height)
- gp.AddArc(x, y + height - radius, radius, radius, 90, 90)
- gp.AddLine(x, y + height - radius, x, y + radius)
- gp.AddArc(x, y, radius, radius, 180, 90)
- gp.CloseFigure()
- was.region = New System.Drawing.Region(gp)
- gp.Dispose()
- End Sub
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- abrunden(Picturebox1, 0, 0, Picturebox1.Width, Picturebox1.Height, 20)
- End Sub
-
-
-
-
weil wir für Informatik nen Spiel programmieren sollen und mit nem Raumschiff in nem schwarzen Viereck sieht doof aus, und unser Lehrer kann selbst nicht programmieren
P.s made not by me!
P.s² Der Lehrer will das ihr ein Spiel
macht aber weiß selber ned wie man
programmiert? xDDDDDDDieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Scream“ ()
-
-
-
-
Hallo whitex3,
eine Möglichkeit: Verwende als Grafik eine transparente Gif-Datei (oder
auch Ico-Datei) und zeige sie in einem Image-Control an. In dem Fall
wird kein zusätzlicher Code benötigt. Nachteil Image-Controls flackern
beim Verschieben.
Zweite Möglichkeit: Zeichne die Grafik mit der Api-Funktion TransparentBlt
in eine Picturebox.
Die Lösung mit SetWindowRgn ist schon etwas aufwändiger.Gruss,
Neptun -
-
-
Hallo whitex3,
probier' mal dieses:
Visual Basic-Quellcode
- ' Controls: 1 * Picturebox mit Raumschiffbild, 1 * Timer-Control
- Option Explicit
- Private Declare Function DeleteObject& Lib "gdi32" (ByVal hObject&)
- Private Declare Function CreateRectRgn& Lib "gdi32" (ByVal x1&, ByVal y1&, ByVal X2&, ByVal Y2&)
- Private Declare Function GetPixel& Lib "gdi32" (ByVal hDC&, ByVal x&, ByVal y&)
- Private Declare Function CombineRgn& Lib "gdi32" (ByVal hDestRgn&, ByVal hSrcRgn1&, ByVal hSrcRgn2&, ByVal nCombineMode&)
- Private Declare Function SetWindowRgn& Lib "user32" (ByVal hWnd&, ByVal hRgn&, ByVal bRedraw As Boolean)
- Private Const RGN_OR& = 2&
- Private Sub Form_Load()
- Me.ScaleMode = vbPixels
- Call SetTransparent(Picture1)
- Timer1.Interval = 10
- Timer1.Enabled = True
- End Sub
- Private Sub Timer1_Timer()
- Picture1.Left = (Picture1.Left + 1) Mod Me.ScaleWidth
- End Sub
- Private Sub SetTransparent(PicX As PictureBox)
- Dim x1&, y1&, Color1&, Rgn1&, Rgn2&, R&, G&, B&
- With PicX
- .AutoSize = True
- .BorderStyle = vbBSNone
- .ScaleMode = vbPixels
- .AutoRedraw = True
- For x1 = 0 To .ScaleWidth - 1
- For y1 = 0 To .ScaleHeight - 1
- Color1 = GetPixel(.hDC, x1, y1)
- R = Color1 And vbRed
- G = (Color1 And vbGreen) \ &H100
- B = (Color1 And vbBlue) \ &H10000
- If R > 64 Or G > 64 Or B > 64 Then
- If Rgn1 = 0 Then
- Rgn1 = CreateRectRgn(x1, y1, x1 + 1, y1 + 1)
- Else
- Rgn2 = CreateRectRgn(x1, y1, x1 + 1, y1 + 1)
- Call CombineRgn(Rgn1, Rgn1, Rgn2, RGN_OR)
- Call DeleteObject(Rgn2)
- End If
- End If
- Next y1
- Next x1
- .Cls
- .AutoRedraw = False
- .ZOrder vbBringToFront
- Call SetWindowRgn(.hWnd, Rgn1, True)
- End With
- End Sub
Gruss,
Neptun -
-
-
-
Die Kollision brauche ich z.B. für "Asteroiden", die die ganze Zeit durchs Level fliegen, und da wollte ich einfach machen, dass wenn Asteroid.top=240 dann text4=text4*-1 (text4 wird immer zu asteroiden.top addiert).
Aber wenn ich die Zeile
Me.ScaleMode = vbPixels
wegneheme dann funktioniert alles wie es laufen soll :D:D
DANKE! wo hast du eigentlich so programmieren gelernt? -
Hallo whitex3,
wenn du mehrere Controls vom gleichen Typ hast, wie hier die
Asteroiden, solltest du ein Steuerelementefeld verwenden. Dann
kannst du alle Controls in einer Schleife ansprechen.
Siehe dazu:
vbarchiv.net/faq/details.php?id=allg_controls
wo hast du eigentlich so programmieren gelernt?
Ich habe ein paar Bücher über VB gelesen. Der Rest ist Übung.Gruss,
Neptun
-
Tags
-
Ähnliche Themen
-
teha - - Tools / Hilfsprogramme
-
Mauszeigergeschwindigkeit feststellen
Klebestift - - Sonstige Problemstellungen
-
2 Benutzer haben hier geschrieben
- Gast (12)
- Neptun (6)