https://unterrichten.zum.de/index.php?title=Lazarus/Komponenten,_Eigenschaften,_Ereignisse&feed=atom&action=historyLazarus/Komponenten, Eigenschaften, Ereignisse - Versionsgeschichte2024-03-29T13:19:40ZVersionsgeschichte dieser Seite in ZUM-UnterrichtenMediaWiki 1.39.6https://unterrichten.zum.de/index.php?title=Lazarus/Komponenten,_Eigenschaften,_Ereignisse&diff=96903&oldid=prevMatthias Scharwies: formatiert2019-08-10T06:28:16Z<p>formatiert</p>
<p><b>Neue Seite</b></p><div>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.<br />
<br />
== Eigenschaften von Komponenten ==<br />
<br />
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.<br />
<br />
=== Typen von Eigenschaften ===<br />
<br />
In Eigenschaften bzw. Variablen können unterschiedlichste Dinge gespeichert sein, man spricht von unterschiedlichen ''Datentypen'', die in Pascal/Lazarus englische Bezeichnungen tragen:<br />
<br />
{| class ="wikitable toptextcells" <br />
! Typ-Bezeichnung<br />
! Inhalt der jeweiligen Variable<br />
|- <br />
| Integer || eine ganze Zahl (positive und negative Zahlen)<br />
|- <br />
| Real oder Double|| eine Kommazahl<br />
|- <br />
| Char|| eine einzelnes Zeichen (Buchstabe, Ziffer, Sonderzeichen)<br />
|- <br />
| String || eine Zeichenkette von Buchstaben, Ziffern und/oder Sonderzeichen<br />
|- <br />
| Boolean || ein so genannter Wahrheitswert, der nur die Werte true (wahr) und false (falsch) annehmen kann.<br />
|}<br />
<br />
Daneben gibt es noch viele weitere Datentypen, die uns aber zur Zeit nicht interessieren müssen.<br />
<br />
=== Ereignisse von Komponenten ===<br />
Mit unterschiedlichen Komponenten kann man unterschiedliche Dinge anfangen. Man sagt auch: Der Benutzer löst ein Ereignis aus. <br />
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).<br />
Das Gleiche kann man erzielen, indem man im Objektinspektor auf den Reiter "Ereignisse" wechselt und dort doppelt ins Feld hinter <tt>OnClick</tt> klickt. Das ist umständlicher, aber bei manchen Komponenten gibt es mehrere spannende Ereignisse und da muss man auf dieses Vorgehen zurückgreifen.<br />
<br />
== TButton-Komponenten ==<br />
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.<br />
Die TButton-Komponente realisiert auf der Benutzungsoberfäche einen Druckknopf, bei dem durch Drücken ein bestimmtes Teilprogramm ausgeführt wird.<br />
<br />
==== Die wichtigsten Eigenschaften ====<br />
{| class ="wikitable toptextcells" <br />
! Eigenschaft <br />
! Typ <br />
! Beschreibung<br />
|- <br />
| Name || String || interner Name des Buttons <br />(bitte nur über den Objektinspektor ändern)<br />
|- <br />
| Caption || String || Beschriftung des Buttons <br />
|- <br />
| Enabled || Boolean || true: Der Button kann angeklickt werden.<br /><br />
false: Der Button kann nicht angeklickt werden.<br />
|- <br />
| Visible || Boolean || true: Der Button ist sichtbar.<br /><br />
false: Der Button ist unsichtbar.<br />
|- <br />
| Font|| TFont|| Schriftart. <br />Am besten über den Objektinspektor einstellen.<br />
|}<br />
<br />
==== Die wichtigsten Ereignisse ====<br />
{| class ="wikitable toptextcells" <br />
! Ereignis<br />
! wird ausgelöst, wenn ...<br />
|- <br />
| OnClick || ... der Benutzer auf den Button klickt.<br />
|}<br />
<br />
==== Ein Beispiel ====<br />
Das folgende Beispiel funktioniert, wenn man zwei Buttons mit den Namen <tt>Button1</tt> und <tt>Button2</tt> auf dem Formular platziert. <br />
<br />
<source line highlight="27-36" lang="pascal"><br />
unit Button2_main;<br />
{$mode objfpc}{$H+} <br />
interface<br />
uses<br />
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls;<br />
<br />
type<br />
{ TForm1 }<br />
<br />
TForm1 = class(TForm)<br />
Button1: TButton;<br />
Button2: TButton;<br />
procedure Button1Click(Sender: TObject);<br />
procedure Button2Click(Sender: TObject);<br />
private<br />
{ private declarations }<br />
public<br />
{ public declarations }<br />
end; <br />
<br />
var<br />
Form1: TForm1; <br />
<br />
implementation<br />
{ TForm1 }<br />
<br />
procedure TForm1.Button1Click(Sender: TObject);<br />
begin<br />
Button2.Enabled:=false; // blockiere Button2 <br />
Button1.Caption:='Jetzt kann man Button2 nicht mehr klicken';<br />
end;<br />
<br />
procedure TForm1.Button2Click(Sender: TObject);<br />
begin<br />
Button2.Caption:='Du hast mich gedrückt.';<br />
end;<br />
<br />
initialization<br />
{$I button2_main.lrs}<br />
end. <br />
</source><br />
<br />
<br />
<br />
== TLabel-Komponenten ==<br />
<br />
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.<br />
<br />
<br />
==== Die wichtigsten Eigenschaften ====<br />
{| class ="wikitable toptextcells" <br />
! Eigenschaft <br />
! Typ <br />
! Beschreibung<br />
|- <br />
| Name || String || interner Name des Buttons <br />(bitte nur über den Objektinspektor ändern)<br />
|- <br />
| Caption || String || Beschriftung des Buttons <br />
|- <br />
| Font|| TFont|| Schriftart. <br />Am besten über den Objektinspektor einstellen.<br />
|- <br />
| Visible || Boolean || true: Das Label ist sichtbar.<br /><br />
false: Das Label ist unsichtbar.<br />
|- <br />
|}<br />
<br />
==== Die wichtigsten Ereignisse ====<br />
Eigentlich sind Labels nur passive Elemente. Trotzdem haben sie auch Ereignisse, die der Benutzer auslösen kann.<br />
<br />
{| class ="wikitable toptextcells" <br />
! Ereignis<br />
! wird ausgelöst, wenn ...<br />
|- <br />
| OnClick || ... der Benutzer auf den Button klickt.<br />
|- <br />
| OnDblClick || ... der Benutzer einen Doppelklick auf dem Label ausführt.<br />
|}<br />
<br />
== Die TEdit-Komponenten==<br />
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.<br />
<br />
==== Die wichtigsten Eigenschaften ====<br />
{| class ="wikitable toptextcells" <br />
! Eigenschaft <br />
! Typ <br />
! Beschreibung<br />
|- <br />
| Name || String || interner Name des Buttons <br />(bitte nur über den Objektinspektor ändern)<br />
|- <br />
| Text || String || Inhalt des Edit-Feldes<br />
|- <br />
| Enabled || Boolean || true: Text kann eingegeben werden.<br /><br />
false: Text kann nicht eingegeben werden.<br />
|- <br />
| Font|| TFont|| Schriftart. <br />Am besten über den Objektinspektor einstellen.<br />
|- <br />
| Visible || Boolean || true: Das Edit-Feld ist sichtbar.<br /><br />
false: ... nicht sichtbar.<br />
|}<br />
<br />
==== Die wichtigsten Ereignisse ====<br />
<br />
{| class ="wikitable toptextcells" <br />
! Ereignis<br />
! wird ausgelöst, wenn ...<br />
|- <br />
| OnChange|| ... den Inhalt des Feldes bearbeitet<br />
|- <br />
| OnEnter|| ... den Cursor in das Edit-Feld setzt (etwa mit der Maus).<br />
|- <br />
| OnEditingDone || ... der Benutzer die Eingabe mit der Eingabetaste abschließt oder mit der Maus auf eine andere Komponente klickt.<br />
|}<br />
<br />
== TForm (das Fenster selbst) ==<br />
Auch das Programmfenster selbst (im Lazarus-Jargon "Form" genannt) hat Eigenschaften und Ereignisse<br />
<br />
==== Die wichtigsten Eigenschaften ====<br />
{| class ="wikitable toptextcells" <br />
! Eigenschaft <br />
! Typ <br />
! Beschreibung<br />
|- <br />
| Name || String || interner Name des Buttons <br />(bitte nur über den Objektinspektor ändern)<br />
|- <br />
| Caption || String || Überschrift des Programmfensters (etwa der Programmtitel)<br />
|}<br />
<br />
==== Die wichtigsten Ereignisse ====<br />
<br />
{| class ="wikitable toptextcells" <br />
! Ereignis<br />
! wird ausgelöst, wenn ...<br />
|- <br />
| OnCreate|| ... das Programm gestartet wird.<br />
|- <br />
| OnClick|| ... der Benutzer in einen sonst leeren Bereich des Fensters klickt<br />
|}<br />
<br />
Das Ereignis OnCreate ist wichtig, wenn schon Dinge erledigt werden sollen, bevor der Benutzer überhaupt irgendetwas tun kann.<br />
<br />
{{Aufgabe|1=<br />
#'''Ein bisschen Design''' <br>Ändere die Schriftart verschiedener Knöpfe ab!<br />
#'''Beschriftungen'''<br>Ä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.<br />
#'''Komponenten beeinflussen sich gegenseitig'''<br>Schreibe ein Programm, das beim Drücken eines Knopfes die Beschriftung eines Labels ändert.<br />
#'''Blockade'''<br>Ergänze das obige Programm so, dass das Drücken von Button2 auch das Drücken von Button1 blockiert. }}<br />
<br />
<br />
== Projekt: Ein erstes einfaches Computerspiel == <br />
* Schreibe ein einfaches „Computerspiel“, genaugenommen ein mittelalterliches mystisches „Adventure“ mit den Knöpfen „Kerker öffnen“, „Drachen köpfen“, „Schatzkiste öffnen“ und „Schatz mitnehmen“. <br />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.<br />Wenn der Schatz dann mitgenommen ist, schreibe in ein Label: „Du bist jetzt REICH!!“<br />
* Erweitere Dein Computerspiel und mache es komplizierter. Was kann man alles aus dem, was Du jetzt schon kannst, herausholen?<br />
<br />
<br />
{{Lazarus-Buch}}</div>Matthias Scharwies