Gambas: Button
Zurück zum Gambas-Inhaltsverzeichnis
Der Command Button (Befehlsknopf)
[Bearbeiten]Der Commandbutton ist einer der wichtigsten Steuerelemente überhaupt. Die meisten kleinen Beispielprogramme in diesem Gambas Wikibook werden über einen Commandbutton gestartet.
So schaut der Befehlsknopf auf der Werkzeugleiste aus. Klicken Sie in Ihrer Werkzeugleiste darauf, wenn Sie einen auf Ihrer Form brauchen. Die Werkzeugleiste bekommen Sie mit F6.
Halten Sie dabei folgende Reihenfolge ein. Erst die Form anzeigen, dann die Werkzeugkiste aktivieren, sonst bekommt man keinen Commandbutton auf die Form.
So schaut dann der Befehlsknopf auf Ihrer Form in der Entwurfsansicht aus.
Wenn Sie den Befehlsknopf in der Entwurfsansicht anklicken, dann wird er mit 4 kleinen weißen Quadraten an den Ecken markiert. Sie können ihn größer oder kleiner machen und natürlich irgendwohin auf ihrer Form verschieben.
Mit F4 können Sie die Eigenschaften des Buttons festlegen. Lassen Sie sich nicht von der großen Zahl beeindrucken. Probieren Sie z.B. einmal die Eigenschaft Text aus und geben Sie ihrem Button einen neuen Namen.
Wenn Sie Code an den Button anhängen wollen, dann öffnen Sie das Codefenster mit einem Doppelklick auf den Commandbutton.
Die Handhabung des Commandbuttons ist im Prinzip also sehr einfach. Man holt ihn aus der Werkzeugkiste auf die Form, benennt ihn um und schreibt dann den entsprechenden Code dahinter:
PUBLIC SUB Button1_Click() Print 1 END
Aufruf des Befehlsknopfes mit der Tastatur
[Bearbeiten]Ist der Knopf bei laufendem Programm im Fokus, reagiert er auf das 'KeyPress'-Ereignis.
Der Code zur Behandlung dieses Ereignisses ist dann z.B.:
PUBLIC SUB Button1_KeyPress() IF key.Code = key.Space OR key.Code = key.Return OR key.code=key.Enter THEN Print 1 ENDIF END
Ein paar Besonderheiten des Commandbuttons sollen folgende Programme zeigen.
Den Commandbutton verschwinden lassen
[Bearbeiten]Mit dem folgenden Miniprogramm können Sie einen Commandbutton unsichtbar machen:
PUBLIC SUB Button1_Click() Button1.visible = false END
Dasselbe macht übrigens:
PUBLIC SUB Button1_Click() Button1.hide END
Wenn er wieder auftauchen soll, hilft folgender Code mit einem Button2:
PUBLIC SUB Button2_Click() Button1.show END
Wie könnte man den Button1 wieder anzeigen, ohne das man einen Button1 nutzt.
Beispielsweise mit einem Doppelklick auf die Form:
PUBLIC SUB Form_DblClick() Button1.show END
Den Commandbutton endgültig verschwinden lassen
[Bearbeiten]Mit dem folgenden Miniprogramm können Sie einen Commandbutton völlig verschwinden lassen.
PUBLIC SUB Button1_Click() Button1.delete END
Den Commandbutton verschieben
[Bearbeiten]Wollen Sie den Commandbutton während der Laufzeit verschieben, dann können Sie folgendes Miniprogramm nutzen. Sie brauchen einen Commandbutton auf der Form um es in Gang zu bringen.
PUBLIC SUB Form_Open() Button1.Move(160,64,64,32) END PUBLIC SUB Button1_Click() Button1.Move(1,64,64,32) END
Wie kann man den Button mit der Maus verschieben?
Wollen Sie einmal erleben wie ein Button Ihrer Maus folgt wie ein Hündchen?
Dann probieren Sie folgendes Programm. Sie brauchen eine Form und einen Button, um es in Gang zu bringen.
PUBLIC SUB Form_MouseMove() Button1.X = Mouse.X Button1.Y = Mouse.Y END
Wenn Sie das Programm gestartet haben, dann klicken Sie in die Form und fahren mit der Maus auf der Form herum.
Einen Commandbutton zur Laufzeit neu erstellen
[Bearbeiten]Meistens wird man alle notwendigen Befehlsknöpfe bereits während der Entwurfszeit auf der Form platzieren, sie mit Code versehen und dann erst das Programm starten. Man kann aber auch während der Laufzeit einen oder mehrere Commandbuttons noch während des Programmablaufes (Laufzeit) neu erstellen. Wie das geht ist hier beschrieben.
Sie brauchen nur eine leere Form um es in Gang zu bringen.
b AS Button PUBLIC SUB _New() b = NEW Button(ME) AS "Ende" b.show b.Caption = "Ende" b.x = 100 b.y = 100 END PUBLIC PROCEDURE Ende_Click() ME.Close END
Eine lustige Variante:
b AS Button PUBLIC SUB _New() b = NEW Button(ME) AS "Ende" b.show b.Caption = "Ende" b.x = 100 b.y = 100 END PUBLIC PROCEDURE Ende_Click() b.visible = FALSE END PUBLIC SUB Form_Leave() b.visible = TRUE END
Commandbuttons zur Laufzeit in einer Schleife neu erstellen
[Bearbeiten]Will man viele Buttons auf einer Form schnell erstellen, ist dazu eine Schleife am besten geeignet. Das Ganze hat aber ein paar Haken. Mit folgendem Beispielprogramm funktioniert es dann doch ganz gut. Man braucht nur eine leere Form, um es in Gang zu bringen.
btn AS Button btnname AS String PUBLIC SUB _new() x AS Integer FOR x = 1 TO 4 btnname = "btn" & Str(x) btn = NEW Button(ME) AS btnname btn.X = 100 * x btn.Y = 30 btn.Width = 50 btn.Height = 30 btn.Caption = Str(x) btn.enabled = TRUE NEXT END
Will man die Buttons in einer Schleife alle wieder weglöschen, dann geht das schon bedeutend schwieriger.
Der wandernde Befehlsknopf
[Bearbeiten]Völlig nutzlos ist das folgende Programm, aber es ist Bewegung im Spiel. Sie brauchen eine Form und einen Button um es in Gang zu bringen.
PUBLIC SUB Button1_Click() x AS Integer FOR x = 1 TO 20 Button1.X = x * 10 Button1.Y = x * 10 WAIT 0.5 Button1.Text = Str(x) NEXT END
Zahlenraten bis 27
[Bearbeiten]Bei dem folgenden kleinen Spiel denkt sich der Computer eine Zahl zwischen 1 und 27. Der Benutzer soll diese Zahl mit möglichst wenig Versuchen erraten. Versuchen Sie mit maximal 5 Rateversuchen auszukommen!
Sie brauchen 2 Befehlsbuttons, 2 Textboxen und 1 Labelsteuerelement auf Ihrer Form, um das Programm in Gang zu bringen.
Quelltext: Zahlenraten Form1.class
Die 27 Zahlenbuttons werden zur Laufzeit erzeugt. Erstaunlich ist der Array aus Buttons. Damit wir nicht für alle 27 Buttons eine eigene Click() Funktion schreiben müssen, bekommen alle Buttons in der Zeile
b[n] = NEW Button(ME) AS "btn"
den gleichen Namen btn. Dadurch rufen alle 27 Buttons, wenn sie angeklickt werden, die gleiche Funktion btn_Click() auf. Um nun innerhalb dieser Funktion zu ermitteln, welcher Button angeklickt wurde, benutzen wir LAST. LAST ist eine Referenz auf das letzte Objekt, das ein Ereignis ausgelöst hat. Durch LAST können wir also auf das entsprechende Objekt zugreifen. Um dieses jetzt eindeutig zu identifizieren, benutzen wir dessen Tag-Eigenschaft. Die Tag-Eigenschaft kann verwendet werden, um unsichtbar Informationen in einem Objekt zu speichern, in unserem Fall die dem Button zugeordnete Zahl. Innerhalb der Funktion btn_Click() liefert LAST.Tag also den Zahlenwert des angeklickten Buttons.