home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Best of German Only 2
/
romside_best_of_german_only_2.iso
/
dos
/
utility
/
bs_pasca
/
handbuch.txt
< prev
next >
Wrap
Text File
|
1993-12-01
|
68KB
|
1,323 lines
****************************************************
* BS-Pascal-Toolbox 2.51 * BS-Pascal-Toolbox 2.51+ *
****************************************************
Die universelle Turbo-Pascal-Toolbox
- Handbuch -
(C) 1992,93 by Boris Sachsenberg, Von-Elm-Weg 8g, D-27476 Cuxhaven
Inhaltsverzeichnis:
1. Vertriebskonzept
1.1 So lassen Sie sich registrieren
1.2 Lizenzbestimmungen
1.3 WICHIGE HINWEISE !
2. Allgemeines zum Programm
2.1 Was ist neu gegenüber Version 2.01 ?
2.2 Die Hilfedateien
3. Übersicht aller Routinen und Units
3.1 Die Unit Check
3.1.1 function Ucase
3.1.2 function Lcase
3.1.3 function Center
3.1.4 function Right
3.1.5 function Left
3.1.6 function DelAllChars
3.1.7 function DelLastChars
3.1.8 function DelFrontChars
3.1.9 function StrToReal
3.1.10 function StrToInt
3.1.11 function DateToStr
3.1.12 function TimeToStr
3.1.13 function Date
3.1.14 function Time
3.1.15 function Using
3.1.16 function Sim
3.2 Die Unit Disk
3.2.1 function DirExist
3.2.2 function DiskLabel
3.2.3 function FileExist
3.2.3 function FileNew
3.2.5 function FreeSpace
3.2.6 function ActPath
3.2.7 function PathToPrg
3.2.8 function CopyFile
3.2.9 function RenameFile
3.2.10 function DeleteFile
3.2.11 function Recurs
3.2.12 function wildcard
3.3 Die Unit Dosx
3.3.1 function shell
3.3.2 function shellwin
3.3.3 procedure boot
3.4 Die Unit Types
3.4.1 Die Typendeklarationen
3.4.2 procedure nothing
3.5 Die Unit Keyboard
3.5.1 Die Tastenkonstanten
3.5.2 procedure SetRate
3.5.3 function GetSKey
3.5.4 function GetKey
3.5.5 procedure EdLine
3.5.6 procedure PutKey
3.6 Die Unit Mouse
3.6.1 const NoMouse
3.6.2 const MouseText
3.6.3 procedure MouseInit
3.6.4 procedure MouseGet
3.6.5 procedure MouseOn
3.6.6 procedure MouseOff
3.6.7 procedure MouseArea
3.6.8 procedure MousePut
3.6.9 procedure ButtonPressed
3.6.10 procedure ButtonReleased
3.6.11 procedure MouseMove
3.6.12 procedure MouseSpeed
3.7 Die Unit Print
3.7.1 function PrinterReady
3.7.2 procedure PrinterReset
3.7.3 procedure FormFeed
3.8 Die Unit Screen
3.8.1 procedure ColorMode
3.8.2 function Color
3.8.3 function inv
3.8.4 function invh
3.8.5 procedure SetCursor
3.8.6 procedure GetCursor
3.8.6 procedure HiddenCursor
3.8.8 procedure NormCursor
3.8.9 procedure BlockCursor
3.8.10 procedure DefaultCursor
3.8.11 procedure Logo
3.9 Die Unit Timer
3.9.1 procedure timeron
3.9.2 procedure timeroff
3.10 Die Unit Windows
3.10.1 Die Fenstervariable
3.10.2 Die Grafikkartenvariablen
3.10.3 Die Relativen Koordinaten
3.10.4 function Openwindow
3.10.5 function Activatewindow
3.10.6 function GetChar
3.10.7 function Getattr
3.10.8 procedure Putattr
3.10.9 procedure PutChar
3.10.10 procedure GetScr
3.10.11 procedure PutScr
3.10.12 function Areasize
3.10.13 procedure Closewindow
3.10.14 procedure Wwrite
3.10.15 procedure Wwritec
3.10.16 procedure changecolors
3.10.17 procedure changecolorsc
3.10.18 procedure scroll
3.10.19 function poswindow
3.10.20 function resizewindow
3.10.21 function changeborder
3.10.22 procedure winclrscr
3.10.23 procedure DrawFrame
3.11 Die Unit Menu (Nur BS-Pascal-Toolbox 2.5+)
3.11.1 Die Farbvariablen
3.11.2 Die Ereignisvariablen
3.11.3 var standstat
3.11.4 const tastproc
3.11.5 procedure addmenu
3.11.6 procedure addsubmenu
3.11.7 procedure addsubmenuline
3.11.8 procedure delmenu
3.11.9 procedure addlist
3.11.10 procedure dellist
3.11.11 procedure addpopmenu
3.11.12 procedure delpopmenu
3.11.13 procedure writestat
3.11.14 procedure runprogram
3.11.15 procedure waitevent
3.11.16 procedure popup
3.11.17 procedure closepopup
3.11.18 procedure addlst
3.11.19 procedure addtext
3.11.20 procedure addbutton
3.11.21 procedure addokbutton
3.11.22 procedure addcancelbutton
3.11.23 procedure addinput
3.11.24 procedure deldialog
3.11.23 function dialog
3.11.25 procedure actualize
3.11.26 procedure initscreen
3.12 Die Unit Bsdialog (Nur BS-Pascal-Toolbox 2.5+)
3.12.1 Das Programm MakeHelp
3.12.2 Die Hilfsvariablen
3.12.3 Die Farbvariablen
3.12.4 function Filebox
3.12.5 procedure msgbox
3.12.6 function yesno
3.12.7 procedure errorbox
3.12.8 procedure inputbox
3.12.9 procedure help
4. Anhang
4.1 ASCII-Zeichencodes
4.2 ASCII-Linienzeichen
1. Vertriebskonzept
Dieses Programm wird nach dem Sharewarekonzept vertrieben.
D.h. Sie als Anwender sind aufgefordert, das vorliegende Programm
in Ruhe zu testen und auszuprobieren.
Gefällt Ihnen das Programm, so müssen Sie vom Programmautor eine
Vollversion erwerben und sich registrieren lassen. Das bietet folgende
Vorteile:
-Die Vollversion enthält keine Shareware-Hinweise
-Sie erhalten ein gedrucktes Handbuch
-Sie bekommen zukünftige Updates billiger
-Sie haben Anspruch auf einen Support, der bei Problemen hilft
-Sie erfüllen den Sinn der Shareware (Nur wenn sich alle Benutzer von
Sharewareprogrammen registrieren lassen, kann sich dieses Konzept durch-
setzen und Sie bekommen weiterhin sehr günstig hochwertige Software, die
vorher ausgiebig getestet werden kann.
Das Programm in der Sharewareversion darf und soll sogar
in unveränderter Form kopiert und an andere weitergegeben werden.
Bitte beachten Sie hierzu auch 1.2 Lizenzbestimmungen.
1.1 So lassen Sie sich registrieren
Nach dem Starten des Programmes erscheint ein Hinweisschirm. Mit W
starten Sie das eigentliche Programm und mit B wird ein Bestell-
formular ausgedruckt, welches Sie dann ausgefüllt an mich schicken
müssen. Alternativ kann auch die Datei BESTELL.TXT von der
DOS-Ebene mit COPY BESTELL.TXT ausgedruckt werden. Wenn Sie keinen
Drucker besitzen, dann lesen Sie bitte die Bestellscheine am
Bildschirm(LIST BESTELL.TXT) und schreiben eine entsprechende
Bestellung mit den dort angegebenen Preisen für Porto/Verpackung und
Disketten. Auch Bestellungen über BTX und Telefon sind möglich (siehe
Bestellschein). Beschreibungen zu den Produkten auf den Bestellscheinen
finden Sie in der Datei PRODUKTE.TXT, die ebenfalls ausgedruckt werden
kann.
1.2 Lizenzbestimmungen
1. Mit dem Benutzen der Software wird der Vertrag anerkannt.
2. Der Vertrag ist zeitlich nicht begrenzt.
3. Ich übernehme für das Programm keine Garantien irgendwelcher Art.
4. Für Schäden, die durch das Programm entstehen haftet ausschließlich der
Lizenznehmer (Sie).
5. Es ist nicht gestattet Kopien der Vollversion anzufertigen und an
andere weiterzugeben! (Die Sharewareversion darf und soll sogar kopiert
und weitergegeben werden
6. Die Vollversion darf zur Zeit nur auf einem einzelnen Rechner
installiert und genutzt werden.
7. Es ist gestattet eine Sicherheitskopie zur eigenen Sicherheit
anzulegen, die aber nicht an dritte Personen weitergegeben werden darf.
8. Das Verändern bzw. Übersetzen des Programmcodes oder des Handbuches ist
nur mit vorheriger ausdrücklicher schriftlicher Genehmigung von mir
gestattet.
9. Die Runtime-Version (bei Menü-Fix & Quiz-Fix) darf NUR vom Lizenznehmer
beliebig kopiert und an Dritte weitergegeben werden. Die Runtime-
Version ist KEINE Freeware, sondern eine Lizenzversion.
10.Alle angegeben Preise sind keine Garantiepreise und dürfen jederzeit
von mir geändert werden.
11.Im Falle einer Preisänderung und einer Bestellung steht es mir frei,
Ihnen das Produkt zum alten Preis zu verkaufen, oder Sie zu informieren
und gegebenenfalls das Geld für schon bezahlte Ware zurückzuerstatten.
12.Besitzer der Vollversion haben Anspruch auf Support, der Ihnen bei
Problemen mit dieser Vollversion behilflich ist. Der Support erfolgt
entweder telefonisch oder schriftlich, wenn vom Lizenznehmer
ausreichend Rückporto beigelegt wurde.
13.Wenn ein Vollversionsbesitzer einen Fehler, der den Programmablauf
wesentlich beeinträchtigt, feststellt, bin ich verpflichtet, ihm
entweder kostenlos eine berichtigte Version zur Verfügung zu stellen,
oder ihm den Kaufpreis zurückzuerstatten.
14.Jeder Besitzer einer Vollversion, der mir eine Formatierte Diskette in
einem ausreichend frankierten Rückumschlag mit seiner Adresse schickt,
bekommt die nach der letzten Stelle der jeweiligen Versionsnummer
neuste Version zugestellt.
1.3 WICHIGE HINWEISE !
1.Aktuelle Hinweise finden sie in der Datei LIESMICH.TXT.
2.Bestellbedingungen, Kosten für Porto/Verpackung und Zahlungs-
möglichkeiten entnehmen Sie bitte dem Bestellschein (Datei BESTELL.TXT).
Sie kann direkt vom Sharewarehinweis aus gedruckt werden). In der
Vollversion liegt der Bestellschein bei.
3.Die Beschreibungen zu den anderen Programmen bzw. Produkten, die mit
dem Bestellschein bestellt werden können, finden Sie in der Datei
PRODUKTE.TXT.
4.Sollte bei Ihnen das Programm nicht funktionieren, haben Sie einen
Fehler im Programm oder im Handbuch entdeckt, vermissen Sie irgendeine
Funktion oder haben Sie Verbesserungsvorschläge für eine neue Version,
dann sollten Sie sich mit mir in Verbindung setzten (Adresse siehe
Titelseite oder Bestellschein)
5.Wenn Sie die telefonische Hotline in Anspruch nehmen wolle, legen Sie
bitte folgendes bereit:
-Ihre Registriernummer (steht auf der Rechnung der Vollversion)
-Ihre AUTOEXEC.BAT und CONFIG.SYS Datei
-Ihre Rechnerkonfiguration (Grafikkarte, Festplatte ?)
6.Dieses Programm entspricht den D.S.-Richtlinien. Die Sharewareversion
dieses Programmes kann bei allen D.S.-Händlern bezogen werden.
Mehr Infos zur D.S.: siehe Datei DSINFO.TXT.
2. Allgemeines zum Programm
Die Pascal-Toolbox wurde zuerst ausschließlich zur eigenen Benutzung
erstellt. Manche Routinen haben Ihren Ursprung in PD-Programmen oder auch
in Listings, die in Zeitschriften veröffentlicht wurden. Manche wurden
auch von Grund auf von mir entwickelt. Alle Routinen wurden jedenfalls von
mir total überarbeitet und zusammengestellt. Das DOS-Window, daß ich in
der Unit Dosx aufgenommen habe, ist ein PD-Programm und stammt
ursprünglich von M. Austermeier. Die BS-Pascal-Toolbox 2.5+ beinhaltet
alle Routinen der BS-Pascal-Toolbox 2.5 und zusätzlich noch die Units
Windows, Menu und Bsdialog, mit deren Hilfe man eine komplette
Fensterverwaltung, Routinen die in direkt in den Bildschirmspeicher
schreiben und eine Toolbox zur Erzeugung SAA ähnlicher Oberflächen erhält.
Preise siehe Datei PRODUKTE.TXT.
2.1 Was ist neu gegenüber Version 2.01 ?
-Abgespeckte Version der Unit Windows auch in der normalen Version
-Unit Timer: Mit dieser Unit ist eine Programmierung von Prozeduren im
Hintergrund möglich. Als Beispielprogramm wird eine Uhr mit Bildschirm-
schoner geliefert.
-Die Unit Global entfällt.
-Unit Types: In dieser Unit sind alle Stringlängen von 1 bis 255 als
Konstanten gespeichert.
-Prozeduren delallchars und dellastchars ersetzen die Prozeduren
dellastspaces und delallspaces.
-procedure delfrontchars. (Wie dellastchars, nur daß voranstehende
Zeichen gelöscht werden.
-function date jetzt auch optional mit Wochentag
-function direxist: Überprüft, ob ein Verzeichnis existiert
-function wildcard: Ersetzt Jokerzeichen in Dateinamen
-procedure edline jetzt umfangreicher und komfortabler
-Leichtere Tastaturabfragen programmierbar, durch Tastenkonstanten
-Komplett neu programmierte Fensterverwaltung:
+Um ein vielfaches schneller, als die alte
+Alle Bugs z.B. bei der Schattenberechnung wurden entfernt
+Neue Scrollprozeduren
-Komfortable Dateiauswahlbox in der +-Version
-Listfelder in Dialogboxen möglich
-Hilfetexte können jetzt durch Scrolling beliebig lang sein
-Unit BSDIALOG liegt jetzt immer im Quelltext vor.
-Neu 2.51: Online-Hilfe (Hilfedateien für THelp bzw. die integrierte
Hilfe von Turbo-Pascal
u.v.a.m.
2.2 Die Hilfedateien
1.Benutzen der Hilfe mit THelp von Turbo-Pascal 6.0:
-Kopieren der Datei BSP.HLP in das Verzeichnis, in welchem sich
THELP.COM befindet.
-Aufrufen von THelp mit THELP/FBSP.HLP.
-Durch Druck auf die 5 im Nummernblock wird die Hilfe aufgerufen. Einen
Überblick über alle Themen erhält man durch Druck auf SHIFT-F1.
2.Ersetzen der alten internen Hilfe von Turbo-Pascal 6.0:
-Ersetzen der Datei TURBO.HLP (Im Turbo-Pascal-Verzeichnis) durch
BSP.HLP (Auf der Toolbox-Diskette)
-Die neue Hilfe kann genauso benutzt werden, wie gewohnt, nur daß jetzt
statt der Standard-Turbo-Pascal-Befehle jetzt alle Befehle der Toolbox
in der Hilfe zu finden sind.
3.Benutzen der Hilfe mit THelp von Borland/Turbo-Pascal 7.0:
-Kopieren der Datei BSP.TPH in das Verzeichnis, in welchem sich
THELP.EXE befindet.
-Aufrufen von THelp mit THELP/FBSP.TPH.
-Durch Druck auf die 5 im Nummernblock wird die Hilfe aufgerufen. Einen
Überblick über alle Themen erhält man durch Druck auf SHIFT-F1.
4.Erweitern der internen Hilfe von Borland/Turbo-Pascal 7.0 (empfohlen)
-Kopieren der Datei BSP.TPH in das Verzeichnis, in welchem sich
TURBO.TPH befindet.
-Anwählen des Menüpunktes Hilfe-Dateien installieren in TP7.
-Button Neu anwählen und die Datei BSP.TPH wählen.
-Die interne Hilfe kann jetzt wie gewohnt weiterbenutzt werden, nur daß
sie jetzt um alle Befehle der Toolbox erweitert wurde.
-Damit die Hilfe auch beim erneuten Aufruf von TP so bleibt, sollte man
noch die Konfiguration mit dem Menüpunkt Optionen-Speichern sichern.
3. Übersicht aller Routinen und Units
Aufbau:
procedure Color(vg,hg:byte); U: SCREEN.TPU B: SCRDEMO.PAS
│ │ └────────┐┌───────┘ │
│ └─────────────┐││┌─────────────────────┘
└──────────────────────┐││││
Prozedur oder Funktion─┘││││
Name────────────────────┘│││
Parameter────────────────┘││
Unit-Datei────────────────┘│
Beispieldatei──────────────┘
3.1 Die Unit Check
function Ucase(st: String):string; U: CHECK.TPU B: STRINGS.PAS
Wandelt einen String in Großbuchstaben um. Auch Umlaute werden beachtet.
writeln(ucase('Hallo Äüö KK ll') ergibt die Ausgabe "HALLO ÄÜÖ KK LL".
function Lcase(st: String):string; U: CHECK.TPU B: STRINGS.PAS
Wandelt einen String in Kleinbuchstaben um. Auch Umlaute werden beachtet.
writeln(ucase('Hallo ÄüÖ KK LL') ergibt die Ausgabe "hallo äüö kk ll".
function Center(st:string;ch:char;
an:byte):string; U: CHECK.TPU B: STRINGS.PAS
Füllt den String st mit an Zeichen ch auf und zentriert ihn.
Center('Hallo Leute','*',30) würde ergeben:"*****Hallo Leute****"
Center('Hugo',' ',20) würde ergeben:" Hugo "
function Right(st:string;ch:char;
an:byte):string; U: CHECK.TPU B: STRINGS.PAS
Füllt den String st mit an Zeichen ch auf und richtet ihn rechtsbündig
aus.
Right('Hallo','*',20) würde ergeben:"***************Hallo"
function Left(st:string;ch:char;
an:byte):string; U: CHECK.TPU B: STRINGS.PAS
Füllt den String st mit an Zeichen ch auf und richtet ihn linksbündig aus.
Left('Hallo','*',20) würde ergeben:"Hallo***************"
Left('═','═',20) würde ergeben:"════════════════════"
function DelAllChars(St:String;cha:char):
String; U: CHECK.TPU B: STRINGS.PAS
Entfernt alle Zeichen cha im String ST.
writeln(delallchars(' Hallo Heino ',' ') würde ergeben:"HalloHeino"
function DelLastChars(St:String;cha:char):
String; U: CHECK.TPU B: STRINGS.PAS
Entfernt alle nachstehenden Zeichen cha im String ST.
writeln(dellastchars(' Hallo Heino ',' ') würde ergeben:" Hallo Heino"
function DelFrontChars(St:String;cha:char):
String; U: CHECK.TPU B: STRINGS.PAS
Entfernt alle voranstehenden Zeichen cha im String ST.
writeln(delFrontchars(' Hallo Heino ',' ') würde ergeben:"Hallo Heino "
function StrToReal(St: String):real; U: CHECK.TPU B: STRINGS.PAS
Wandelt einen String in eine Real-Zahl um.
function StrToInt(St: String):longint; U: CHECK.TPU B: STRINGS.PAS
Wandelt einen String in eine Integer(bzw. Longint)-Zahl um.
function DateToStr(Day,Month,Year,
dayofweek:Word):Str13; U: CHECK.TPU B: STRINGS.PAS
Wandelt das angegebene Datum in einen String um. Wenn dayofweek größer,
als 6 ist, wird der Wochentag weggelassen.
writeln(datetostr(12,10,1993,7)) würde ergeben:"12.10.1993"
writeln(datetostr(12,10,1993,1)) würde ergeben:"Mo,12.10.1993"
function TimeToStr(Hour,Min,Sec: Word):Str8; U: CHECK.TPU B: STRINGS.PAS
Wandelt die angegeben Uhrzeit in einen String um.
writeln(timetostr(12,34,20)) würde ergeben:"12:34:20"
function Date(dayd:boolean):Str13; U: CHECK.TPU B: STRINGS.PAS
Gibt das aktuelle Datum aus. Wenn dayd true ist, wird zusätzlich der
Wochentag mit angegeben.
writeln(date(True)) würde z.B. ergeben: "Mi,01.02.1993"
function Time:Str8; U: CHECK.TPU B: STRINGS.PAS
Gibt die aktuelle Uhrzeit aus.
writeln(time) würde z.B. ergeben: "15:30:21"
function Using(maske:string;wert:real):
string; U: CHECK.TPU B: USING.PAS
Wandelt eine Zahl in einen String um und formatiert sie gemäß der Maske.
Die Maske besteht aus folgenden Steuerzeichen:
# Eine Ziffer. Wenn die Maske weder * noch @ enthält, werden nicht
belegte Stellen als Leerzeichen übergeben. Wenn kein Vorzeichen
angegeben ist, enthalten negative Zahlen links ein -.
@ Eine Ziffer. Nicht belegte Stellen werden als 0 ausgegeben. Wenn die
Maske keine Vorzeichenangabe enthält, dann wird auch kein Vorzeichen
übergeben. Bereits eine einziges @ reicht aus, um den Formatiervorgang
aufzurufen.
* Wie @, nur werden nicht belegte Stellen als * ausgegeben.
+ Ein Vorzeichen. Je nach Stelle wird der Zahl ein Vorzeichen
vorangestellt oder angehängt (Bei negativen zahlen -, bei positiven
Zahlen +)
- Wie +, aber es wird nur bei negativen Zahlen ein Vorzeichen erzeugt, bei
positiven Zahlen wird ein Leerzeichen ausgegeben.
, Letztes Auftreten markiert die Dezimaltrennstelle.
. wie ,
Trennzeichen, daß den beiden anderen untergeordnet ist.
Alle anderen Zeichen werden unverändert an Ihrer Position übernommen.
Beispiele für die Ausgabe sind im Beispielprogramm zu finden.
function Sim(st1,st2:string):byte; U: CHECK.TPU B: SIMULAR.PAS
Stellt fest, an wievielen Stellen sich die Strings st1 und st2 voneinander
unterscheiden.
writeln(sim('Hallo','Hallo')) würde ergeben: 0
writeln(sim('Hallo','Halle')) würde ergeben: 1
writeln(sim('Hallo','Hal lo')) würde ergeben: 1
writeln(sim('Hallo','Han no')) würde ergeben: 3
3.2 Die Unit Disk
function DirExist(name:pathStr):boolean; U: DISK.TPU B: DATEI.PAS
Gibt true zurück, wenn das angegebene Verzeichnis existiert, ansonsten
false.
function DiskLabel(lw:char):string; U: DISK.TPU B: DISKNAM.PAS
Liefert den Namen des Datenträgers im angegebenen Laufwerk zurück.
function FileExist(name:pathStr):boolean; U: DISK.TPU B: DATEI.PAS
Gibt true zurück, wenn die angegebene Datei existiert, ansonsten false.
function FileNew(name:pathStr):byte; U: DISK.TPU B: DATEI.PAS
Gibt 0 zurück , wenn die angegebene Datei nicht angelegt werden kann.
Wenn die Datei bereits existiert, wird 2 zurückgegeben. Wenn die Datei
angelegt werden kann, gibt FileNew 1 zurück.
function FreeSpace(dr:char):longint; U: DISK.TPU B:------------
Gibt den freien Speicherplatz des angegebenen Laufwerks in Kilobyte
zurück. Wenn das Laufwerk nicht existiert hat Freespace den Wert 0.
function ActPath:pathstr; U: DISK.TPU B:VERZEICH.PAS
Gibt das aktuelle Verzeichnis zurück.
function PathToPrg:pathstr; U: DISK.TPU B:VERZEICH.PAS
Gibt das Verzeichnis zurück, in dem sich die Programmdatei befindet.
function CopyFile (old,new:pathstr;
cp:funproc):string; U: DISK.TPU B: RECURS1.PAS
Kopiert die als old angegebene Datei zu der als new angegebenen Datei.
Existiert die als new angegebene Datei bereits, dann wird die Function cp
(Deklaration: funproc=function(fehl:string):boolean;) aufgerufen. Im
String fehl ist der Dateiname der betreffenden Datei enthalten. Gibt
diese Function true zurück, wird die alte Datei überschrieben. Gibt sie
dagegen false zurück, wird der Kopiervorgang abgebrochen. Copyfile gibt
evtl. auftretende Fehlermeldungen als String zurück. Ist der Rückgabe-
string leer, wurde der Kopiervorgang erfolgreich abgeschlossen.
function RenameFile(old,new: pathstr):string;U: DISK.TPU B:------------
Benennt die als old angegebene Datei zu der als new angegebene um. Mit
diesem Befehl ist auch Verschieben von Dateien in andere Verzeichnisse
möglich, allerdings nur auf einem Laufwerk. Rückgabestring siehe Copyfile.
function DeleteFile(name:pathstr):string; U: DISK.TPU B: RECURS2.PAS
Löscht die angegebene Datei. Rückgabestring siehe Copyfile.
function Recurs(var orgpath:pathstr;files:
pathstr;dir:boolean;doproc:proctyp):string; U: DISK.TPU B: RECURS?.PAS
Belegt eine Variable solange mit Dateinamen, solange Dateien, die der
übergebenen Maske entsprechen, gefunden wurden. Dabei durchkämmt die
Prozedur bei Bedarf auch rekursiv ganze Verzeichnisbäume. Die Variablen
müssen folgendermaßen belegt werden:
orgpath Verzeichnis, mit dem begonnen werden soll.
files Maske der zu findenden Dateien (Auch Wildcards, wie * und ? sind
erlaubt.)
dir true: durchsucht auch rekursiv alle Unterverzeichnisse.
false: durchsucht nur, das mit orgpath angegebene Verzeichnis.
doproc Prozedur, die für jede gefundene Datei bzw. jedes gefundene
Verzeichnis aufgerufen wird. Sie ist mit folgenden Parametern
definiert:
procedure(files,dir:string;boaf:boolean);Die Variablen werden wie
folgt übergeben:
files Enthält die gefundene Datei, wenn ein Verzeichnis gefunden
wurde, enthält files einen Leerstring.
dir Enthält das gefundene Verzeichnis, wenn eine Datei gefunden
wurde, enthält dir einen Leerstring.
boaf true: Datei oder Verzeichnis wurden gefunden.
false: Es wurde wieder in das übegeordnete Verzeichnis
zurück gewechselt.
Ich muß leider zugeben, daß die ganze Prozedur etwas umständlich geraten
ist, aber ich wußte nicht, wie man diese Problem auf effektivere Weiße
lösen kann.
Zum besseren Verständnis empfehle ich auf alle Fälle, die 3
Beispielprogramme recurs1, recurs2 und recurs3 auch im Einzelschrittmodus
auszuführen und die Variableninhalte anzeigen zu lassen. Rückgabestring
siehe Copyfile.
function wildcard(org,muster:pathstr):
pathstr; U: DISK.TPU B: TESTW.PAS
Gibt den Vollständigen Dateinamen, der sich aus dem Muster muster, das
Jokerzeichen wie * und ? enthalten darf und dem Originaldateinamen org er-
gibt.
wildcard('C:\SW60\WRITER.EXE','*.BAK') würde "C:\SW60\WRITER.BAK" ergeben.
3.3 Die Unit DosX
function shell(command:string):byte; U: DOSX.TPU B: SHELL.PAS
Führt den als Argument angegebenen DOS-Befehl aus oder ruft die angegebene
Programmdatei auf. Im Unterschied zur Standardprozedur Exec muß der Heap
vorher nicht mit $M begrenzt werden; vielmehr wird der gesamte zur Zeit
des Aufrufes zur Verfügung stehende Heap-Speicher dem aufzurufenden
Programm zugeteilt. Gibt Shell als Funktionsergebnis 0 aus, dann ging
alles glatt. Andernfalls ist einer der folgenden in Konstanten
definierten Fehler aufgetreten:
nomemory =1; {Nicht genug Speicher frei}
internerror =2; {Interner Fehler}
memoryerror =3; {Speicherfehler}
unknownerror=4; {Unbekannter Fehler}
nostart =5; {Angegebenes Kommando ist ungültig}
function shellwin(x1,y1,x2,y2:byte;
command:string):byte; U: DOSX.TPU B:SHELLWIN.PAS
Shellwin basiert auf dem DOS-Window von M. Austermeier. Ich habe es in
meine Toolbox aufgenommen, damit der Aufruf durch eine einzige Prozedur
vereinfacht und mein erweiterter Shell-Befehl unterstützt wird. Alle
Ausgaben, die das Programm über die entsprechenden DOS-Funktion auf den
Bildschirm schreiben, werden in das durch die Koordinaten anzugebende
Fenster umgeleitet. Rückgabewerte siehe shell.
procedure boot(ks:boolean); U: DOSX.TPU B:------------
Führt einen Neustart des Rechners aus. Ist ks=true, dann wird ein Kalt-
start ausgeführt, andernfalls ein Warmstart.
3.4 Die Unit Types
Die Typendeklarationen U: TYPES.TPU B:------------
In der Unit types sind folgende Typen vereinbart, die von verschiedenen
anderen Units benötigt werden:
str1=string[1] ... str254=string[254] {Stringtypen der verschiedenen
Längen}
soc=set of char; {Wird von KEYBOARD benötigt}
proctype=procedure; {Prozedurvariable}
procedure nothing; U: TYPES.TPU B:------------
Dummy Prozedur, die nichts macht. Sie wird u.a. von MENU benötigt.
3.5 Die Unit Keyboard
Die Tastenkonstanten U:KEYBOARD.TPU B:------------
const
F1= #0#59; ALT_F1= #0#104; CTRL_F1= #0#94; SHIFT_F1= #0#84;
F2= #0#60; ALT_F2= #0#105; CTRL_F2= #0#95; SHIFT_F2= #0#85;
F3= #0#61; ALT_F3= #0#106; CTRL_F3= #0#96; SHIFT_F3= #0#86;
F4= #0#62; ALT_F4= #0#107; CTRL_F4= #0#97; SHIFT_F4= #0#87;
F5= #0#63; ALT_F5= #0#108; CTRL_F5= #0#98; SHIFT_F5= #0#88;
F6= #0#64; ALT_F6= #0#109; CTRL_F6= #0#99; SHIFT_F6= #0#89;
F7= #0#65; ALT_F7= #0#110; CTRL_F7= #0#100; SHIFT_F7= #0#90;
F8= #0#66; ALT_F8= #0#111; CTRL_F8= #0#101; SHIFT_F8= #0#91;
F9= #0#67; ALT_F9= #0#112; CTRL_F9= #0#102; SHIFT_F9= #0#92;
F10= #0#68; ALT_F10= #0#113; CTRL_F10= #0#103; SHIFT_F10= #0#93;
F11= #0#133; ALT_F11= #0#139; CTRL_F11= #0#137; SHIFT_F11= #0#135;
F12= #0#134; ALT_F12= #0#140; CTRL_F12= #0#138; SHIFT_F12= #0#136;
PgUp= #0#73; CTRL_PgUp= #0#132; Up= #0#72;
PgDn= #0#81; CTRL_PgDn= #0#118; Down= #0#80;
Pos1= #0#71; CTRL_Pos1= #0#119; Lft= #0#75; CTRL_Lft= #0#115;
Ende= #0#79; CTRL_Ende= #0#117; Rght= #0#77; CTRL_Rght= #0#116;
Einfg=#0#81; CTRL_EINFG= #0#4; Entf= #0#83; CTRL_ENTF= #0#6;
Back = #8; CTRL_back = #127; CTRL_Druck= #0#114;
ENTER= #13; CTRL_ENTER= #10; TAB= #9; SHIFT_TAB= #0#15;
ESC= #27; LEER= #32;
ALT_A= #030; CTRL_A= 1; ALT_N= #0#49; CTRL_N= #14;
ALT_B= #18; CTRL_B= 2; ALT_O= #0#24; CTRL_O= #15;
ALT_C= #0#46; CTRL_C= 3; ALT_P= #0#25; CTRL_P= #16;
ALT_D= #0#32; CTRL_D= 4; ALT_Q= #0#16; CTRL_Q= #17;
ALT_E= #0#18; CTRL_E= 5; ALT_R= #0#19; CTRL_R= #18;
ALT_F= #0#33; CTRL_F= 6; ALT_S= #0#31; CTRL_S= #19;
ALT_G= #0#34; CTRL_G= 7; ALT_T= #0#21; CTRL_T= #20;
ALT_H= #0#35; CTRL_H= 8; ALT_U= #0#22; CTRL_U= #21;
ALT_I= #0#23; CTRL_I= 9; ALT_V= #0#47; CTRL_V= #22;
ALT_J= #0#36; CTRL_J= 10; ALT_W= #0#17; CTRL_W= #23;
ALT_K= #0#37; CTRL_K= 11; ALT_X= #0#45; CTRL_X= #24;
ALT_L= #0#38; CTRL_L= 12; ALT_Y= #0#21; CTRL_Y= #25;
ALT_M= #0#50; CTRL_M= 13; ALT_Z= #0#44; CTRL_Z= #26;
procedure SetRate(ansp,wied:byte); U:KEYBOARD.TPU B: SETRATE.PAS
Stellt die Ansprechzeit der Tastatur und die Wiederholrate ein.
Die Ansprechzeit (ansp) darf einen Wert von 0-3 (in ms) annehmen,
die Wiederholrate(wied) einen Wert von 0-31.
function GetSKey:byte; U:KEYBOARD.TPU B: TASTEN.PAS
Ermittelt den Status der Sondertasten. Die Sondertasten sind im
Interface-Teil als Konstanten deklariert. Sondertaste and Getskey >0
bedeutet, daß die entsprechende Taste gedrückt wird, bzw. aktiv ist.
Konstanten:
shift_L=2; shift_R=1; alt =8; ctrl =4;
Scroll =16; ins =128; caps =64; num =32;
function GetKey:str2; U:KEYBOARD.TPU B: TASTEN.PAS
Überprüft, ob eine Taste gedrückt wurde. Wenn ja dann ist der erste
Buchstabe, das ASCII-Zeichen der gedrückten Taste. Wenn eine Sondertaste
gedrückt wurde, dann ist das erste Zeichen #0 und das zweite Zeichen
enthält den erweiterten Tastaturcode. Alle Tastaturcodes sind im Anhang zu
finden.
procedure EdLine (x,y,attr,lang,typ:byte;ul:
byte;var edln:string;var xc:byte;sol:soc;
texo,texa:asz;p:byte); U:KEYBOARD.TPU B: EDTEST.PAS
Ein String wird editiert. Dabei wird die Maus unterstützt. Mausklick
innerhalb des Eingabefeldes bewirkt, daß der Cursor an diese Stelle kommt.
Mausklick ober halb der Eingabefeldes hat die gleiche Bedeutung wie Taste
Up und Mausklick unterhalb des Eingabefeldes hat die gleiche Wirkung wie
Taste down.
x,y Gibt die Position des Eingabefeldes an.
xc Variable, die die augenblickliche Cursorposition im String angibt.
Ist xc=0, dann wird der Cursor an das Ende des Strings gesetzt.
attr Gibt die Zeichenfarbe des Eingabefeldes an. Kann komfortabel über
die function color (UNIT Screen) angegeben werden)
lang Gibt die Länge des Eingabefeldes an.
typ Eingabetyp: Wird durch die folgenden Konstanten bestimmt, die auch
durch Addition miteinander kombinierbar sind.
Normal =1; {Normale Eingabe}
Pasword =2; {Alle Zeichen werden nur durch ein * am Bildschirm
angezeigt.}
Upchars =4; {Alle Buchstaben werden in Großbuchstaben umgewandelt}
Delfst =8; {Der Vorgabestring wird zuerst invertiert angezeigt.
Wird jetzt ein neues Zeichen eingegeben, wird die
Vorgabe gelöscht und nur das neue Zeichen übernommen.
Danach kann normal weitereditiert werden. Wird dagegen
zu Anfang eine andere Taste (z.B. Backspace oder Left)
gedrückt, verschwindet die Invertierung und es kann
sofort normal weitereditiert werden.}
Datest =16;{Nur Datumsangaben sind zulässig}
Timest =32;{Nur Zeitangaben sind zulässig}
ul Gibt die Länge des zu editierenden Strings an. ist ul> la dann wird
gescrollt.
edln Zu editierender String.
sol Gibt eine Menge aller erlaubten Zeichen an. enthält sol nur #0, wird
also mit [#0] angegeben, dann sind alle Zeichen erlaubt. Sollen
dagegen z.B. nur zahlen als Eingabe zulässig sein, dann müsste sol
mit ['0'..'9'] angegeben werden.
texa Tasten, bei deren Auslösung das Editieren beendet werden soll. Die
texo Tasten werden in einem Array[0..10] mit Komponenten vom Typ str2
übergeben. Für die Tastendefinitionen werden am besten die
Konstanten, die in der UNIT Keyboard definiert sind verwendet. Wird
eine Taste betätigt, die in texo angegeben ist, wird das Editieren
beendet und edln enthält den aktuellen Editierstring. Wird eine
Taste, die in texa angegeben ist, wird ebenfalls das Editieren
abgebrochen, nur das edln dann nicht den aktuellen String, sondern
den Inhalt besitzt, den es vor dem Edline-Aufruf hatte. Die Strings
werden am besten so belegt:
const texo:asz=('',up,down,enter,'','','','','','','');
texa:asz=('',esc,'','','','','','','','','');
Das erste Feld darf nie belegt werden. Werden weniger, als 10 Tasten
definiert, muß das Array mit Leerstrings aufgefüllt werden.
p Bei 2 bleibt das Pulldown-Menü beim Editieren aktiv, bei 0 nicht.
Hat nur Wirkung in der BS-Pascal-Toolbox 2.5+.
procedure putkey(keypuffer: string); U:KEYBOARD.TPU B: PUTKEY.PAS
Schreibt den String keypuffer sind in den Tastaturpuffer. Tastencodes
werden innerhalb des Strings mit #[Tastencode] bzw. #0#[erweiterter
Tastencode] angegeben. Die Tastencodes sind im Anhang zu finden.
Anmerkung: Es dürfen höchstens 15 Tasten in den Tastaturpuffer
geschrieben werden.
Putkey('Hallo#13') würde Hallo und die Taste ENTER in den Tastaturpuffer
schreiben.
Putkey('#0#59#27') würde die Tasten F1 und ESC in den Tastaturpuffer
schreiben.
3.5 Die Unit Mouse
const NoMouse:Boolean=true; U: MOUSEE.TPU B: MT.PAS
Die Konstante hat den Wert true, wenn entweder noch nicht MouseInit
aufgerufen wurde, oder wenn keine Maus installiert ist. Alle Routinen in
der Unit Mouse, ausgenommen natürlich MouseInit werden nicht ausgeführt,
wenn Nomouse=true ist.
const MouseText:Boolean=true; U: MOUSEE.TPU B: MT.PAS
Wenn diese Typisierte Konstante auf true gesetzt ist, werden die
Mauskoordinaten automatisch in die richtigen Koordinaten für den
Textmodus umgerechnet. Soll die Unit Mouse dagegen im Grafikmodus
eingesetzt werden, dann muß die Konstante auf false gesetzt werden.
procedure MouseInit; U: MOUSE.TPU B: MT.PAS
Initialisiert die Maus.
procedure MouseGet(var x,y,k:integer); U: MOUSE.TPU B: MT.PAS
Ermittelt in den Variablen x und y die aktuelle Mausposition.
Die Variable K enthält den Zustand der Mausknöpfe:
k and 1 > 0 = linke Taste gedrückt.
k and 2 > 0 = rechte taste gedrückt.
k and 4 > 0 = mittlere Taste gedrückt.
procedure MouseOn; U: MOUSE.TPU B: MT.PAS
Macht den Mauszeiger sichtbar.
procedure MouseOff; U: MOUSE.TPU B: MT.PAS
Macht den Mauszeiger unsichtbar.
procedure MouseArea(X1,Y1,X2,Y2:integer); U: MOUSE.TPU B: MT.PAS
Schränkt den Bewegungsraum der Maus auf das Rechteck, das mit den vier
Koordinaten x1,y1,x2,y2 bestimmt wird ein.
procedure MousePut(X,Y:integer); U: MOUSE.TPU B: MT.PAS
Setzt die Maus an die Position x,y.
procedure ButtonPressed(But:integer;
VAR x,y,b,Count:integer); U: MOUSEE.TPU B:------------
Gibt die Werte zurück, die beim letzten Drücken den in But angegebenen
Mausknopf gegeben waren.
But 0=linker Knopf, 1=rechter Knopf
Die Prozedur gibt folgende Werte zurück:
x,y Mausposition beim Drücken von dem Mausknopf in But
b Momentaner Mausbuttonstatus (vgl. MausPos)
Count Wie oft der MausKnopf But seit dem letzten Aufruf gedrückt wurde.
procedure ButtonReleased(But: integer;
VAR x,y,b,Count: integer); U: MOUSEE.TPU B:------------
Wie ButtonPressed, nur daß hier das Loslassen des Knopfes registriert wird
procedure MouseMove(var x,y:integer); U: MOUSEE.TPU B:------------
Gibt die X/Y-Bewegung seit dem letzen Aufruf in die Variablen x und y
zurück.
procedure MouseSpeed(sx, sy : integer); U: MOUSEE.TPU B: MT.PAS
Verändert die Empfindlichkeit der Maus.
sx sx/100 inch entsprechen acht Pixel Mausbewegung horizontal
sy sy/100 inch entsprechen acht Pixel Mausbewegung vertikal
3.6 Die Unit Print
function PrinterReady:boolean; U: PRINT.TPU B:PRINTEST.PAS
Wenn der Drucker bereit ist Daten zu empfangen, wird true zurückgegeben,
ansonsten false.
procedure PrinterReset; U: PRINT.TPU B:PRINTEST.PAS
Führt einen Rest auf dem Drucker aus.
procedure FormFeed; U: PRINT.TPU B:PRINTEST.PAS
Führt einen Seitenvorschub (Form Feed) auf dem Drucker aus.
3.7 Die Unit Screen
procedure ColorMode(INTENS:BOOLEAN); U: SCREEN.TPU B: SCRDEMO.PAS
Wenn Colormode(true) aufgerufen wird, dann können für die
Hintergrundfarbe auch die Attribute 8-16 gesetzt werden, allerdings ist
dann keine blinkende Schrift mehr möglich. Mit Colormode(false) wird der
Vorgang wieder rückgängig gemacht.
function Color(vg,hg:byte):byte; U: SCREEN.TPU B: SCRDEMO.PAS
liefert den Farbwert, der sich aus der angegeben Textfarbe (vg) und
Hintergrundfarbe (hg) ergibt. Um die aktuelle Farbe zu ändern muß
Textattr:=color(vg,hg); eingegeben werde.
Um in der Pascal-Toolbox 2.00+ die Farben für verschiedene Bildelemnte zu
verändern, wird die Funktion vor allem gebraucht.
function inv(at:byte):byte; U: SCREEN.TPU B:------------
Liefert den invertierten Farbwert des Farbwertes at zurück. Beispiel
textattr:=inv(textattr) invertiert die aktuelle Farbe, dh. Textfarbe und
Hintergrundfarbe werden getauscht.
function invh (at1,at2:byte):byte; U: SCREEN.TPU B:------------
Liefert einen neuen Farbwert,wobei die Hintergrundfarbe aus der Textfarbe
vom Attribut at1 und die Textfarbe aus der Textfarbe vom Attribut at2
gebildet wird.
procedure SetCursor(anf,en:byte); U: SCREEN.TPU B: CURSOR.PAS
Setzt die Oberzeile (anf) und die Unterzeile (en) des Cursors neu.
procedure GetCursor(Var anf,en:byte); U: SCREEN.TPU B: CURSOR.PAS
Ermittelt die aktuelle Cursorform. anf=Oberzeile und en=Unterzeile.
procedure HiddenCursor; U: SCREEN.TPU B: CURSOR.PAS
Macht den Cursor unsichtbar.
procedure NormCursor; U: SCREEN.TPU B: CURSOR.PAS
Stellt den normalen Strichcursor her.
procedure BlockCursor; U: SCREEN.TPU B: CURSOR.PAS
Stellt einen Blockcursor her.
procedure DefaultCursor; U: SCREEN.TPU B: CURSOR.PAS
Stellt den Cursor wieder her, der vor dem Start des Programmes gesetzt
war.
procedure Logo(x,y:Integer;Wort:String;
cha:char); U: SCREEN.TPU B: SCRDEMO.PAS
Gibt den String wort ab den Koordinaten x und y mit Großbuchstaben aus,
die aus dem Zeichen cha gebildet werden.
3.9 Die Unit Timer
procedure timeron(handler:proctype); U: TIMER.TPU B: BLDSCH.PAS
Ruft die Prozedur handler über den Timerinterrupt 18.2* in der Sekunde
auf. Mit Hilfe dieser Prozedur ist es möglich einfache Hintergrund-
prozesse, wie z.B. eine Uhr oder Bildschirmschoner laufen zu lassen. Ein
Anwendungsbeispiel finden Sie im Programm BLDSCH.PAS.
procedure timeroff; U: TIMER.TPU B: BLDSCH.PAS
Stellt den Originalinterrupt wieder her und Unterbricht die Ausführung der
durch timeron angegebenen Hintergrundprozedur.
3.8 Die Unit Windows
Alle Prozeduren, die mit + gekennzeichnet sind, sind nur in der +-Version
enthalten.
Die Fenstervariable +U: WINDOWS.TPU B: WINDEMO.PAS
const w : WIPTR = nil;
Pointervariable, die auf ein Record verweist, in dem die Daten
des aktuellen Fensters festgehalten werden:
x1,y1,x2,y2 Koordinaten des Fensters
sx,sy Schattenbreite/Länge
cx,cy Cursorposition vor dem öffnen des Fensters
ca,cu Cursorform vor dem Öffnen des Fensters
border Rahmenwerte
handle Nummer des Fensters
puffer Bildschirm unter dem Fenster
lastwin,nextwin: Verweis auf weitere Fenster
Die Grafikkartenvariablen U: WINDOWS.TPU B:------------
Die folgenden Variablen werden alle durch eine INIT-Prozedur direkt nach
dem Start des Programmes belegt.
Colmod:boolean; Wenn colmod=true, dann ist in dem Computer eine Farb-
Grafikkarte installiert, ansonsten nur eine Monochrome Karte.
VioKarte:byte; Ist mit einer der folgenden Konstanten belegt:
MDA = 0; CGA = 1; EGA = 2; EGA_MONO = 3;
VGA = 4; VGA_MONO = 5; MCGA = 6; MCGA_MONO = 7;
AnzLine, AnzCol:byte; Geben die Anzahl der Bildschirmzeilen und Spalten
an.
Die Relativen Koordinaten +U: WINDOWS.TPU B: WINDEMO.PAS
const rx:byte =0; ry:byte =0;Bei den Prozeduren wwrite, wwritec,scroll,
changecolors, changecolorsc werden zu den angegebenen Koordinaten immer
rx bzw. ry hinzuaddiert. So ist es durch die folgenden Befehle nach
openwindow möglich, daß alle Koordinaten der oben erwähnten Prozeduren
relativ zum aktuellen fenster angegeben werden: rx:=w^.x1;ry:=w^.y1;
Um wieder absolute Koordinaten zu verwenden müssen rx und ry einfach
wieder auf 0 gesetzt werden.
function Openwindow (x1,y1,x2,y2,sx,sy:
byte;border:word;attr,attrt:byte;title:
str132):integer; +U: WINDOWS.TPU B: WINDEMO.PAS
Öffnet ein neues Fenster mit den Koordinaten x1,y1,x2,y2. sx und sy geben
die Breite und Länge des Schattens an, der aber nur gezeichnet wird, wenn
border den Wert shadow enthält.Border kann zusätzlich zu den Werten für
den Rahmen (siehe procedure drawframe) noch die Werte 256 (CONST Shadow)
UND 512 (const CLEARWINDOW). Wenn shadow gesetzt ist, erhält das fenster
einen Schatten. Wenn clearwindow gesetzt ist, wird der Fensterinhalt nach
dem Aufruf von Openwindow gelöscht. attr enthält die Farbwerte für den
Rahmen und den Fensterhintergrund. attrt definiert die Farbe des
Fenstertitels. Title schließlich legt den Fenstertitel fest. Wenn title
ein Leerstring übergeben wird, wird kein Titel verwendet. Openwindow gibt
als Funktionswert entweder -1 (CONST winopenerror), wenn das fenster nicht
geöffnet werden konnte oder aber die Nummer des neuen Fensters zurück.
function ActivateWindow(key:integer):boolean;U: WINDOWS.TPU B: WINDEMO.PAS
Bringt das mit key angegebene Fenster in den Vordergrund. Key ist der
Funktionswert, der von Openwindow zurückgegeben wurde. Wenn das Fenster
nicht nach vorne geholt werden konnte, gibt activatewindow false zurück,
ansonsten true.
function GetChar (x,y:byte ):char; U: WINDOWS.TPU B:------------
Liefert das Zeichen an der Bildschirmposition x,y zurück.
function Getattr (x,y:byte ):byte; U: WINDOWS.TPU B:------------
Liefert die Farbe an der Bildschirmposition x,y zurück.
procedure Putattr (x,y,attr:byte ); U: WINDOWS.TPU B:------------
Färbt das Zeichen an der Position x,y mit der Farbe attr.
procedure PutChar (x,y,attr:byte;ca: U: WINDOWS.TPU B:------------
char);
Setzt an die Stelle x,y das Zeichen ca mit der Farbe attr.
procedure Getscr(x1,y1,x2,y2:byte;
bufptr:pointer); U: WINDOWS.TPU B: BLDSCH.PAS
Speichert den Bildschirmausschnitt, der durch die Koordinaten x1,y1,x2,y2
angegeben wird in der Pointervariablen bufptr.
ACHTUNG: Größe von bufptr bitte vorher mit Areasize ermitteln und mit
Getmem genügend Speicher reservieren.
procedure PutScr(x1,y1,x2,y2:byte;
p:bufptr); U: WINDOWS.TPU B: BLDSCH.PAS
stellt einen Bildschirmausschnit wieder her. Arbeitet analog zu GetArea.
function Areasize(x1,y1,x2,y2:byte):word; U: WINDOWS.TPU B:------------
Berechnet den benötigten Speicherplatz einer Pointervariablen, in der der
angegebene Bildschirmausschnitt gespeichert werden soll.
procedure CloseWindow; +U: WINDOWS.TPU B: WINDEMO.PAS
Schließt das aktuelle Fenster.
procedure Wwrite(x,y,attr:byte; st:str132); U: WINDOWS.TPU B: WINDEMO.PAS
Schreibt den String st an der Position x,y direkt in den
Bildschirmspeicher. Die Zeichenfarbe wird mit attr bestimmt.
Siehe auch: Die Relativen Koordinaten.
procedure Wwritec(x,y,attr1,attr2:byte;
st:str132); U: WINDOWS.TPU B:------------
Arbeitet wie wwrite, mit dem Unterschied, daß der Buchstabe in einem
String, vor dem ein ^ steht mit der Farbe attr2, der restliche String mit
Farbe attr1 gezeichnet wird.
Siehe auch: Die Relativen Koordinaten.
procedure changecolors (x,y,attr,la:byte); U: WINDOWS.TPU B:------------
färbt den Bereich ab der Position x,y mit der Länge la mit der Farbe attr
ein. Sonst wie wwrite.
Siehe auch: Die Relativen Koordinaten.
procedure changecolorsc (x,y,attr1,attr2,
la,pc:byte); U: WINDOWS.TPU B:------------
Arbeitet wie changecolors, nur daß der Buchstabe, der auf der Position pc
steht mit der Farbe attr2 versehen wird, der übrige Bereich mit attr1.
Siehe auch: Die Relativen Koordinaten.
procedure scroll (x1,y1,x2,y2,attr,
anz,dir:byte); +U: WINDOWS.TPU B: WINDEMO.PAS
Verschiebt den Bildschirmausschnitt, der durch die Koordinaten x1,y1,x2,y2
angegeben wird um anz Zeilen bzw. Spalten in die Richtung dir. Dir wird
durch eine der folgenden Konstanten definiert:
leftm=1;{Nach links} rightm =2; {Nach rechts}
topm =3;{nach Oben} bottomm=4; {Nach unten}
Der freiwerdende Bereich wird mit der Farbe attr gelöscht. Wenn attr=255
(CONST NO_CLEAR), dann wird der Bereich nicht gelöscht.
Siehe auch: Die Relativen Koordinaten.
function poswindow (x,y:byte ):boolean;+U: WINDOWS.TPU B: WINDEMO.PAS
Setzt das aktuelle Fenster an die Position x,y.Rückgabewert: true=Alles OK,
false=Fenster konnte nicht verschoben werden.
function resizewindow (a,b,c,d,attr,attrt:
byte;title:str132):boolean; +U: WINDOWS.TPU B: WINDEMO.PAS
Vergrößert, bzw. verkleinert das aktuelle Fenster mit den neuen
Koordinaten a,b,c,d. Dabei wird der Rahmen neu mit dem Titel title und
der Farbe attrt gezeichnet. Wird das fenster vergrößert, wird der neue
Fensterraum mit der Farbe attr gelöscht, wenn die Border-Variable des
Fensters den Wert clear_window enthält. Der Fensterbereich, der innerhalb
des alten und des neuen Rahmens liegt, bleibt erhalten.
function changeborder (bord:word;attr,
attrt:byte;title:str132):boolean; +U: WINDOWS.TPU B: WINDEMO.PAS
Zeichnet das Fenster mit den angegeben Parametern (siehe Openwindow) neu.
Der Fensterinhalt bleibt bestehen.
procedure winclrscr; +U: WINDOWS.TPU B: WINDEMO.PAS
Löscht den Inhalt des aktuellen Fensters.
procedure DrawFrame(x1,y1,x2,y2,border,
attr,attrt:byte;title:string); +U: WINDOWS.TPU B:------------
Zeichnet einen Rahmen mit dem Titel title und den angegeben Koordinaten.
attr gibt die Farbe des Rahmens, attrt die des Titels an.
Border enthält eine Kombination der folgendes Konstanten:
const doubletop =1;
doubleright =2;
doublebottom =4;
doubleleft =8;
doubleall =15;
simpleall =0;
noframe =16;
centertitle =32;
titleline =64;
notitleframe =128;
Beispiel border:=simpleall+notitleframe
border:=doubletop+doublebottom+centertitle
border:=doubleall
3.11 Die Unit Menu (Nur BS-Pascal-Toolbox 2.5+)
Die Farbvariablen U: MENU.TPU B:BSP_PLUS.PAS
Farbwerte können leicht mit der function color (Unit screen) ermittelt
werden.
nor, {Normaler Text}
men,menh, {Menü, Menühotkey}
tit, {Titel}
txtfen,txtfenh,{Fenstertext, Fenstertexthotkey}
ttlfen, {Fenstertitel}
buta,butah, {Aktiver Button, Aktiver Buttonhotkey}
buti,butih, {Inaktiver Button, Inaktiver Buttonhotkey}
butd,butdh, {Defaultbutton, Defaultbuttonhotkey}
eina,eini: {Aktive Eingabezeile, Inaktive Eingabezeile}
Die Ereignisvariablen U: MENU.TPU B:BSP_PLUS.PAS
mk,mx,my beinhalten den zuletzt ermittelten Status der Maus: mk=Mausknopf
mx,my=Mauskoordinaten
c enthält die zuletzt gedrückte Taste.
var standstat:string; U: MENU.TPU B:BSP_PLUS.PAS
Der Text, der in der Variable standstat enthalten ist, wird beim Start
des Programmes und nach anderen Statuszeilen, die von internen Routinen
angezeigt werden, in die Statuszeile geschrieben.
const tastproc:proctyp=nothing; U: MENU.TPU B:BSP_PLUS.PAS
Diese Prozedur wird immer nach der Aktualisierung der variable c
aufgerufen, um eventuell eigene Prozeduren, bei Druck einer bestimmten
Taste aufzurufen. die Prozedur, wie natürlich auch alle andern, die durch
eine Variable aufgerufen werden, muß als far deklariert werde.
Beispiel (Ruft bei Druck auf F1 die Help-Prozedur auf)
tastproc:=bsptast;
procedure bsptast;far;
begin
if c=#0#59 then begin help;c:='';end;
end;
procedure addmenu(nam,sta:str132); U: MENU.TPU B:BSP_PLUS.PAS
Fügt einen neuen Menüpunkt in die Pulldown-Menüleiste ein.
nam Name des Eintrages
sta Text, der in der Statuszeile angezeigt wird.
Der Buchstabe nach einem ^ im Namen wird hervorgehoben.
procedure addsubmenu(nam,sta,neu:str132;
pron:proctyp); U: MENU.TPU B:BSP_PLUS.PAS
Fügt einen neuen Untermenüpunkt ein. Wenn neu belegt ist, bleibt das Menü
offen und der Eintrag wird durch neu ersetzt. bei nochmaligem Aufruf wird
wieder der Originaleintrag gesetzt. Beim Aufruf wird immer die Prozedur
pron aufgerufen.
procedure addsubmenuline; U: MENU.TPU B:BSP_PLUS.PAS
Fügt eine Unterteilungslinie im Untermenü ein.
procedure delmenu; U: MENU.TPU B:------------
Löscht alle vorher gemachten Pulldownmenüeinträge. Das Menü kann neu
definiert werden.
procedure addlist(var fl,al:lsy;nam:str132); U: MENU.TPU B:BSP_PLUS.PAS
Fügt einer Listbox, die in den Variablen fl und al gespeichert ist einen
neuen Eintrag name hinzu.al und fl müssen vorher mit dem Typ lsy
deklariert werden.
procedure dellist (var fst,std:lsy); U: MENU.TPU B:BSP_PLUS.PAS
Löscht alle Einträge der Listbox der Variablen fst und std.
procedure addpopmenu(nam:str132;
pron:proctyp); U: MENU.TPU B:BSP_PLUS.PAS
Fügt dem Popupmenü einen Eintrag hinzu.
procedure delpopmenu; U: MENU.TPU B:------------
Löscht alle Popupmenüeinträge.
procedure writestat(status:str132); U: MENU.TPU B:------------
Schreibt den angegebenen Text in die Statuszeile.
procedure runprogram(sp:proctyp;
kopf,fuss:str132); U: MENU.TPU B:BSP_PLUS.PAS
Initialisiert zuerst den Bildschirm mit der Titelzeile kopf und der
Fußzeile fuss; dann wird die Prozedur sp aufgerufen.
Vorher sollte die Maus mit Mouseinit und Mouseon aktiviert werden.
procedure waitevent(p:byte); U: MENU.TPU B:------------
Wartet auf ein Ereignis. Wenn p=1, dann ist das Pulldown-Menü aktiv, wenn
p=0 nicht. p=2 wird für interne Zwecke gebraucht.
procedure popup(tit:str132;px,py:byte); U: MENU.TPU B:BSP_PLUS.PAS
aktiviert das popup-Menü mit den vorher definierten Einträgen an der
Position px, py. Mit ESC wird das Menü abgebrochen. Das Pulldown-.Menü
bleibt weiterhin aktivierbar.
procedure closepopup; U: MENU.TPU B:BSP_PLUS.PAS
Schließt das Popup-Menü.
procedure addlst(var fst,std:sttyp;x,y,anze,
lae:byte;proc:proctype;fl,al:lsy); U: MENU.TPU B:BSP_PLUS.PAS
Fügt dem Dialog der Variablen fst und std, die vorher beide mit dem Typ
sttyp deklariert werden müssen an die Position x,y die listbox hinzu, die
in den Variablen fl und al gespeichert ist. Die Listbox muß vorher mit
addlist belegt werden. Anze bestimmt die Zeilenanzahl der Listbox und lae
dir breite.Proc bestimmt die Prozedur, die immer aufgerufen wird, wenn ein
neuer Eintrag in der Listbox gewählt wird.
procedure addtext(var fst,std:sttyp;
x,y:byte;name:string); U: MENU.TPU B:BSP_PLUS.PAS
Fügt dem Dialog der Variablen fst und std, die vorher beide mit dem Typ
sttyp deklariert werden müssen einen statischen Text hinzu. Der Buchstabe
nach ^ wird hervorgehoben.
procedure addbutton(var fst,std:sttyp;x,y:
byte;typ:byte;name:string;proc:proctyp); U: MENU.TPU B:BSP_PLUS.PAS
Fügt dem Dialog einen Button hinzu. typ legt fest, ob er Button mit ESC
oder ENTER aktiviert werden kann. Wenn ja dann muß typ mit entk, bzw. esck
oder auch entk+esck definiert werden. Wenn nein, dann muß typ mit 0 belegt
werden. proc legt die Prozedur fest, die beim aktivieren des Buttons
aufgerufen werden soll. Nach dem beenden der Prozedur wird der Dialog
weitergeführt.
procedure addokbutton(var fst,std:sttyp;x,y:
byte;typ:byte;name:string); U: MENU.TPU B:BSP_PLUS.PAS
Fügt einen Button hinzu, der nach dem aktivieren das Fenster schließt und
alle Eingaben in den entsprechenden Variablen speichert.
procedure addcancelbutton(var fst,std:sttyp;
x,y:byte;typ:byte;name:string); U: MENU.TPU B:BSP_PLUS.PAS
Fügt einen Button hinzu, der analog zu Addokbutton arbeitet, mit dem
Unterschied, daß alle gemachten Eingaben im Dialog nicht gespeichert
werden.
procedure addinput(var fst,std:sttyp;var zs:
zis;x,y,typ,lang,ul:byte;sez:soc); U: MENU.TPU B:BSP_PLUS.PAS
Fügt dem Dialog eine Eingabezeile hinzu. Die zu editierende Variable muß
vorher mit dem typ zis, der als ^string vereinbart ist, deklariert werden.
Die übrigen variablen müssen gemäß der Prozedur Edline belegt werden
Wichtig: Die Variablen vom Typ zis dürfen erst nach den addinput-Befehlen
belegt werden. Nach dem Befehl deldialog sind die Variableninhalte
gelöscht. Sie müssen daher vorher in andere Variablen übertragen werden.
Beispiel:
var edln:zis
begin
[...]
addinput(fst,std,edln,1,1,normal,30,30,[#0]);
[...]
edln^:='';
dialog([...]);
writeln('Ergebnis: ',edln^);
end.
procedure deldialog(var fst,std:sttyp); U: MENU.TPU B:BSP_PLUS.PAS
Löscht die Dialogdefinition der Variablen fst uns std. Danach kann ein
neuer Dialog in den variablen definiert werden.
function dialog(p:byte;x1,y1,x2,y2, wborder:
byte;titel:string;VAR FST,std:sttyp):string;U: MENU.TPU B:BSP_PLUS.PAS
Führt den in den variablen std und fst gespeicherten Dialog aus. Wenn
p=2, dann bleibt das Pulldown-Menü bei der Ausführung des Dialoges aktiv.
x1,y1x,2,y2,wborder und titel siehe openwindow. Mit TAB, down und left
(Nicht bei Eingabezeilen) kommt man ein Feld weiter mit SHIFT-TAB, UP und
RIGHT ein Feld zurück. ALT+hervorgehobener Buchstabe oder nur Buchstabe
(Nicht bei Eingabezeilen) aktiviert das entsprechende Element. Bei Text
wird das nächste Element, daß kein Text ist aktiviert. Außerdem kann der
gesamte Dialog mit der Maus gesteuert werden.
Wichtig: Nach dem Ausführen des Dialoges muß die Dialogdefinition mit
dem Befehl deldialog gelöscht werden. Damit wird dann auch der Speicher
wieder freigegeben.
procedure actualize (std:sttyp); U: MENU.TPU B:------------
Zeichnet das Dialogelement, das in der Variable std enthalten ist neu.
procedure initscreen(kopf,fuss:str80); U: MENU.TPU B:------------
Baut den gesamten Bildschirm mit allen Menüs und der angegebenen Kopf-
und Fußzeile neu auf.
3.12 Die Unit Bsdialog (Nur BS-Pascal-Toolbox 2.5+)
Diese Unit liegt immer im Quelltext vor.
Das Programm Makehelp
Die Hilfedatei muß zuerst im ASCII-Format mit einem Editor erstellt
werden und folgenden Aufbau haben:
#[Stichwort1]
Hilfetext zum Stichwort 1.
Blablablablablablablablablablablablablablablablablablabla
Blablablablablablablablablablablablablablablablablablabla
Blablablablablablablablablablablablablablablablablablabla
Blablablablablablablablablablablablablablablablablablabla
#[Stichwort 2]
Hilfetext zum Stichwort 2.
Blablablablablablablablablablablablablablablablablablabla
Blablablablablablablablablablablablablablablablablablabla
Blablablablablablablablablablablablablablablablablablabla
Blablablablablablablablablablablablablablablablablablabla
[usw...]
Um die Hilfedatei dann mit der Toolbox verwenden zu können, muß sie mit
dem Programm Makehelp, das im Quellcode vorliegt konvertiert werden.
Die Hilfsvariablen U:BSDIALOG.TPU B:BSP_PLUS.PAS
Die Variable helpfile muß zuerst mit der Hilfsdatei, die verwendet werden
soll, belegt werden. Die Variable Topic muß mit dem Stichwort belegt
werden, dessen Hilfstext beim nächsten Aufruf von Help angezeigt werden
soll. Ist die Variable mit 'Index' belegt, wird der Index der Hilfsdatei
angezeigt.
Die Farbvariablen U:BSDIALOG.TPU B:BSP_PLUS.PAS
Belegung der Farbvariablen am besten mit function color (Unit screen)
hwc Farbe der Dialogboxen der Prozeduren msgbox, yesno und inputbox.
erc Farbe der Dialogboxen der Prozedur errorbox
function Filebox(tite:str132):pathstr; U:BSDIALOG.TPU B:BSP_PLUS.PAS
Öffnet eine Dialogbox mit dem Titel tite zum Auswählen von Dateien. In
der Liste werden immer die Dateien im aktuellen Verzeichnis angezeigt, die
durch die Maske mask definiert werden. Mask ist eine global Variable, die
vorher unbedingt belegt werden muß. Sollen alle Dateien angezeigt werden,
muß mask den Inhalt "*.*" haben. Der Funktionsrückgabewert enthält den
gewählten Dateinamen. Wurde der Dialog abgebrochen, gibt die Function
einen Leerstring zurück.
procedure msgbox (msg:string); U:BSDIALOG.TPU B:BSP_PLUS.PAS
Öffnet zentriert auf dem Bildschirm eine Dialogbox, die den Text msg
anzeigt. Ein | im Text verursacht einen Zeilenumbruch.
function yesno (msg:string):boolean; U:BSDIALOG.TPU B:BSP_PLUS.PAS
Öffnet zentriert auf dem Bildschirm eine Dialogbox, die den Text msg
anzeigt. Ein | im Text verursacht einen Zeilenumbruch. Wenn ja gewählt
wurde, liefert die function true, ansonsten false.
procedure errorbox(msg:string); U:BSDIALOG.TPU B:BSP_PLUS.PAS
Wie msgbox, nur mit der Farbe erc.
function inputbox(titel,msg:string;var
edln:string;typ,la,ul:byte):boolean; U:BSDIALOG.TPU B:BSP_PLUS.PAS
Öffnet zentriert auf dem Bildschirm eine Dialogbox, die den Text msg
anzeigt. Ein | im Text verursacht einen Zeilenumbruch. edln gibt die
Variable an, deren Inhalt editiert werden soll. die übrigen Variablen:
siehe procedure edline (Unit Keyboard). Die Prozedur gibt true zurück,
wenn die Dialogbox mit dem OK-Button geschlossen wurde, ansonsten false.
procedure help; U:BSDIALOG.TPU B:BSP_PLUS.PAS
Öffnet eine Hilfefenster mit dem Text, der dem Stichwort der Variablen
topic in der Hilfsdatei der Variablen Helpfile folgt. Index zeigt einen
Index aller Stichwörter der Hilfsdatei an. Zurück wählt das
vorhergehende Thema.
4. Anhang
4.1 ASCII-Zeichencodes
0 ^@ │ 32 │ 64 @ │ 96 ` │128 Ç │160 á │192 └ │224 α
1 ^A │ 33 ! │ 65 A │ 97 a │129 ü │161 í │193 ┴ │225 ß
2 ^B │ 34 " │ 66 B │ 98 b │130 é │162 ó │194 ┬ │226 Γ
3 ^C │ 35 # │ 67 C │ 99 c │131 â │163 ú │195 ├ │227 π
4 ^D │ 36 $ │ 68 D │100 d │132 ä │164 ñ │196 ─ │228 Σ
5 ^E │ 37 % │ 69 E │101 e │133 à │165 Ñ │197 ┼ │229 σ
6 ^F │ 38 & │ 70 F │102 f │134 å │166 ª │198 ╞ │230 µ
7 ^G │ 39 ' │ 71 G │103 g │135 ç │167 º │199 ╟ │231 τ
8 ^H │ 40 ( │ 72 H │104 h │136 ê │168 ¿ │200 ╚ │232 Φ
9 TAB│ 41 ) │ 73 I │105 i │137 ë │169 ⌐ │201 ╔ │233 Θ
10 ^J │ 42 * │ 74 J │106 j │138 è │170 ¬ │202 ╩ │234 Ω
11 ^K │ 43 + │ 75 K │107 k │139 ï │171 ½ │203 ╦ │235 δ
12 ^L │ 44 , │ 76 L │108 l │140 î │172 ¼ │204 ╠ │236 ∞
13 RET│ 45 - │ 77 M │109 m │141 ì │173 ¡ │205 ═ │237 φ
14 ^N │ 46 . │ 78 N │110 n │142 Ä │174 « │206 ╬ │238 ε
15 ^O │ 47 / │ 79 O │111 o │143 Å │175 » │207 ╧ │239 ∩
16 ^P │ 48 0 │ 80 P │112 p │144 É │176 ░ │208 ╨ │240 ≡
17 ^Q │ 49 1 │ 81 Q │113 q │145 æ │177 ▒ │209 ╤ │241 ±
18 ^R │ 50 2 │ 82 R │114 r │146 Æ │178 ▓ │210 ╥ │242 ≥
19 ^S │ 51 3 │ 83 S │115 s │147 ô │179 │ │211 ╙ │243 ≤
20 ^T │052 4 │ 84 T │116 t │148 ö │180 ┤ │212 ╘ │244 ⌠
21 ^U │ 53 5 │ 85 U │117 u │149 ò │181 ╡ │213 ╒ │245 ⌡
22 ^V │ 54 6 │ 86 V │118 v │150 û │182 ╢ │214 ╓ │246 ÷
23 ^W │ 55 7 │ 87 W │119 w │151 ù │183 ╖ │215 ╫ │247 ≈
24 ^X │ 56 8 │ 88 X │120 x │152 ÿ │184 ╕ │216 ╪ │248 °
25 <Y │ 57 9 │ 89 Y │121 y │153 Ö │185 ╣ │217 ┘ │249 ∙
26 ^Z │ 58 : │ 90 Z │122 z │154 Ü │186 ║ │218 ┌ │250 ·
27 ESC│ 59 ; │ 91 [ │123 { │155 ¢ │187 ╗ │219 █ │251 √
28 ^\ │ 60 < │ 92 \ │124 | │156 £ │188 ╝ │220 ▄ │252 ⁿ
29 <] │ 61 = │ 93 ] │125 } │157 ¥ │189 ╜ │221 ▌ │253 ²
30 ^^ │ 62 > │ 94 ^ │126 ~ │158 ₧ │190 ╛ │222 ▐ │254 ■
31 ^_ │ 63 ? │ 95 _ │127 DEL│159 ƒ │191 ┐ │223 ▀ │255
4.2 ASCII-Linienzeichen
218 194 191 201 203 187 214 210 183 213 209 184
┌ ┬ ┐ ╔ ╦ ╗ ╓ ╥ ╖ ╒ ╤ ╕
195 197 180 204 206 185 199 215 182 198 216 181
├ ┼ ┤ ╠ ╬ ╣ ╟ ╫ ╢ ╞ ╪ ╡
192 193 217 200 202 188 211 208 189 212 207 190
└ ┴ ┘ ╚ ╩ ╝ ╙ ╨ ╜ ╘ ╧ ╛
179 196 186 205
│ ─ ║ ═