|
|
|
23.01.2025 | Archiv # Recherche # Links # Kontakt # Gästebuch # Impressum | |
Index Login Die Anzeige des Archivs erfolgt grafisch. Ändern |
Kurs: Programmieren (Teil 7)Wie Sie wahrscheinlich schon bemerkt haben, ist in der vorigen Ausgabe des Programmierkurses eine ordentliche Portion Text zur Besprechung des Quelltextes abhanden gekommen. Wir bitten Sie dafür um Entschuldigung und liefern deshalb in dieser Ausgabe den noch fehlenden Teil nach. Dieser setzt mit dem letzten Abschnitt von Teil 6 (ab SetMargin:) ein. Wir werden in der Dialogbox einige Zeilen Text ausgeben. Benutzt man für jede Zeile die Funktionscodes DBTXTSTR oder DBVARSTR, so muß man auch jedesmal die x und y-Koordinaten ausrechnen und setzen. Will man diese Arbeit umgehen, so bietet sich eine elegantere Lösung durch die Systemvariablen leftMargin ($0035, $0036), rightMargin ($0037, $0038) und dem Textausgabecode CR an. Die erste Systemvariable legt den linken Rand für Textausgaben fest, die zweite den rechten Rand. Gibt man nun über eine Geos-Routine Text aus, so erscheint nur der Teil des Textes, der innerhalb der Ränder liegt. Der Rest wird einfach abgeschnitten. Nun können wir auch den Sinn der Befehlszeile jsr RestoreMargin am Ende der Routine MakeInfoBox erklären. Die Routine setzt die ursprünglichen Werte von left- und rightMargin wieder auf die Werte zurück, die wir in leftMarginOld und rightMarginOld gesichert hatten. Der nächste Funktionscode DBGRPHSTR erwartet einen Zeiger auf eine GraphicsString-Tabelle, die von der Routine GraphicsString abgearbeitet wird. Wir haben mit Hilfe dieses Codes einen doppelten Rahmen in die Box eingezeichnet. Die Tabelle steht ab dem Label IBGraphic und benutzt auch wieder die Label IBOben bis IBRechts zum einzeichnen der Rahmen. Der nächste Funktionscode DBSYSOPV ist besonders gut für Info-Boxen geeignet, da er zur Folge hat, daß bei einem beliebigen Klick die Dialogbox sofort verlassen wird. Man muß also nicht erst lästigerweise auf ein OK-Feld mit der Maus fahren, um die Infobox zu verlassen. Der Funktionscode benötigt auch keine weiteren Parameter. Als nächstes folgt der Code DBTXTSTR, mit dem wir einen Großteil unseres Textes ausgeben. Dem Code muß ein Byte für die relative x-Koordinate (die linke obere Ecke der Dialogbox hat die Koordinaten (0,0)) in Pixel folgen. Den nächsten Zeichenausgabecode DBVARSTR haben wir benutzt, um Ihnen auch die zweite Möglichkeit einer Textausgabe innerhalb einer Dialogbox zu demonstrieren (Es gibt mindestens noch eine weitere Möglichkeit! Welche?). Dem Funktionscode DBVARSTR müssen wieder zwei Bytes für die relativen Koordinaten der Ausgabe folgen. Doch danach steht kein word, das auf einen Text zeigt, sondern nur ein einzelnes Byte. In diesem Byte ist aber das Low-Byte eines Zeigers in der Zeropage vermerkt. Wir haben den Wert a0L eingetragen. Das bedeutet, daß der auszugebende Text ab der Adresse liegt, auf die das word a0( = a0L, a0H) zeigt. Nun läßt sich auch die erste Zeile in der Routine MakeInfoBox erklären. Mit dem Befehl LoadW a0,IBText2 lassen wir a0 auf unseren zweiten auszugebenden Text zeigen. Man kann natürlich anstatt a0 auch andere Register auf der Zeropage benutzen. Es empfiehlt sich aber, nur die Arbeitsregister a0 bis a9 zu benutzen, da andere Register von Unterroutinen verändert werden können. Den Abschluß der Dialogboxtabelle bildet wieder das Nullbyte. Durch die Benutzung der Sytemvariablen leftMargin und rightMargin konnten wir bei der Textausgabe für die relative x-Koordinate eine 0 eintragen und nachfolgende Zeilen wurden durch ein CR richtig in unserer Dialogbox ausgegeben. Die y-Koordinate mußten wir jedoch abschätzen. Erweitern Sie doch bis zur nächsten Ausgabe die Routine SetMargin so, daß auch die obere und untere Begrenzung benutzt wird (Tip windowTop, windowBottom, Ausgabecode HOME). Viel Spaß beim Programmieren, bis zur nächsten Ausgabe
R. Bonse
Kurzlink hierhin: http://geos-printarchiv.de/1316 |
|
Letzte Änderung am 01.11.2019 |