Lazarus/Die Unit LazIOStuff: Unterschied zwischen den Versionen

Aus ZUM-Unterrichten
main>Peterdauscher
Keine Bearbeitungszusammenfassung
K (Matthias Scharwies verschob die Seite Lazarus-Buch/Die Unit LazIOStuff nach Lazarus/Die Unit LazIOStuff: kürzere URL)
 
(11 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{Lazarus-Buch}}
== Wozu die Unit LazIOStuff ==
== Wozu die Unit LazIOStuff ==


Zeile 8: Zeile 6:
Das alles würde auch relativ leicht in Lazarus direkt funktionieren, jedoch würde der Programmcode etwas unübersichtlich, und das kann dem Lernen dann doch abträglich sein.
Das alles würde auch relativ leicht in Lazarus direkt funktionieren, jedoch würde der Programmcode etwas unübersichtlich, und das kann dem Lernen dann doch abträglich sein.


== Download und Einbinden ==
Die zugehörige Datei kann hier heruntergeladen werden [http://sourceforge.net/projects/laziostuff/files/laziostuff.pas/download laziostuff.pas]. Die Pascal-Datei muss in das Verzeichnis kopiert werden, in der sich das Lazarus-Projekt befindet, in das es eingebunden werden soll. Das Einbinden selbst erfolgt durch Hinzufügen von <tt>LazIOStuff</tt> in die Zeile <tt>uses ...</tt>
== Die von LazIOStuff bereitgestellten Befehle ==
{| class ="wikitable toptextcells"
! Befehl
! Bedeutung
|-
| WriteTo(Komponente, Wert, [Gesamtanzahl Zeichen, Nachkommastellen]) || Schreibt einen Wert (vom Typ String, Integer oder Double) in eine Komponente.<br /> Das kann entweder eine Edit-Komponente oder eine mehrzeilige Memo-Komponente sein. <br />Bei Edit-Komponenten wird der darin befindliche Inhalt einfach ersetzt, bei Memo-Komponenten jedoch hinter den bisherigen Inhalt angehängt. <br/> Bei Integer-Werten kann zusätzlich angegeben werden, wie viele Zeichen die Ausgabe insgesamt haben soll (rechtsbündige Zahlen). <br/>  Bei Double-Zahlen kann man zusätzlich dazu wiederum noch einstellen, mit wie vielen Nachkommastellen die Zahl angezeigt wird.
|-
| WriteLnTo(Komponente, Wert, [Gesamtanzahl Zeichen, Nachkommastellen]) || Funktioniert ähnlich wie WriteTo, mit einem wesentlichen Unterschied: <br/> Diese Funktion bezieht sich ausschließlich auf die mehrzeiligen Memo-Komponenten. <br/>Nach der Ausgabe verursacht sie gezielt einen Zeilenumbruch.<br/> WriteLnTo kann man auch ganz ohne Klammern verwenden; dann erzeugt es einfach nur einen Zeilenumbruch.
|-
| ReadFrom(Edit-Komponente, Wert) || Liest aus einer Edit-Komponente einen Wert (entsprechend des Datentyps) aus. Möglich sind Zeichenketten (Strings), Integer- und Double-Werte.
|-
| Clear(Komponente) ||Löscht den Inhalt der entsprechenden Komponente.
|-
|}
Das folgende Beispiel demonstriert die verschiedenen Befehle der Unit LazIOStuff und benötigt die Komponenten <tt>Button1, Edit1 und Memo1</tt>.
<source  line highlight="6,24,31-40" lang="pascal">
unit lazio_testumgebung;
{$mode objfpc}{$H+}
interface
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, LazIOStuff;
type
  { TForm1 }
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
var
  Form1: TForm1;
  zahl : integer;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
ReadFrom(Edit1,zahl);
Clear(Memo1);
WriteLnTo(Memo1,'Es geht los!');
WriteLnTo(Memo1,zahl);
WriteLnTo(Memo1,zahl,10);
WriteLnTo(Memo1,' wurde eingegeben. Und die Hälfte davon ist:');
WriteLnTo(Memo1,zahl/2,20,5);
end;
end.
</source>
Die Ausgabe in der <tt>Memo1</tt>-Komponente nach Eingabe der Zahl "7" in der Komponente <tt>Edit1</tt> ist:
<source lang="pascal">Es geht los!
7
        7
wurde eingegeben. Und die Hälfte davon ist:
            3,50000
</source>
{{Aufgabe|1=
#Ein Programm soll zwei Edit-Komponenten haben, eine für den Vornamen und eine für den Nachnamen einer Person. Auf Knopfdruck soll dann in einer Memo-Komponente etwa die Ausgabe <br/> <tt>Herzlich willkommen</tt> <br/> <tt>Donald Duck</tt> <br/> erscheinen. Ein weiterer Knopf soll beim Drücken bewirken, dass das Memo-Feld wieder gesäubert wird.
#Schreibe ein Divisionsprogramm, das in zwei Edit-Feldern zwei Zahlen eingibt. In einem Memo-Feld sollen dann das Ergebnis der ganzzahligen Division, der Rest der ganzzahligen Division, der Quotient als Kommazahl (10 Zeichen gesamt, 3 Nachkommastellen) stehen. <br/> Und selbstverständlich soll der Computer vorher prüfen, ob hier nicht durch Null dividiert werden soll. Sollte der Benutzer das versuchen, soll ein Ausgabe im Memo-Feld erscheinen, die den Benutzer auf seinen Fehler aufmerksam macht.}}


{{Lazarus-Buch}}
{{Lazarus-Buch}}

Aktuelle Version vom 10. August 2019, 06:19 Uhr

Wozu die Unit LazIOStuff

LazIOStuff ist eine Lazarus-Unit, die eine Reihe von Befehlen zur vereinfachten Ein- und Ausgabe zur Verfügung stellt. Man kann sich fragen, weshalb man überhaupt eine solche Unit schreibt, wo doch Lazarus von sich aus doch schon jede Menge Möglichkeiten zur Ein- und Ausgabe von Werten hat. Und weshalb man innerhalb eines Online-Lehrbuchs diese Unit benutzt.

Der Hauptgrund besteht darin, dass es beim Lernen einer Programmiersprache angenehm ist, wenn man sich auf die wesentlichen Dinge konzentrieren kann. Vereinfachte Befehle für Ein- und Ausgabe sollen genau dabei helfen. So haben wir z.B. in den vergangenen Kapiteln gesehen, dass wir immer wieder den Inhalt von Edit-Feldern zu Integer- oder Real-Zahlen übersetzen mussten. In den folgenden Kapiteln wollen wir Ergebnisse in Memo-Felder ausgeben, das sind Komponenten mit mehreren Textzeilen. Das alles würde auch relativ leicht in Lazarus direkt funktionieren, jedoch würde der Programmcode etwas unübersichtlich, und das kann dem Lernen dann doch abträglich sein.

Download und Einbinden

Die zugehörige Datei kann hier heruntergeladen werden laziostuff.pas. Die Pascal-Datei muss in das Verzeichnis kopiert werden, in der sich das Lazarus-Projekt befindet, in das es eingebunden werden soll. Das Einbinden selbst erfolgt durch Hinzufügen von LazIOStuff in die Zeile uses ...


Die von LazIOStuff bereitgestellten Befehle

Befehl Bedeutung
WriteTo(Komponente, Wert, [Gesamtanzahl Zeichen, Nachkommastellen]) Schreibt einen Wert (vom Typ String, Integer oder Double) in eine Komponente.
Das kann entweder eine Edit-Komponente oder eine mehrzeilige Memo-Komponente sein.
Bei Edit-Komponenten wird der darin befindliche Inhalt einfach ersetzt, bei Memo-Komponenten jedoch hinter den bisherigen Inhalt angehängt.
Bei Integer-Werten kann zusätzlich angegeben werden, wie viele Zeichen die Ausgabe insgesamt haben soll (rechtsbündige Zahlen).
Bei Double-Zahlen kann man zusätzlich dazu wiederum noch einstellen, mit wie vielen Nachkommastellen die Zahl angezeigt wird.
WriteLnTo(Komponente, Wert, [Gesamtanzahl Zeichen, Nachkommastellen]) Funktioniert ähnlich wie WriteTo, mit einem wesentlichen Unterschied:
Diese Funktion bezieht sich ausschließlich auf die mehrzeiligen Memo-Komponenten.
Nach der Ausgabe verursacht sie gezielt einen Zeilenumbruch.
WriteLnTo kann man auch ganz ohne Klammern verwenden; dann erzeugt es einfach nur einen Zeilenumbruch.
ReadFrom(Edit-Komponente, Wert) Liest aus einer Edit-Komponente einen Wert (entsprechend des Datentyps) aus. Möglich sind Zeichenketten (Strings), Integer- und Double-Werte.
Clear(Komponente) Löscht den Inhalt der entsprechenden Komponente.

Das folgende Beispiel demonstriert die verschiedenen Befehle der Unit LazIOStuff und benötigt die Komponenten Button1, Edit1 und Memo1.

unit lazio_testumgebung;
{$mode objfpc}{$H+}
interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, LazIOStuff;

type
  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;
  zahl : integer;

implementation

{$R *.lfm}
{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
ReadFrom(Edit1,zahl);
Clear(Memo1);
WriteLnTo(Memo1,'Es geht los!');
WriteLnTo(Memo1,zahl);
WriteLnTo(Memo1,zahl,10);
WriteLnTo(Memo1,' wurde eingegeben. Und die Hälfte davon ist:');
WriteLnTo(Memo1,zahl/2,20,5);
end;

end.

Die Ausgabe in der Memo1-Komponente nach Eingabe der Zahl "7" in der Komponente Edit1 ist:

Es geht los!
7
         7
 wurde eingegeben. Und die Hälfte davon ist:
             3,50000

Aufgabe
  1. Ein Programm soll zwei Edit-Komponenten haben, eine für den Vornamen und eine für den Nachnamen einer Person. Auf Knopfdruck soll dann in einer Memo-Komponente etwa die Ausgabe
    Herzlich willkommen
    Donald Duck
    erscheinen. Ein weiterer Knopf soll beim Drücken bewirken, dass das Memo-Feld wieder gesäubert wird.
  2. Schreibe ein Divisionsprogramm, das in zwei Edit-Feldern zwei Zahlen eingibt. In einem Memo-Feld sollen dann das Ergebnis der ganzzahligen Division, der Rest der ganzzahligen Division, der Quotient als Kommazahl (10 Zeichen gesamt, 3 Nachkommastellen) stehen.
    Und selbstverständlich soll der Computer vorher prüfen, ob hier nicht durch Null dividiert werden soll. Sollte der Benutzer das versuchen, soll ein Ausgabe im Memo-Feld erscheinen, die den Benutzer auf seinen Fehler aufmerksam macht.