Seite 1 von 2

Tutorial - VisualBasic

Verfasst: 30.05.2004 14:58
von phpBB 2.2
Hallo. :)

Das es keine Tutorial Ecke gibt, schreib ich mal mein 'Tutorial für Visual Basic' hier rein.
Es soll ein Malprogramm ergeben, mit dem Ihr selbstverständlich malen könnt :) .

Form und Steuerelemente platzieren

Zuerst muss alles da hin wo es hin soll ;) Hier eine Liste der Einstellungen von Form und Steuerelementen:

In der Standartform müssen folgende Eigenschaften gesetzt werden:
Name auf frmMain
Backcolor auf Schwarz
BorderStyle auf Fest Einfach
Caption auf Paint Light
ScaleMode auf Pixel
StartUpPosition auf Bildschirmmitte
Zieht sie außerdem etwas größer
Platziert anschließend eine PictureBox auf frmMain:
Name auf picBlatt
BackColor auf Weiss
BorderStyle auf Fest Einfach
Appearance auf 2D
AutoRedraw auf True
Dazu kommen noch 5 Labels die ihr wie auf diesem Bild zu sehen ist gestallten solltet, aber natürlich kann das variiert werden. Die letzten vier Labels sind Buttons, ihr solltet also den Namen von Label1 etc. in lblStift usw. umbenennen.





Modul hinzufügen

Wenn ihr alles so eingestellt habt wie ich es oben beschrieben habe fügt ein Modul zum Projekt hinzu ( Das geht mit Projekt -> Modul hinzufügen -> Neu und Öffnen ). Nennt es modPaint. Dort kommen anschließend folgende praktische Funktionen und Variablen hinein:

Code: Alles auswählen

Option Explicit

'Key API-Funktion,wird für Maustasten-Abfrage benötigt
Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Public Const VK_RBUTTON = &H2
Public Const VK_LBUTTON = &H1
Public Const VK_MBUTTON = &H4
In dieser Form nützt und diese API Funktion recht wenig, aber wir schreiben uns selber eine weitere Funktion, die diese verwendet und die gedrückte Maustaste zurückgeben kann:

Code: Alles auswählen

Public Function GetMouseButton() As Integer
'// Gibt gedrückten Mausbutton zurück

GetMouseButton = 0 'Keine Maustaste gedrückt
If GetAsyncKeyState(VK_LBUTTON) And &H8000& Then GetMouseButton = 1 'Linke Maustaste
If GetAsyncKeyState(VK_RBUTTON) And &H8000& Then GetMouseButton = 2 'Rechte Maustaste

End Function
Dazu kommen noch zwei weitere Funktionen: Die eine erzeugt eine Zufalls-Zahl zwischen zwei Werten und die andere erzeugt eine Zufalls-Farbe:

Code: Alles auswählen

Public Function rand(ByVal minValue As Double, ByVal maxValue As Double, Optional notRound As Boolean) As Double
'// Erzeugt Zufallszahl zwischen minValue und maxValue

'Kontrolle der Werte
If maxValue = minValue Then
rand = maxValue
Exit Function
End If

maxValue = maxValue + 1
rand = Rnd * (maxValue - minValue) + minValue
If notRound <> True Then rand = Int(rand)

End Function
Diese Funktion verwenden wir für unsere Zufalls-Farben-Funktion:

Code: Alles auswählen

Public Function randColor() As Long
'// Erzeugt Zufallsfarbe
randColor = RGB(rand(0, 255, True), rand(0, 255, True), rand(0, 255, True))

End Function

Weiter geht's mit der Form

Natürlich brauchen wir noch weitere Variablen. Diese deklarieren wir mal spaßeshalber in der Form ;)

Code: Alles auswählen

Option Explicit

'Zeichenmodus
'1 = Stift, 2 = Grafitti
Private DrwMode As Integer

Private Color As Long 'Zeichen-Farbe
Private MouseX As Long, MouseY As Long 'Mauscursor-Position
Nicht wirklich schwierig bisher, oder? Jetzt kommen wir zum eigentlichen Code des Programms, aber die bis jetzt gemachten Deklarationen sind schon die halbe Miete ;) Folgendes kommt in die vier Button-Label die wir angelegt haben:

Bei Klick auf Stift-Label schalten wir den Zeichen-Modus auf 1,beim Grafitti-Label auf 2. Bei Klick auf das Löschen-Label löschen wir das gesammte Blatt und bei Klick auf das Farbe-Wechseln-Label wechseln wir die Farbe - das ist alles so einfach wie es klingt:

Code: Alles auswählen

Private Sub lblClear_Click()
picBlatt.Cls 'Damit löschen wir das gesammte Blatt
End Sub

Private Sub lblColor_Click()
Color = randColor 'Wir wechseln zu einer zufälligen Farbe...
lblColor.ForeColor = Color '...und passen die Schriftfarbe des Labels entsprechend an 
End Sub


Private Sub lblGraf_Click()
DrwMode = 2
End Sub

Private Sub lblStift_Click()
DrwMode = 1
End Sub
Jetzt coden wir das Kernstück der Anwendung. Hier werden die Mausklicks verarbeitet und je nach Zeichenmodus Pixel gezeichnet. Begebt euch dazu ins MouseMove-Ereignis von picBlatt. Jedes mal wenn ihr den Mauscursor über picBlatt bewegt wird bei gedrückter Maustaste gezeichnet:

Code: Alles auswählen

Private Sub picBlatt_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
'Mauskoordinaten speichern
MouseX = X
MouseY = Y

'Es wird nur etwas gezeichnet wenn auch eine Mauszasze gedrückt wurde!
If GetMouseButton = 0 Then Exit Sub

'Stift-Modus
If DrwMode = 1 Then
picBlatt.Line (MouseX - 2, MouseY - 2)-(MouseX, MouseY), Color, BF
End If

'Grafitti-Modus
If DrwMode = 2 Then
Dim n As Integer
'16 Punkte an zufälliger Position zeichnen
For n = 1 To 16
picBlatt.PSet (rand(MouseX - 8, MouseX + 8), rand(MouseY - 8, MouseY + 8)), Color
Next n
End If

End Sub
Nun erkläre ich mal was dort oben eigentlich passiert ;-). Das MouseMove-Ereignis übergibt uns freundlicherweise die X und Y Koordinaten des Mauscursors. Wenn nun wirklich eine Maustaste gedrückt wurde (dazu brauchen wir unsere selbstgeschriebene Funktion) schauen wir welcher Zeichen-Modus vorliegt.

Beim Stift-Modus zeichnen wir einfach ein kleines Viereck (ein Punkt wäre etwas zu klein...) an Stelle des Cursors. Beim Grafitti-Modus wird es etwas umfangreicher: Klar ist, dass wir dort mehrere Punkte zeichnen müssen. Allerdings dürfen die nicht aufeinander liegen - dann wäre es ja nur ein Punkt. Deshalb errechnen wir uns mit der rand() Funktion Zufallspunkte zwischen MouseKoordinate - 8 und MouseKoordinate + 8. So erhalten wir den gewünschten Sprüh Effekt.

Das ist alles, euer Malprogramm ist fertig :) Natürlich könnte man noch sehr viele Features hinzufügen, aber das war nicht der Sinn dieses Tutorials. Wenn ihr noch Fragen habt postet ins Forum.

Verfasst: 30.05.2004 15:02
von shwepsi
und was sagt uns das jetzt?

sowas gibt es als gratis DL bei M&T (auch online auf html Basis) als visual Basic in 21 Tagen (mut.de)

sorry, aber das gehört hier nicht mal annähernd rein ....
ein PHP Tutorital, MySQL, MSSQL, Oracle, ... ja, so halbwegs dann doch, aber weder c, noch basic, noch delphi/pascal, noch ....

Verfasst: 30.05.2004 15:02
von Crack02
ähem......

PHP, SQL, ASP, Java... Alles über gängige (Internet-)Sprachen und ihre Anwendung... auch Fragen zu FTP-Programmen, HTML-Editoren etc. werden hier behandelt
da steht nix von viusal basic ^^

Verfasst: 30.05.2004 15:04
von phpBB 2.2
Sagt euch der Titel
Coding & Technik
was? :D :D :D

Verfasst: 30.05.2004 15:06
von Crack02
sicher, aber man sollte auch die forenbeschreibung lesen :D

eigentor ^^

Verfasst: 30.05.2004 15:08
von phpBB 2.2
Ok. Eigentor. Aber gleich ne Flanke und nen Voley: :D
PHP, SQL, ASP, Java...
Hehe, erwischt :D

Verfasst: 30.05.2004 15:09
von Crack02
war aber nur pfosten :D

weil das sind alles programmiersprachen die was mitm internet zu tun haben :P

Verfasst: 30.05.2004 15:10
von Dwing
Visual Basic ist keine Internet-Sprache :roll:
Wieso liest eigentlich jeder nur die Hälfte?

Verfasst: 30.05.2004 15:11
von phpBB 2.2
Na gut. Aber ein bisschen abwechslung tut auch gut :D

Übrigens: LATTE! :D :D :D

Verfasst: 30.05.2004 15:12
von Crack02
zusammenfassung des spiels: 3:2 für mich :D


btw. nettes script 8)