Lazarus/Komponenten, Eigenschaften, Ereignisse

Aus ZUM-Unterrichten

Nachdem wir im vorigen Abschnitt ein einfaches Beispiel für ein Lazarus-Programm gesehen haben, sollten wir jetzt einige Begriffe klären, damit wir leichter über die Dinge reden können.

Eigenschaften von Komponenten

An dem Beispiel im vorigen Abschnitt haben wir gesehen, dass sich die Eigenschaften etwa eines Buttons ändern können, während das Programm läuft. Es gibt unterschiedliche Arten von Eigenschaften. Man spricht in diesem Zusammenhang wie in der Mathematik auch von Variablen, die einen bestimmten Inhalt haben.

Typen von Eigenschaften

In Eigenschaften bzw. Variablen können unterschiedlichste Dinge gespeichert sein, man spricht von unterschiedlichen Datentypen, die in Pascal/Lazarus englische Bezeichnungen tragen:

Typ-Bezeichnung Inhalt der jeweiligen Variable
Integer eine ganze Zahl (positive und negative Zahlen)
Real oder Double eine Kommazahl
Char eine einzelnes Zeichen (Buchstabe, Ziffer, Sonderzeichen)
String eine Zeichenkette von Buchstaben, Ziffern und/oder Sonderzeichen
Boolean ein so genannter Wahrheitswert, der nur die Werte true (wahr) und false (falsch) annehmen kann.

Daneben gibt es noch viele weitere Datentypen, die uns aber zur Zeit nicht interessieren müssen.

Ereignisse von Komponenten

Mit unterschiedlichen Komponenten kann man unterschiedliche Dinge anfangen. Man sagt auch: Der Benutzer löst ein Ereignis aus. Bei Knöpfen (Buttons) ist das typische Ereignis schlechthin das Draufklicken. Klickt man im Entwurfsfenster doppelt auf den Button, so öffnet sich der Teil des Programms, der dafür zuständig ist, was beim Draufklicken passieren soll (oder dieser Programmteil wird neu erzeugt). Das Gleiche kann man erzielen, indem man im Objektinspektor auf den Reiter "Ereignisse" wechselt und dort doppelt ins Feld hinter OnClick klickt. Das ist umständlicher, aber bei manchen Komponenten gibt es mehrere spannende Ereignisse und da muss man auf dieses Vorgehen zurückgreifen.

TButton-Komponenten

Wie wir schon gesehen haben, werden die Eigenschaften einer Komponente angesprochen, indem man zuerst den Namen der Komponente, dann direkt einen Punkt und dann direkt dahinter den Namen der Eigenschaft setzt. Die TButton-Komponente realisiert auf der Benutzungsoberfäche einen Druckknopf, bei dem durch Drücken ein bestimmtes Teilprogramm ausgeführt wird.

Die wichtigsten Eigenschaften

Eigenschaft Typ Beschreibung
Name String interner Name des Buttons
(bitte nur über den Objektinspektor ändern)
Caption String Beschriftung des Buttons
Enabled Boolean true: Der Button kann angeklickt werden.

false: Der Button kann nicht angeklickt werden.

Visible Boolean true: Der Button ist sichtbar.

false: Der Button ist unsichtbar.

Font TFont Schriftart.
Am besten über den Objektinspektor einstellen.

Die wichtigsten Ereignisse

Ereignis wird ausgelöst, wenn ...
OnClick ... der Benutzer auf den Button klickt.

Ein Beispiel

Das folgende Beispiel funktioniert, wenn man zwei Buttons mit den Namen Button1 und Button2 auf dem Formular platziert.

unit Button2_main;
{$mode objfpc}{$H+}                      
interface
uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls;

type
  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end; 

var
  Form1: TForm1; 

implementation
{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
  Button2.Enabled:=false;   // blockiere Button2 
  Button1.Caption:='Jetzt kann man Button2 nicht mehr klicken';
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Button2.Caption:='Du hast mich gedrückt.';
end;

initialization
  {$I button2_main.lrs}
end.


TLabel-Komponenten

Häufig ist es zweckmäßig, auf der Benutzungsoberfläche bestimmte Dinge zusätzlich zu beschriften. Das gelingt mit so genannten Labels. Sie haben eigentlich nur die Funktion, Wörter und Zahlen anzuzeigen.


Die wichtigsten Eigenschaften

Eigenschaft Typ Beschreibung
Name String interner Name des Buttons
(bitte nur über den Objektinspektor ändern)
Caption String Beschriftung des Buttons
Font TFont Schriftart.
Am besten über den Objektinspektor einstellen.
Visible Boolean true: Das Label ist sichtbar.

false: Das Label ist unsichtbar.

Die wichtigsten Ereignisse

Eigentlich sind Labels nur passive Elemente. Trotzdem haben sie auch Ereignisse, die der Benutzer auslösen kann.

Ereignis wird ausgelöst, wenn ...
OnClick ... der Benutzer auf den Button klickt.
OnDblClick ... der Benutzer einen Doppelklick auf dem Label ausführt.

Die TEdit-Komponenten

Um nicht nur mit der Maus auf Knöpfe drücken zu können, sondern auch Wörter und Zahlen mit der Tastatur eingeben zu können, kann man TEdit-Komponenten verwenden, die man auch als "Eingabefelder" bezeichnen könnte.

Die wichtigsten Eigenschaften

Eigenschaft Typ Beschreibung
Name String interner Name des Buttons
(bitte nur über den Objektinspektor ändern)
Text String Inhalt des Edit-Feldes
Enabled Boolean true: Text kann eingegeben werden.

false: Text kann nicht eingegeben werden.

Font TFont Schriftart.
Am besten über den Objektinspektor einstellen.
Visible Boolean true: Das Edit-Feld ist sichtbar.

false: ... nicht sichtbar.

Die wichtigsten Ereignisse

Ereignis wird ausgelöst, wenn ...
OnChange ... den Inhalt des Feldes bearbeitet
OnEnter ... den Cursor in das Edit-Feld setzt (etwa mit der Maus).
OnEditingDone ... der Benutzer die Eingabe mit der Eingabetaste abschließt oder mit der Maus auf eine andere Komponente klickt.

TForm (das Fenster selbst)

Auch das Programmfenster selbst (im Lazarus-Jargon "Form" genannt) hat Eigenschaften und Ereignisse

Die wichtigsten Eigenschaften

Eigenschaft Typ Beschreibung
Name String interner Name des Buttons
(bitte nur über den Objektinspektor ändern)
Caption String Überschrift des Programmfensters (etwa der Programmtitel)

Die wichtigsten Ereignisse

Ereignis wird ausgelöst, wenn ...
OnCreate ... das Programm gestartet wird.
OnClick ... der Benutzer in einen sonst leeren Bereich des Fensters klickt

Das Ereignis OnCreate ist wichtig, wenn schon Dinge erledigt werden sollen, bevor der Benutzer überhaupt irgendetwas tun kann.


Aufgabe
  1. Ein bisschen Design
    Ändere die Schriftart verschiedener Knöpfe ab!
  2. Beschriftungen
    Ändere die Beschriftung eines Knopfes. Und zwar einmal, indem Du die Eigenschaft "Caption" im Objektinspektor veränderst. Und einmal, indem Du im Reiter "Ereignisse" des Objektinspektors für das Ereignis "OnCreate" einen Programmteil erstellst und darin die Beschriftung des Knopfes (oder mehrerer) änderst.
  3. Komponenten beeinflussen sich gegenseitig
    Schreibe ein Programm, das beim Drücken eines Knopfes die Beschriftung eines Labels ändert.
  4. Blockade
    Ergänze das obige Programm so, dass das Drücken von Button2 auch das Drücken von Button1 blockiert.


Projekt: Ein erstes einfaches Computerspiel

  • Schreibe ein einfaches „Computerspiel“, genaugenommen ein mittelalterliches mystisches „Adventure“ mit den Knöpfen „Kerker öffnen“, „Drachen köpfen“, „Schatzkiste öffnen“ und „Schatz mitnehmen“.
    Diese Dinge müssen natürlich nacheinander gemacht werden, denn der Schatz ist verschlossen, die Schatzkiste ist vom Drachen bewacht, und der ist mitsamt der Schatzkiste im Kerker eingesperrt.
    Wenn der Schatz dann mitgenommen ist, schreibe in ein Label: „Du bist jetzt REICH!!“
  • Erweitere Dein Computerspiel und mache es komplizierter. Was kann man alles aus dem, was Du jetzt schon kannst, herausholen?