Für Lazarus IDE sollten Grundkenntnisse der Programmierung vorhanden sein sowie Übung mit der Entwicklungsumgebung! Eine kleine Instruktion gibt es hier...

Typen, Meldungen und Felder Zeilen hinzufügen und zählen Einträge zählen und summieren Funktion: Parameter vertauschen
Progressleiste starten und anhalten Der Klick als Ereignis String mit zwei Prozeduren String mit einer Prozedur
Ereignisse eines Dialogs zählen Einträge der Liste selectieren Einträge per Checkbox Formen bewegen und skalieren
Formen animieren Klassen erzeugen Zeichen zählen case & if... else...

Es entscheidet die Checkbox darüber, ob die Summe zweier Zahlen in die Liste und somit in die Gesamtsumme aufgenommen wird. Ungeachtet dessen wird die Addition beider Zahlen ausgeführt. Warum auch nicht?

if (CheckBox1.Checked = true) then...

So hiess es an anderer Stelle if Sender = Button1 then... , womit ein Ereignis ( Sender ) und das Element ( Button1 ) verglichen wird. Bei der Checkbox wird true = 1 oder false = 0 als Bedingung für betreffendes Element herangezogen.

Obwohl bereits das Memo verwendet wurde, ist die ListBox dem Memo eindeutig vorzuziehen.

Nicht zuletzt deshalb, weil die ListBox problemlos einen Scrollbalken horizontal oder vertikal einfügt, sobald der Umfang zu groß ist. Ferner sind Einträge ( Items ) leichter zu handhaben als die Zeilen ( Lines ) der Memofelder.

Auch hier zeigt sich, daß eine Checkbox immer ein praktisches Mittel ist, Kriterien zusätzlich einzubauen.

Aber auch grundsätzliche Entscheidungen können per Checkbox selektiert werden. Denken Sie an die Lizenzvereinbarungen, die es zu akzeptieren gilt, bevor ein Programm installiert wird; oder eben nicht und der Installationsvorgang bricht ab.

Suchen Sie nach Shape im Menü von Lazarus. Hier hält der Objektinspektor alle Informationen bereit, die Sie im Programm dann aufrufen und verändern können.

Dazu sei im Beispiel hier nur die Position von Links, die Farbe der betreffenden Form und die Breite des gesamten Bereichs, also Form1 genannt.

Wichtig ist der Moment, da der Kreis per Eingabe ausserhalb des Formbereichs plaziert werden würde. Daher eine kleine Bedingung:

if ( Shape1.Left + a ) > Form1.Width then...

Damit die Form nicht einfach verschwindet, wird die Positionierung zurückgesetzt. Dem Objektinspektor können Sie die Koordinaten entnehmen. Dann wird die Farbe restituiert, was im Inspektor unter Brush zu finden ist.

Auch bei der Skalierung ist die Grösse von Form1 zu bedenken. Doch die kann variieren, da Sie das Fenster eines ausgeführten Programms einfach mal vergrössern können.
Somit machen absolute Angaben in der Bedingung keinen Sinn:

if (( Shape1.Width + a ) > Form1.Width ) OR ...

Ferner sollte der Benutzer nicht die Möglichkeit haben, die Form einfach verschwinden zu lassen. Wozu auch?

Und noch eine Bedingung in die andere Richtung. Mit anderer Richtung sind negative Werte gemeint, die es zu vermeiden gilt. Diese können aber sehr wohl absolut sein und uns dient als Referenz die 0 als Limit zum Unsichtbaren.


Um Formen zu animieren braucht man dreierlei: Grundform, Zeit und Endform. In ganz groben Grundzügen ergibt das eine Animation. Klingt einfach? Ist es auch!

Eine wichtige Rolle hierbei spielt der Timer, ohne dessen Intervall keine Animation entstehen könnte. Achten Sie darauf, daß im Objektinspector die Voreinstellung Enabled False angewählt ist, damit die Prozedur nicht schon beim Aufruf startet.

Im Beispiel hier wird aus dem kleinen grünen Quadrat ein grosses und aus dem grossen blauen Quadrat ein kleines. Die Positionen - von oben und links - sind invariant.

Shape1.Width := 100; Shape1.Height := 100
Shape2.Width := 25; Shape2.Height := 25

Um mit dem Button die Prozedur zu starten also Timer1.Enabled := True Mehr macht der Knopf nicht! Die Aufgaben des zweiten Buttons erklären sich selber und nun die Prozedur des Timers mit den Definitionen:

Shape1.Width := Shape1.Width + 1; Shape1.Height := Shape1.Height + 1...

...und die der zweiten Form freilich. Der Kern ist aber die Bedingung:

if ( Shape1.Width >= 100 ) OR ( Shape2.Width <= 25 ) then...

Sobald Sie ein Dokument - genauer eine Anwendung in Lazarus - anlegen, sind darin grundlegende Informationen enthalten. Diese Standardklasse heisst dann auch TForm1 und wird nun um eine eigene Klasse ergänzt. Die neue Klasse wird natürlich nicht im Implemetierungs- sondern im Deklarationsteil deklariert!

Die Namen der Variablen wechseln jetzt und werden global deklariert. Dann kommt im Implementierungsteil das Kommando Klasse := TKlasse.Create, um ein Objekt des Typs der Klasse zu erzeugen und nicht nur ungenutzt zu deklarieren.

Nun wird jeder Variablen - hier x und y - eine Klasse zugewiesen ( achten Sie auf die Datentypen ) und diese Variablen werden ausgegeben. Sie können auch mit Edit3.Text := IntToStr(Klasse.b) die Klasse selber ausgeben.

Sehr wichtig: Die Funktion steht im Implementierungsteil und nicht davor. Ferner muss die Klasse immer wie übliche Variablen deklariert werden! Dann wird eine Klasse erzeugt, die das Ergebnis der aufgerufenen Funktion beinhaltet.

Auch hier sind die Variablen global und der Datentyp Integer reicht nun nicht mehr. Er wird als Extended deklariert und ist ein Float bei der Ausgabe.

Kern des Programms ist: Funk.a := mwst( x ) als Definition und die Ausgabe
FloatToStr( Funk.a )

Letztlich löscht Klasse.Free den Speicher der Klasse und ist per se ein Destructor im Gegensatz zu Klasse.Create als Constructor.

Da nur mit dem Wert des Nettopreises gerechnet wird, ist dieses Beispiel besonders übersichtlich geraten.

Dennoch werden entweder eine oder zwei Funktionen aufgerufen. Beide Funktionen gehören jedoch derselben Klasse an, die wie gesagt nur eine Variable hat.

So wird definiert: Funk.a := mwst ( x ) und Funk.a := kund ( x )

Also zwei Funktionen einer Klasse zugehörig. Dann wird per Checkbox entschieden welche der beiden als Klasse ausgegeben werden soll. Und das in separate Felder.

Es ist natürlich sinnlos, zweimal das gleiche Objekt Funk.a auszugeben.

Damit der Text nicht zu lang ausfällt, ruft bereits das Textfeld mit Edit1.Change eine Prozedur auf, die die Zeichen zählt; aber eben alle Zeichen und nicht die gesuchten.
Beachten Sie hier immer den Objektinspector in Lazarus, damit das Textfeld auch als Sender erkannt wird.

Die Länge des Strings namens txt mittels Parameter zu begrenzen hat sich somit erledigt. Wichtig sind aber die Integer und das Ende der for Schleife mit ... to length(txt)

Kern des Programms: if txt [ i ] = sig then inc ( num )

Darin ist das Inkrement inc enthalten, das aufwärts zählt, was nicht immer selbstverständlich ist, da auch ein Dekrement dec möglich ist.

Wenn man etwas ausfüllt, dann sollte ein leeres Textfeld moniert werden. Das funktioniert wie in JavaScript. Dann natürlich die entsprechende Meldung.

Und wenn die Eingabe zu lang ist, dann sollten die Anwender wissen, wieviele Zeichen erlaubt sind und um wieviel der Text zu lang ist; dazu muss gezählt werden. Aber hier mit length ( Textfeld ) und ohne for Schleife.

Im Fokus steht hier zweierlei: a := length ( Edit1.Text ) - 10 für die maximale Eingabe und
y : String [ 10 ] als Deklaration eines zweiten Strings.

Der zweite String wird benutzt, um die maximale Eingabe zu verdeutlichen. Dieser String muss aber - und das ist wichtig - mit demselben Textfeld definiert werden.

Also y := String ( Edit1.Text ) aber die Ausgabe ist dann eine andere Edit3.Text := String ( y )

Importieren Sie erst Math Ferner sind die Datentypen wichtig: b wird als Extended deklariert und als FloatToStr() ausgegeben. Als Basis reicht ein Integer für a

Das Feld für den Output ist hier ein Memo, weil später auch ganze Listen an Potenzen ausgegeben werden könnten. Erst mal nur jeweils eine quadratische Potenz.

Der case ist dazu gedacht, sehr viele unterschiedliche Einzelfälle aufzunehmen. Mit if... else... und ihren Verzweigungen wäre das nur sehr schwer möglich. Allerdings kann der Case keine Zahlen- oder besser Wertebereiche vergleichen. Daher sind hier beide Methoden aufgeführt.

Während die Fälle 0 und 1 nur eine Meldung ausgeben, wird bei 99 Meldung und Rechnung ausgeführt. Dabei begin... end nicht vergessen.

Startseite  |  Hinweise und Impressum  |  Facebook  |  Twitter  |  Google plus