Logo: Geos Online Print Archiv
G.O.P.A. - Geos Online Print Archiv
17.09.2019 Archiv  #  Recherche  #  Links  #  Kontakt  #  Gästebuch  #  Impressum

Index
Register
Login

Die Anzeige des Archivs erfolgt grafisch. Ändern

Kurs: Programmieren (Teil 7)

Autoren: Thomas Haberland, R. Bonse

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.
Das ist natürlich noch nicht das, was wir erreichen wollten, doch hilft uns hier der Textausgabecode CR ( = Carriage Return, Wagenrücklauf) weiter. Der Code bewirkt, daß der nachfolgende Text in der nächsten Textzeile ab dem Inhalt von leftMargin ausgegeben wird. Normalerweise steht hier der Wert 0 drin und der Text würde ohne vorheriges Setzen von leftMargin ab dem linken Bildschirmrand erscheinen. Die Routine SetMargin sichert als erstes die alten Werte von leftMargin und rightMargin. Dann werden die neuen Werte gesetzt. Wir benutzen hier die Label IBOben bis IBRechts, damit beim Ändern der Dialogboxgrenzen auch die Werte von leftMargin und rightMargin mitgeändert werden. Desweiteren geben wir den Text nicht direkt bündig mit den Dialogboxgrenzen aus, sondern lassen jeweils einen Platz von 20 Pixel.

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.
Wir können hier den Wert 0 eintragen, da wir ja den Beginn der Textausgabe durch Setzen des Wertes in leftMargin geregelt haben.
Das nächste Byte gibt die relative y-Koordinate in Pixel an. Hierbei muß man bedenken, daß der Text mit einem CR beginnt und damit eine Textzeile tiefer ausgegeben wird. Schließlich folgt ein Zeiger auf unseren Textstring, der ab dem Label IBText1 steht. Wenn Sie diesen Text näher ansehen, werden Sie feststellen, daß wir kräftig von den Steuercodes für PutChar Gebrauch gemacht haben. Wichtig ist jedoch, daß das erste Byte des Textes ein CR ( = $13) und das letzte Byte die NULL (= $00) enthält. Gibt man als erstes kein CR aus, so wird die erste Zeile verstümmelt ausgegeben, da der linke Rand erst nach dem CR gesetzt wird! Das Nullbyte darf auch nicht vergessen werden, da sonst versucht wird, jedes weitere Byte als auszugebendes Zeichen zu interpretieren, bis zufällig eine 0 folgt.

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

 

Aufruf an ALLE Programmierer(innen):

Wer hat Lust, GEOS Software für die speziellen Bereiche FAX und BTX zu schreiben ?!
Wir meinen, es besteht auch in diesem Bereich Bedarf an guten Programmen !

 

Thomas Haberland

 


 




Dieser Artikel ist Bestandteil von:

Ausgabe 21

! - - - - - M I C R O F I L M - - - - - ! | Editorial | Messebericht CeBIT | Anwendertreffen bei Mart & Technik | Messebericht Hobbytronik | Jahrestreffen GUC | Büro-Kurs (Teil 4) | 1.Bild, erstellt mit GeoPaint | Kurs: Programmieren (Teil 7) | 8 Mhz für den C=64 | Berichte aus den Regional Gruppen | CLI - Command Line Interpreter | GeoThek Informationen | Die neue GeoThek Teil 2 | GeoFile Befehlsmenü | FLOPPY 1581 Bestellung | Mailbox | CeBIT '92 - Anwendertreffen bei Heureka | Grafiken en Masse - Drei Grafiksammlungen | Nur für Spezialisten: Chemie unter GEOS | Neue Programme aus den USA ! | Update - Ja oder Nein ? | Probleme mit DR DOS 6.0 ? | HP Drucker schneller? | HP Deskjet 500 | Fehler im Druckertreiber für Canon Drucker | Faxen mit PC/Geos | Bewegen im Dokument | Viele verschiedene Formate | Druckertip 2 | Die Geos User Post | Der Bildschirm Dumper | Die Rechtschreibprüfung | Druckertip 3 | Quattro Pro Betrachter | Hinweis zu dieser Geos User Post | Tips & Tricks rund um GEOS.INI | Aktuelle Kurz-Infos | PC/Geos Font ID Katalog


Kurs Programmieren

Kurs: Programmieren (Teil 1) | Kurs: Programmieren (Teil 2) | Kurs: Programmieren (Teil 3) | Kurs: Programmieren (Teil 4) | Kurs: Programmieren (Teil 5) | Kurs: Programmieren (Teil 6) | Kurs: Programmieren (Teil 7) | Kurs: Programmieren (Teil 8)


Kurzlink hierhin: http://geos-printarchiv.de/1316


letzte Änderung am 01.01.1970