LAZ 4. Das erste RICHTIGE Projekt

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

Hinweis kann nach Kenntnisnahme deaktiviert werden!

  • Hast du die Schritte 1 bis 3 erfolgreich absolviert? Alles einigermaßen geklappt?
    Dann bist du bereit für Schritt 4: Lösche das alte Projekt.. ein Fenster mit einem nutzlosen Button will keiner... ist zwar jetzt etwas hart, aber die Wahrheit!
    So, nachdem du dein altes Projekt von der Platte geputzt hast, fangen wir ein Projekt an, welches etwas sinnvolles erledigt.


    Um ein "brand new project" zu starten ( also neues Projekt a_48_7237538e ), klicke im Systemmenue von Lazarus auf

    PROJEKT-->NEUES PROJEKT-->ANWENDUNG-->OK

    Jetzt sollte wieder eine leere "Form1" erscheinen, wenn nicht, bist du hier fertig... rolling:


    Aufgabe:
    Wir wollen die Zykluszeit bei gegebener Quarzfrequenz und Vorteiler berechnen.
    Quarzfrequenz und Vorteiler soll aus einer Liste wählbar sein.


    ...jetzt müsste man erst mal wissen, was eine "Liste" ist... kleiner Tipp: "Standard" "TComboBox" bitte zwei Stück auf der Form erzeugen (s. Kapitel 3 Button...)
    Für die Ausgabe des Ergebnisses, benötigen wir noch eine Komponente TEdit --> ebenfalls in "Standard" und ebenfalls auf der Form erzeugen.

    Jetzt sollten wir etwa den gleichen Stand haben...
    laz14.png

    Sieht bescheiden aus... also erst einmal die Objekt ein bisschen anordnen und TLabel ("Standard") auf der Form erzeugen.
    laz15.png

    Sieht schon besser aus! Bist du soweit?

    Dann können wir jetzt "Label1" einmal anklicken (selektieren) und im Objektinspektor erscheinen die Eigenschaften von Label1.
    Eine Eigenschaft heißt "Caption". Caption bezeichnet die Eigenschaft der sichtbaren Beschriftung eines Label. (kurz: der Text, den man im Fenster sieht)
    Diese ändern wir jetzt um:
    Label1.caption in "Quarzfrequenz"

    analog Label1:
    Label2.caption in "Vorteiler"

    Label3.caption in Zykluszeit

    so sollte es jetzt aussehen:
    laz16.png


    Projekt speichern!

    Jetzt befüllen wir die "Comboboxen" mit Werten, welche der Anwender später auswählen kann
    laz17.png
    Dazu die Combobox1 selektieren, im Obejektinspektor die Eigenschaft "ITEMS" auswählen (Punkte klicken)
    Nun erscheint Die Eigenschaftsliste der ITEMS von Combobox1.
    Hier geben wir beliebige Quartzfrequenzen z.B. 1000000, 2000000 zeilenweise ein.
    Klick auf "OK" speichert die Werte als Eigenschaft von Combobox1

    Für die Combobox2 wiederholen wir die Schritte und tragen Vorteiler wie 16, 32, 64, 128 usw zeilenweise ein.


    Projekt speichern!

    Jetzt kannst du das Projekt kompilieren und erzeugen (grüner Pfeil...)
    Immerhin kann man jetzt in dem Programm Werte einer Liste auswählen.

    Problem 1:
    Beim Start stehen noch keine Werte in den Auswahlboxen, sondern deren Name --> müssen wir unbedingt ändern.

    Problem 2:
    Im Ausgabefeld steht der Text "Edit1"

    Problem 3:
    es findet keine Berechnung statt

    Diese Punkte hast du sicherlich auch bemerkt, lass uns nun diese Punkte beheben.

    Beende, falls noch nicht geschehen das laufende Programm über das rote Viereck in der Systemleiste oder das X im Programmfenster.
    Schalte in den DESIGNERMODUS.

    zu 1:
    Selektiere Combobox1
    Ändere im Obejktinspektor die Eigenschaft ITEMINDEX auf 0
    Dies bewirkt, dass das erste Element (0 basierender Index!) der Werteliste gezeigt wird.
    wiederhole Schritte für Combobox2.

    zu 2:
    Der anzuzeigende Text in einem TEdit hat den Eigenschaftsnamen "text". Dies kann ein beliebiger String sein (auch leer)

    zu 3:
    Wir müssen uns a) eine Funktion zur Berechnung "bauen" und b) die Berechnung auslösen, falls der Anwender eine Auswahl ändert.

    a)
    Schalte von der DESIGNERANSICHT in den CODEEDITOR
    Hier fügen wir folgende Zeilen ein
    laz18.png


    Die Bedeutung der Zeile 31:

    Hier wird unsere Funktion DEKLARIERT. Dies bedeutet, dass der Compiler, welcher später unser Programm erzeugt, vorher wissen muss, welche Funktionen er kompilieren muss.
    Wir zeigen dem Compiler also an, dass es eine Funktion CALCULATE gibt und wie die Aufruf- und Rückgabeparameter sind.

    Die eigentliche Funktion steht dann ab Zeile 38.

    LAZARUS-Quellcode

    1. function CALCULATE(xtal, divider:integer):double;
    2. begin
    3. result := 1 / (xtal / divider);
    4. end;



    b)
    Jetzt haben wir zwar grundsätzlich die Möglichkeit, die vom Benutzer ausgewählten Werte zu berechnen, aber es passiert nicht!
    Um die Berechnung auszulösen, müssen wir ein EVENT auslösen; also auf ein Ereignis reagieren.
    Selektiere die Combobox1 und schau dir den Objektinspektor an... dort findest du EREIGNISSE (EVENTS).
    Ein Ereignis auf der Objektinspektor Seite trägt den Namen: onChange
    Dieses Ereignis wird jedes mal ausgelöst, wenn der Wert in der Auswahlbox durch den Anwender geändert wird; genau richtig für unser Vorhaben.
    Klicke jetzt doppelt in das noch leere Feld neben "onChange".
    Daraufhin wird automatisch eine Funktion erzeugt, welche bei Diesem Ereignis aufgerufen wird... perfekt!
    In dieser Funktion rufen wir jetzt unsere Berechnung auf und übergen das Resultat der Berechnung in unser Ausgabefeld Edit1:

    LAZARUS-Quellcode

    1. procedure TForm1.ComboBox1Change(Sender: TObject);
    2. begin
    3. Edit1.text := floattostr( CALCULATE( strtoint(Combobox1.Text), strtoint(Combobox2.Text)));
    4. end;


    Wow, was passiert da? ...bisschen viel auf einmal...

    Zunächst nochmal kurz zu unserer Berechnung CALCULATE:
    es handelt sich dabei um eine FUNCTION !
    Merke: Eine Function besitzt einen RÜCKGABEWERT, hingegen eine PROCEDURE keinen Rückgabewert hat!

    Unsere Function CALCULATE besitzt zwei Übergabeparameter (xtal und divider) vom Typ INTEGER und der Rückgabewert ist ein DOUBLE ("Fließkommazahl")
    Die Werte der Auswahlboxen sind einfacher Text! (Combobox1.text, Combobox2.text). Diese Texte (String) müssen wir zu Integer wandeln. Das geht alles recht einfach in Lazarus (Pascal)

    die Funktion dazu lautet: STRTOINT()

    Damit hätten wir den Aufruf erklärt: CALCULATE( strtoint(Combobox1.Text), strtoint(Combobox2.Text))

    Die Rückgabe unserer Funktion CALCULATE ist ein double, welchen wir nicht an die Eigenschaft TEXT übergeben können. Die Eigenschaft TEXT ist vom Typ STRING, das würde der Compiler so nicht hinnehmen.
    Aber zum Glück gibt es wieder eine Funktion, die alles nötige erledigt: FLOATTOSTR()



    Aufgabe:
    Finde nun heraus, wie du die Berechnung auch ausführen kannst, wenn der Vorteiler geändert wird.
    Tipp: Du benötigst dafür KEINE zweite Funktion



    Ich hoffe, du hattest bis hierher Spaß.... wie soll das erst werden, wenn wir richtig spaßige Dinge veranstalten a_217_27b18bee

    zum nächsten Teil: Lazarus für serielle Kommunikation aufrüsten

    Michael Köcher / six1

    4.704 mal gelesen

Kommentare 2

  • six1 -

    Ja, klar. Beim Programmieren am PC geizt man aber in aller Regel nicht mit ein paar Byte... ;)

  • mac5150 -

    geht auch Word statt Integer? xtal und divider können ja nicht negativ sein.