Gambas: Button

Aus Wikibooks
Wechseln zu: Navigation, Suche


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.

Button.png

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.

Button1.png

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!

Gambaszahlenraten.png

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.