BCX Newsletter

Februar 2004
bcxnews@verizon.net

Band 1, Ausgabe 1
Version 4.40 Revision 5, deutsch

Einleitung

BCX Forum

BCX BASIC

Eingabeaufforderung

EZ-GUI

Grafik/Spiele

Sprachausgabe

PSDK

Code Archiv

Tips & Tricks

Datenbanken

Scannen/Twain

Q&A

Mitwirkung

 

Übersetzung: A. Hänsch
andreas-haensch@gmx.net

 

 

Vom Direktor

von John Jacques

Willkommen zur 1. Ausgabe des BCX Newsletters. Dieser Newsletter soll zeigen, wie ich mir das Archivieren und Verbreiten von Informationen für BCX User vorstelle. Ich glaube, das wird jedem Zeit ersparen und den ganzen Spass beim Benutzen von BCX für den Einsteiger bis hin zum erfahrenen User vergrößern. Der Newsletter wurde mit Microsoft Word 2002 erstellt und für die Betrachtung auf Computerbildschirmen und Webseiten formatiert. Er ist nicht für das Ausdrucken konzipiert. In Anbetracht dessen kann es beim Ausdrucken dieses Newsletters zu großen Lücken zwischen den Beiträgen und leeren Seiten kommen.

Ich plane, mindestens einen Newsletter zu jeder BCX-Hauptversion, die bei http://bcx.basicguru.com veröffentlicht wird, herauszubringen oder zum 1. jedes Monats. Eine monatliche Ausgabe ermöglicht den Usern, 21 Tage lang Beiträge zu schreiben und das Ende des Monats für Layout und Korrekturlesen zu nutzen.

Ich hoffe dieser Newsletter wird für neue und alte User eine Möglichkeit darstellen, um Quellcodebeispiele zu finden, ohne das Messagearchiv durchsuchen zu müssen. Der BCX-Dateibereich enthält Hunderte von Benutzerprogrammen, die hochgeladen und vergessen worden sind, weil es weder einen Index noch eine andere Methode für ein schnelles Auffinden gibt. Ich denke, diese nützlichen Anwendungen würden davon profitieren, wenn sie mit Links für den Download vorgestellt werden. Für die Einsteiger möchte ich Informationen und Anleitungen zur Beschaffung, Installation und Benutzung von BCX und den erforderlichen C-Compiler(n) geben und mit jeder Ausgabe dabei mehr ins Detail gehen.

Als BCX User möchte ich Eure Meinungen und Vorschläge zu diesem Newsletter wissen. Der letzte Abschnitt enthält Informationen, wie Infos, Beiträge und Quelltextbeispiele beizusteuern sind.

Lass mich wissen, wenn Du bei diesem Newsletter mitmachen möchtest:

·         Wir brauchen momentan Leute, die einen oder mehr Artikel übernehmen. In diesem Fall würde derjenige (der Artikelmanager) den Inhalt kontrollieren und verantwortlich sein für das Layout seines Artikels. Wenn ein BCX User Informationen, Beiträge oder Quelltext beisteuert, wird das dem verantwortlichen Artikelmanager zum Einfügen, Editieren usw. geschickt.

·         Korrekturleser! Möchtest Du einen Rubrik oder den ganzen Newsletter prüfen, bevor er veröffentlicht wird? Wenn ja, dann bist Du hier richtig! Die Verantwortung dabei umschließt das Korrekturlesen für Fehler, Tippfehler und Rechtschreibfehler. Teile bitte mit, ob Du einen Artikel (mit Angabe Deiner Auswahl) oder den gesamten Newsletter korrekturlesen willst.

 

Eure Meinungen und Vorschläge sind willkommen an bcxnews@verizon.net.

Danke
John Jacques

Von John Jacques

Einen Gruß, dieser Beitrag ist der BCX Yahoo Group gewidmet.

Einer der größten Vorteile der Benutzung des BCX BASIC Translators ist die Webseite des Diskussionsforums auf http://groups.yahoo.com/group/BCX. Hier findest Du Antworten auf Deine Fragen. Es gibt Dutzende von regelmäßig vorbeischauenden Usern, die Fragen stellen & beantworten von Standard-BASIC- bis zu komplexem C-Code. Normalerweise kennt jemand die Antwort, oder es kann zumindest jemand Tipps geben, wo die Antwort im Internet zu finden ist.

Die regelmäßige Kommunikation des BCX-Authors Kevin Diggins zeigt den Usern, wie sehr er sie und ihre Unterstützung schätzt. Er zeigt sein Engagement, indem er wertvolle Informationen wie Tipps zur Anwendung von BCX, zur effizienteren Programmierung, zur Erweiterung von BCX und Infos über bevorstehende neue Veröffentlichungen weitergibt.

Im Laufe der Entwicklung von BCX haben viele talentierte Programmierer an der ständig wachsenden Sprache mitgewirkt. Einige sind wahre Genies, deren Namen niemals in Vergessenheit geraten werden, während andere Alltags-BASIC-Programmierer sind, die Kommentare, Meinungen und Bug-Reports mitteilen.

Direkt oder indirekt wirkt jeder, der Fragen, Kommentare oder Code an das BCX-Forum sendet, daran mit, BCX selbst und die Usergemeinschaft zu gestalten.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BCX BASIC Schnell, Einfach, Kostenlos

Von John Jacques

Willkommen, diese Rubrik enthält Informationen zum Beschaffen und zur Installation von BCX, C-Compilern und Code-Editoren.

Das jeweils aktuelle offizielle BCX-Distribution-Paket findet man auf der BCX-Webseite. http://bcx.basicguru.com

Die BCX DevSuite ist ein sehr vereinfachtes Paket, das alles enthält, was Du zum Loslegen brauchst, und kann von der Seite RJP Computing's BCX Resource heruntergeladen werden. http://rjpcomputing.com/programming/bcx/

Die Hilfe für den BCX BASIC to C Translator wird von Robert Wishlaw erstellt und aktualisiert und kann vom BCX-Yahoo-Group-File-Bereich heruntergeladen werden. http://groups.yahoo.com/group/BCX/files/BCX_Help_Files/

 

 

Von John Jacques

Hallo, diese Rubrik befasst sich mit der Verwendung der Windows-Eingabeaufforderung, auch genannt Console Mode, Console-Fenster, MS-DOS, Dos-Fenster oder DOS. Hier findest Du Informationen darüber, wie man die Eingabeaufforderung, bc.exe, lcc.exe, lcclnk.exe und Batch-Dateien benutzt.

DOS ist die Abkürzung für Disk Operating System. Das DOS stellt Dir, dem User, über die Befehlszeile eine textorientierte Schnittstelle zum Computer zur Verfügung. Wenn Du die Eingabeaufforderung benutzt, tippst Du anstatt zu klicken, weil es kein Graphical User Interface gibt, wie bei der normalen Benutzung von Windows. Du tippst DOS-Befehle in ein Console-Fenster.  Du kannst das Console-Fenster schließen, indem Du das X in der rechten oberen Ecke des Fensters anklickst oder exit eingibst.

Um die Eingabeaufforderung zu starten, klicke auf Start, Programme, Zubehör und dann auf MS-DOS-Eingabeaufforderung.

In der Eingabeaufforderung tippst Du den Befehl ein, zu dem Du Hilfe brauchst, gefolgt von /?.  Tippe zum Beispiel dir /? ein, um Hilfe zum Befehl dir zu erhalten.

Das DOS für Windows 95, 98 und neuere Windows-Systeme arbeitet bei allen etwas unterschiedlich, die meisten Standardbefehle aber funktionieren auf allen Windows-Plattformen. Du solltest aber nicht erwarten, dass DOS-Befehle, die auf Win95/98 funktionieren, auch auf Windows ME/NT/XP laufen. Die größten Änderungen gibt es bei Windows XP, weil es mit einem echten DOS-Emulator arbeitet. Dieser DOS-Emulator ist ein Windows-Programm, das ein DOS vortäuscht. Der XP-DOS-Emulator hat etwa 20 Befehle, die entweder eliminiert, umbenannt oder geändert wurden gegenüber den älteren Windows-Versionen.

Unter Windows 95/98 waren Dateinamen auch als DOS 8.3-formatiert bekannt. Das heißt, dass ein Dateiname auf 8 Zeichen plus 3 zusätzliche Zeichen für den Dateityp beschränkt waren 12345678.123. Es kann zu Problemen führen, wenn Du Code schreibst zum Lesen von langen Dateinamen, die von früheren Betriebssystemen nicht unterstützt werden. Beim DOS mit der 8.3 Dateinameneinschränkung werden längere Dateinamen nach 6 Zeichen, einer nachfolgenden Tilde ~ und einer Zahl von 1-9 abgeschnitten (z.B. datein~1.ext). Die letzte Zahl zeigt an, wie viele Dateien mit den gleichen 6 Anfangszeichen in einem Verzeichnis existieren.

Im DOS werden Dateien in Verzeichnissen gespeichert. In Windows heißen sie gelbe Ordner. Wenn man DOS benutzt, werden sie immer Verzeichnisse genannt, aber in Windows findet man sie unter der Bezeichnung Verzeichnisse oder Ordner. Du musst wissen, dass sie das gleiche sind.

* Eine Anmerkung für uns Oldtimers, die die Benutzung von älteren Versionen von DOS und Windows gewohnt sind  und auf StartàAusführen... klicken würden und dann command eintippen, um das Console-Fenster zu öffnen. Auf Windows XP kann das zu unerwünschten Effekten führen und man sollte den Befehl cmd anstatt command benutzen.

 

 

Von John Jacques

 

Diese Rubrik beschäftigt sich mit Informationen zur Erzeugung von Windows-Programmen mit Hilfe der BCX-GUI-Funktionen.

 

Sehen wir uns ein modifiziertes Beispiel aus der BCX- Hilfedatei an. Das ist im Grunde das kürzestmögliche GUI oder Windows-Programm.

$COMPILER "lcc.exe"
$LINKER   "lcclnk.exe"

 

Optional können wir BCX den Namen unseres C-Compilers und Linkers mitteilen, um den Prozess zu automatisieren. Das erlaubt uns, bc filename.bas in der Eingabeaufforderung zu schreiben, um das C- sowie das ausführbare Programm in einem Schritt erzeugen zu können.

GUI "BCX_Template"

 

Die Anweisung GUI teilt BCX mit, dass es ein Windows-GUI-Programm ist und keine DOS-Anwendung.

SUB FORMLOAD
  GLOBAL Form1 AS HWND
  Form1 = BCX_FORM("BCX_TEMPLATE", _
  0, 0, 110, 110)
  BCX_SET_FORM_COLOR(Form1,QBCOLOR(31))
  CENTER (Form1)
  SHOW (Form1)
END SUB
 

Innerhalb des Sub FORMLOAD können wir den Programmcode platzieren, der ein Fenster erzeugt.

BEGIN EVENTS
 
SELECT CASE CBMSG
   CASE WM_CLOSE
   DestroyWindow (Form1)
   EXIT FUNCTION
END SELECT
 
END EVENTS

Innerhalb der Schleife BCX EVENTS können wir prüfen, ob der Benutzer etwas anklickt und entsprechend reagieren. Wenn der Benutzer in diesem Beispiel auf das X klickt, um das Fenster zu schließen, rufen wir die Windows-API-Funktion DestroyWindow auf.

 

 

Von John Jacques

 

Diese Rubrik enthält Informationen über das Durchforsten per Browsen im Internet, das Beschaffen und Installieren sowie das richtige Lesen und Benutzen des Microsoft PSDK. Hier findest Du auch Beschreibungen, wie bestimmte API-Aufrufe zu verwenden sind.

Die Microsoft-PSDK (Platform Software Development Kit)-Dokumentation enthält Informationen über die von Windows bereitgestellten Features. Sie beinhaltet relevante Header-Dateien, Libraries, Beispielcode und Tools für C, C++ und andere Sprachen. Wenn Du die Windows-API-Programmierung erlernen willst, dann solltest Du Dir die PSDK ansehen auf http://msdn.microsoft.com/library/default.asp. Wenn Du einen High-Speed-Internetzugang hast, kannst Du die 300+-MB-Datei herunterladen und lokal auf Deiner Maschine installieren, oder Du orderst die CD. Der Download und die Updates sind hier zu finden: http://www.microsoft.com/msdownload/platformsdk/sdkupdate/.

Das PSDK ist eine unglaublich reiche Quelle von Informationen über die Arbeitsweise von Windows sowie zum Schreiben von Programmen, die die Schnittstelle Windows API nutzen. Das Windows Application Programming Interface ermöglicht Programmierern, die Windows-Betriebssystem-Funktionen in eigenen Programmen zu nutzen.

Du mußt die Grundlagen des Windows API und etwas Programmieren in C lernen, bevor Du verstehen kannst, was im PSDK steht. Es ist zum Beispiel extrem wichtig, dass Du verstehst, was Strukturen und was Windows eigene Strukturen wie rect sind.

 

 

Von John Jacques

 

Diese Rubrik beschäftigt sich mit Tipps, Tricks und Quelltextbeispielen, um User zu unterstützen, effizienter zu programmieren oder bestimmte Ergebnisse zu erzielen.

 

1.     Prüfe immer, ob eine Datei existiert, bevor Du sie öffnest!

o        IF NOT EXIST(filename$) THEN END

 

 

Hast Du einen Tipp oder einen Trick, den Du anderen verraten möchtest?
Dann teile ihn uns mit an bcxnews@verizon.net.

 

 

 

Von John Jacques

 

In dieser Rubrik werden Dir aktuelle Programme von BCX-Usern vorgestellt, die im BCX-Yahoo-Group-File-Bereich zu finden sind. Verweise auf entsprechende Dateien werden mit Titel, Link und einer Kurzbeschreibung aufgelistet.

Diesen Monat stelle ich EZIDE 1.3.04 von Andreas Guenther mit Link und Installationsbeschreibung vor. Damit Du es richtig verstehst, die “1.3.04” ist das Datum der Programmerstellung (Versionsnummer). EZIDE ist ein grafischer Editor zur einfachen Erstellung von Anwendungsfenstern (forms). EZIDE wird regelmäßig aktualisiert, so dass eine neuere Version als 1.3.04 erhältlich sein sollte. Die Anleitungen sollten in diesem Fall trotzdem korrekt funktionieren.

 

1.      Lade EZIDE herunter von http://groups.yahoo.com/group/BCX/files/NEW-EZ_IDE_And_Demos/. Du findest es auf der Seite in etwa halber Höhe nach unten, weil die Einträge nicht alphabetisch sortiert sind.

2.      Führe die Datei ezide_x.x.xx.exe aus.

3.      Das Installationsprogramm fragt zuerst nach dem Installationsverzeichnis und zeigt den Pfad im oberen Bereich des Dialogs im Eingabefeld von “Extract to:”. Ich empfehle, einfach “c:\” im Eingabefeld einzugeben, damit ins Verzeichnis c:\ezide installiert wird. Klicke auf den Schalter Extract. Nach beendeter Installation erscheint eine Messagebox zur Information.

4.      Klicke auf das Windows-Start-Menü, dann auf Ausführen, gib im Eingabefeld “c:\ezide\bin\ezide.exe” ein und klicke auf OK, um EZIDE zu starten.

5.      Beim ersten Start fragt Dich EZIDE nach Deinen Setup-Einstellungen.

a.      Der Pfad Deines BCX/bin-Verzeichnisses. Das ist in der Regel “c:\ Programme\BCX\bin\”. Du kannst Dich gleich dorthin durchklicken und dann mit OK bestätigen.

b.      Die nächste Abfrage ist einfach, klicke auf die Datei “bc.exe”, die den Pfad “c:\Programme\BCX\bin\bc.exe” hat.

c.      Vorangegangene Versionen fragten nach den C-Compiler-Pfaden, aber es scheint, das wurde aktualisiert und die Installation von EZIDE ist damit abgeschlossen.

6.      EZIDE sollte jetzt laufen. Ich klicke gern auf den Fenster-Maximieren-Schalter, um die gesamte Anwendung auf dem Bildschirm zu haben. Solltest Du die Schalter Minimieren, Maximieren und Schließen nicht kennen, es sind die 3 grauen Kästchen in der rechten oberen Ecke der Titelzeile von Windows-Programmen.

 

Ich hoffe, Du hattest Spass an den Installationsanleitungen für EZIDE, und ich denke, es wäre gut, zukünftig Artikel über seine Anwendung lesen zu können. 

 

Benutzt Du EZIDE schon?
Wenn ja, dann berichte uns darüber bcxnews@verizon.net.

 

 

 

Arbeiten mit CSV-Dateien

Von John Jacques

Diese Rubrik beschäftigt sich mit datenbankspezifischen Informationen von allgemeinen Datenbank Fragen & Antworten bis zur Programmierung mit BCX und der Verwendung von ODBC. Du kannst hier Quelltextbeispiele oder ganze Anwendungen finden.

Ich werde mit einigen Definitionen beginnen, um jedem zu helfen, Schritt zu halten:

Eine Datenbank ist eine Datensammlung. Die Daten können durch den Author der jeweiligen Datenbank mit der gewählten Datenbankanwendung in beliebiger Art und Weise gespeichert und formatiert werden. In dieser Lektion liegt der Schwerpunkt auf CSV (*.CSV), Dateien mit durch Kommas getrennten Werten (comma separated values) im ASCII-Format. Einfacher gesagt, nutzen wir unsere Daten, um Standardtext und numerische Daten zu speichern, die durch Kommas getrennt sind.

Haben wir eine einzelne CSV-Datei, können wir sie unsere Datenbank nennen, weil es eine Sammlung von Daten ist. Haben wir aber mehrere CSV-Dateien für eine Anwendung, nennen wir alle CSV-Dateien Datenbanktabellen, und die gesamte Sammlung von Tabellen ist dann unsere Datenbank.

 

Es gibt keinen internationalen Standard für Dateien im CSV-Format!

Die Version, die wir hier verwenden werden, wird durch Kommas getrennt sein, der Text eingeschlossen sein in Anführungszeichen, der erste Datensatz wird die Feldnamen enthalten und wir werden NIEMALS die Benutzerdaten ändern. Das ist das verbreitetste Format, und wenn unser Projekt fertig sein wird, sollte das Format vollständig kompatibel sein mit dem von Access, Excel und Word.

 

Anmerkung:

*Erstens ändert Access die Benutzerdaten durch Vernachlässigen der Anführungszeichen im Datenfeld und hinzufügen von neuen. Das heißt, dass wenn Daten in Access eingelesen und als CSV-Datei gespeichert werden, jedes Anführungszeichen verdoppelt wird. Unser Format macht das nicht, weil wir die Benutzerdaten nicht ändern werden. Wenn das Projekt fertig ist, wird es einfach sein, durch Hinzufügen von 2 Codezeilen (eine zum Importieren und die andere zum Exportieren) mit Anführungszeichen zu arbeiten, so dass es keine große Sache ist.

*Zweitens erlauben einige CSV-Formate das Einbetten des ASCII-Zeichen für Zeilenvorschub, ohne darauf eingeschränkt zu sein. Wir werden NUR mit druckbaren Zeichen arbeiten. Wenn das Projekt fertig ist, ist es jedoch wieder so, dass durch Ändern und Hinzufügen einiger Zeilen das Einbetten des Zeilenvorschubs möglich ist.

 

Das Format unserer CSV-Datei sollte eigentlich mit fast jeder Anwendung problemlos arbeiten. Du kannst sie in Access und Excel importieren. Ich denke, mit der Fertigstellung dieses Projekts solltest Du in der Lage sein, die erstellten Daten jeder dieser Anwendungen zu einer jeweils anderen zu importieren und zu exportieren.

Der Author einer Softwareanwendung kann sein eigenes CSV- Dateiformat und die Kompatibilität frei wählen; dem Format von CSV-Dateien sind keine Grenzen gesetzt. Es gibt viele Anwendungen, die NUR ihr eigenes Custom-CSV-Dateiformat lesen & schreiben. Du kannst viele Artikel im Netz finden, die berichten, was der Author als CSV-Standard ansieht, aber es gibt keinen offiziellen Standard, eben nur eine Art Kompatibilität, die Du brauchst. Du kannst zum Beispiel 100.000 CSV-Dateien aus dem Internet herunterladen, und es kann passieren, dass keine dabei ist, die Du in Access ohne Fehler importieren kannst. Genau so kann es passieren, dass Du eine Million CSV-Dateien im Internet findest, die alle 100% mit Access arbeiten. Wenn Deine Anwendung den Import und Export mit Access erlaubt, dann ist sie kompatibel mit dem “Standard”-CSV-Datei-Format, dass die meisten Programmierer akzeptieren.

Noch einmal,  Du kannst im Netz Artikel finden, die behaupten, Access kann das Zeichen für eine neue Zeile in den Textfeldern einer CSV-Datei einbetten. Ob Access diese in Textfeldern eingebetteten Zeichen lesen/schreiben kann, wird in diesen Artikeln jedoch nicht betrachtet. Ein Textfeld besteht aus Daten, die in einer Textbox mit nur einer Zeile eingegeben werden können, nicht in einer Editbox. Eine Editbox ist ein Memotypfeld, das nicht Teil des “Standard”-CSV-Datei-Formats ist. Wir werden nur druckbare Zeichen benutzen.

Wir werden Code zum Lesen einer CSV-Datei schreiben, die Textfelder mit einem Paar von Anführungszeichen enthält. Dieses Format erlaubt keine Memotypfelder, einschließlich Zeilenvorschubzeichen, und wir ändern NIEMALS die Benutzerdaten, um Programmierfallen zu umgehen. Weil wir jede Datenzeile (jedes Feld) als String lesen werden, wird es keine Rolle spielen, ob Du numerische Daten in einem Textfeld oder in einem Zahlenfeld speicherst. Der Grund dafür, dass Textfelder in Anführungszeichen eingeschlossen werden, und Zahlen genau so behandelt werden, führt zu einigen speziellen Auswirkungen, die zum Beipiel Speicherplatz und Zugriffszeit betreffen. Stelle Dir vor, wie viele Anführungszeichen Du in einer CSV-Datei mit 1.000.000 Datensätzen mit 50 Zahlenfeldern hättest! Jedes Feld hätte 2 Anführungszeichen, 50 Felder mal 2 Anführungszeichen = 100 mal 1.000.000 Datensätze = 100.000.000 Anführungszeichen! Wir sprechen über das Aufblasen von Dateien und Speicherplatzverschwendung!

Der Text von CSV-Dateien muss NICHT von Textmarkierungen eingeschlossen sein, aber unser Format, das ich für das verbreitetste, sinnvollste und kompatibelste halte, verwendet Anführungszeichen als Textmarkierung. Diese Verfahrensweise gibt uns einen “Standard”, der beinhaltet, dass wir nur druckbare Zeichen in unseren Textfeldern und nur Zahlen in unseren Zahlenfeldern verwenden.

 

Zusammenfassung:

·         Für jede Datenkategorie gibt es eine eigene CSV-Datei.

·         Jede CSV-Datei ist eine Tabelle.

·         Diese CSV-Tabellen werden in einem gemeinsamen Verzeichnis gespeichert und diese Tabellengruppe wird unsere Datenbank sein.

·         Wir werden Daten als Text speichern, der Zahlen, Buchstaben und Interpunktion enthält.

·         Wir betten keine Zeilenvorschubzeichen oder andere nichtdruckbare ASCII-Codes ein.

·         Wir ändern NIEMALS die Benutzerdaten, um ein Programmierproblem zu umgehen.

 

Jede Tabelle mit Informationen wird in Datenfelder, wie “Vorname” und “Nachname” gesplittet. Die Vor- und Nachnamen werden in zwei separaten Feldern gespeichert, die uns später das Sortieren & Suchen von Daten entweder anhand des Vor- oder des Nachnamens erlaubt. Wir werden die jeweilige Lieferadresse, die Postadresse (wenn unterschiedlich), die Festnetz- und Handynummer, den Pager (Funkrufempfänger) und die Emailadresse zusammen in einer CSV-Datei namens “Contacts.csv” speichern.

 

Wie viele Felder wird unsere Tabelle “Kontakte” enthalten?

1.      Vorname

2.      Nachname

3.      Lieferadresse

4.      Postadresse

5.      Telefon

6.      Handy

7.      Pager

8.      Emailadresse

 

Da wir nun das grundlegende Design unserer Tabelle “Kontakte” haben, sage ich Euch jetzt, dass Feldnamen immer mit einem Buchstaben beginnen und nur Text bzw. Zahlen enthalten sollten. Einige Anwendungen können Leerzeichen, Gedankenstriche usw. zwar lesen, aber Du kannst Portierungsprobleme bekommen, wenn Du versuchst, Deine Daten mit anderen Anwendungen zu benutzen.

Zum Ende erstellen wir unser Datenbankverzeichnis, das das komplette Design unserer Tabelle “Kontakte” zeigt, damit andere Entwickler sehen können, was los ist. Das folgende Diagramm zeigt die Feldnamen, über die wir gesprochen haben, sowie weitere Felder, die wir brauchen.

Feldname

Format

Größe

Beschreibung

1.       CID

2.       CType

3.       Prefix

4.       FName

5.       MName

6.       LName

7.       Suffix

8.       DAddress

9.       MAddress

10.   Phone

11.   Cell

12.   Pager

13.   Email

Zahl

Text

Text

Text

Text

Text

Text

Text

Text

Text

Text

Text

Text

4

10

10

25

25

25

10

25

25

15

15

15

50

Kontakt-ID-Nummer im Bereich 1-9999.

Kontakt-Typ (Freund, Familie, Date usw.)

Präfix (Hr., Fr., Frl. usw.)

Vorname

Zweiter Vorname

Nachname

Suffix (III, MD usw.)

Lieferadresse

Postadresse (wenn anders als Lieferadr.)

Telefonnummer

Handynummer

Pagernummer

Emailadresse

 

Wie Du siehst, habe ich einige neue Felder zur Liste hinzugefügt, die wir schon als notwendig erkannt haben. Der wichtigste Teil des Entwerfens einer Datenbanktabelle ist, sie zu durchdenken und sie von Anfang an richtig zu machen. Du brauchst keine Extrafelder, die nie gebraucht werden, aber das ist eine sehr kleine Tabelle und wenn es ein paar Felder geben sollte, die wir später nicht nutzen werden, schadet es nicht. Diese Tabelle mit den 12 Feldern zu erzeugen, macht die Daten möglicherweise kompatibler mit anderen Datenbankanwendungen.

Oft möchte ein Unternehmen von einem System auf ein anderes wechseln und gibt viel Geld aus, um seine Daten in das neue Format zu konvertieren, oder erstellt alles komplett neu, in Abhängigkeit von den Kostenunterschieden einer Konvertierung gegenüber der Datenbank-Neuerstellung. Die meisten professionellen Datenbankanwendungen erlauben das Importieren vorhandener Daten und ermöglichen Dir, dabei auszuwählen, welches Feld für das neue System angepasst werden soll.

Beachte, dass wir das Feldformat entweder als Text oder als Zahl wählen in Verbindung mit der maximalen Feldgröße in Zeichen. Unser Feldtyp “Nummer“ wird ein BCX INTEGER sein, aber unsere Anwendung wird den Eingabewert auf den Bereich von 1-9999 beschränken.

Du kannst CSV-Dateien in Deinem bevorzugten Texteditor öffnen. Um die Datei korrekt anzeigen zu lassen, musst Du die Funktion Zeilenumbruch ausschalten. Du siehst dann eine Zeile Daten für jeden Datensatz/jede Zeile in der Datei. Die Daten müssten über den rechten Seitenrand Deines Bildschirms hinausgehen, weil der Zeilenumbruch ausgeschaltet ist.

 

Beispiel des Aussehens einer CSV-Datei in Deinem Texteditor

“CID”,”CType”,”Prefix”,”FName”,”LName”,”Suffix”,”DAddress”,”MAddress”,”Phone”,”Cell”,…
1,”Client”,”Mr.”,”John”,””,”Doe”,”Jr.”,”1313 Mockingbird Lane”,”P.O. Box 1313”,”1-123-123...
2,”Client”,”Mrs.”,”Jane”,””,”Doe”,””,”1313 Mockingbird Lane”,”P.O. Box 1313”,”1-123-123...
3,”Friend”,””,”Joe”,””,”Doe”,””,”12 Bird Street”,””,”1 (123) 123-4567”,””,””,”email@dot.com”

 

Beachte, dass unser Feld “Nummer“ nur eine Zahl ist, unsere Textfelder aber eingeschlossen sind in Anführungszeichen. Jedes Feld wird durch ein Komma abgetrennt. Die erste Datenzeile enthält die Feldnamen, wobei zu beachten ist, dass alle Feldnamen in Anführungszeichen eingeschlossen sind.

Zusammenfassung:

·         Ein paar “extra” Felder zu erstellen, die nur unter Umständen genutzt werden, ist eine gute Idee, wenn Du einen großen Kundenkreis für den Absatz in Betracht ziehst, denn Deine Anwendung wird so die Wünsche aller Kunden erfüllen.

·         Wenn Du weißt, dass ein Feld nicht benutzt wird, dann ist es am besten, es nicht in den Entwurf einzufügen, weil es Speicher und extra Prozessorzeit für den Tabellenzugriff in Anspruch nimmt.

·         Der Feldname sollte so kurz wie möglich sein, aber trotzdem den Zweck erkennbar machen.

·         Die Feldgrößen sollten auf einen Maximalwert gesetzt werden, der die Daten aufnehmen kann.

·         Wir werden in unserer Anwendung Zahlen- und Textfelder haben.

·         Der erste Datensatz/die erste Zeile in unserer CSV-Tabelle/-Datei wird die Feldnamen enthalten.

 

Hier endet dieser Beitrag, der gezeigt hat, wie ein kommagetrennte Werte-Text in Anführungszeichen - die Datenbanktabelle/-datei erzeugt wird. Die nächste Ausgabe befasst sich damit, wie die CSV-Tabelle/- datei mit BCX erzeugt, gelesen, gespeichert und gelöscht wird.

 

Hast Du Fragen oder Hinweise zu diesem Artikel?
Dann teile sie uns mit an bcxnews@verizon.net.

 

 

 

Von John Jacques

Diese Rubrik befasst sich mit allen Bereichen der Erzeugung und Manipulation von BCX-Grafiken vom Windows-GDI bis zum DirectX PSDK. Du kannst in diesem Bereich außerdem Audio, Input und andere Spieletechniken finden.

 

Hast Du Ideen, was Du gern in dieser Rubrik sehen würdest?
Dann teile sie uns mit an bcxnews@verizon.net.

 

Von John Jacques

Diese Rubrik wird Informationen zum Thema Benutzung von BCX mit Text To Speech und Spracherkennung enthalten.

 

Was ist SAPI? Version 4? Version 5?

 

Was ist ein lexicon?

Ein lexicon ist eine Sammlung von Wörtern und Informationen zu diesen Wörtern, die von einem Spracherkennungsprogramm genutzt werden, um die Erkennungsgenauigkeit zu erhöhen. Eine Text-to-Speech-Engine benutzt ein lexicon, um die Qualität seiner Aussprache zu erhöhen.

 

Was ist TTS?

TTS steht für Text To Speech. Hat Dein Computer keine, dann braucht er eine “Stimme” oder Speech-Engine, bevor er sprechen kann.  Was Dir entscheidend weiterhelfen kann, ist die SAPI-Version, die unterstützt wird (4 oder 5), und der Anwendungstyp, also z. B. Text-To-Speech oder Spracherkennung.

Es scheint, dass die einzigen KOSTENLOSEN SAPI5.1 Speechengines von Microsoft sind.

Was ist XML?

XML ist die Abkürzung für Extensible Markup Language. Es wird verwendet als allgemeine Scriptsprache für viele neuere Programme.

Wir werden die XML-Tags in zwei Formaten benutzen. Das erste ist, Text einzuschließen in ein XML-Tag und ein XML-Close-Tag. Das zweite setzt einen Wert und behält ihn für den nachfolgenden Text bis zu einem dazugehörigen abschließenden XML-Tag oder für den Rest des Textes.

 

<XMLTag Attribute=”Wert”> Das Tag ist geschlossen.</close XMLTag>

<XMLTag Attribute=”Wert”/> Das ist ein OFFENES oder LEERES Tag

 

SAPI-Text-to-Speech-XML-Tags fallen in diese Kategorien:

Voice state, kontrolliert:

    • Volume - die Lautstärke
      • <volume level="0-100"/>
      • <volume level="0-100"> Text </volume>
      • Einhundert ist die Standardlautstärke einer Stimme.
      • Niedrigere Werte bedeuten Prozente dieses Standards.
      • Mit dem Volume-Tag festgelegte Werte werden, prozentweise, kombiniert mit den programmierten Werten!
    • Rate - die Frequenz
      • Das Tag Rate hat zwei Attribute, Speed und AbsSpeed.
      • Die Werte sind Integer zwischen -10 und 10.
      • Das Attribut AbsSpeed bestimmt die absolute Frequenz der Stimme, also der Wert 10 entspricht immer dem Wert 10; der Wert 5 entspricht immer dem Wert 5.
      • Das Attribut Speed bestimmt die relative Frequenz der Stimme.
      • Der absolute Wert wird ermittelt durch Summe aller Speed-Werte zum momentanen Absolutwert.
      • Null ist die Standardfrequenz einer Stimme.
      • Mit dem Rate-Tag festgelegte Werte werden kombiniert mit den programmierten Werten!
    • Pitch - die Tonhöhe
      • <pitch absmiddle="-10-10"/>
      • <pitch absmiddle="-10-10"> Text </pitch>
      • <pitch middle="-10-10"/>
      • <pitch middle="-10-10"> Text </pitch>
      • Der Tag Pitch hat zwei Attribute, Middle und AbsMiddle.
      • Die Werte sind Integer zwischen -10 und 10.
      • Das Attribute AbsMiddle bestimmt die absolute Höhe der Stimme, also der Wert 10 entspricht immer dem Wert 10; der Wert 5 entspricht immer dem Wert 5.
      • Das Attribute Middle bestimmt die relative Höhe der Stimme. Der absolute Wert wird ermittelt durch Summe aller Middle-Werte zum momentanen Absolutwert.
      • Null ist die mittlere Standardhöhe einer Stimme.
    • Emphasis - die Betonung
      • <emph> Text </emph>
    • Spelling - Buchstabierung
      • <spell> Text </spell>
      • Erzwingt, dass die Stimme den gesamten Text buchstabiert.
      • Einschließlich Satzzeichen, Zahlen und so weiter.

 

Direct item insertion, kontrolliert:

    • Silence - die Pausen
      • <silence msec="( Millisekunden )"/>
    • Pronunciation - die Aussprache
      • <pron sym="h eh 1 l ow & w er 1 l d "/>
      • <pron sym="h eh 1 l ow & w er 1 l d"> hello world </pron>
      • Fügt einen angegebenen phonetischen Ton ein.
      • Die Stimme synthetisiert die Folge der phonetischen Töne genau so, wie sie angegeben sind.
      • Dieses Tag kann auch leer sein.
      • Wenn es einen Inhalt besitzt, wird es interpretiert als Unterstützung der Aussprache des eingeschlossenen Textes.
      • Das Pron-Tag hat ein Attribut, Sym, dessen Wert eine Kette von Phonems ist, die durch Leerzeichen getrennt sind.
    • Bookmark - Lesezeichen
      • <bookmark mark="(Wort/Textausdruck)"/>
      • Fügt ein Bookmark-Event in den Output-Audio-Stream ein.
      • Signalisiert Deiner Anwendung zur Synchronisation, wann die Sprachausgabe, die dem Text im Bookmark-Tag entspricht, erreicht wird.
      • Das Bookmark-Tag hat ein Attribut, Mark.

·         Custom Pronunciation:

      • Das Tag <P> ist eine Alternative zur Benutzung der PRON-Attribute für Custom Pronunciation.
      • <P>/disp/word/pron;</P>
      • <P>/greeting/hello/ah;</P>

 

Voice context, kontrolliert:

    • Zwei Tags stellen den Kontext zur aktuellen Stimme her: PartOfSp und Context.
    • PartOfSpeech
      • <partofsp part=”(Teil der Rede)”> Text </partofsp>
      • Unterstützt die Stimme beim Teil der Rede mit den Worten in Klammern.
      • Versetzt die Stimme in die Lage, ein Wort mit mehreren Sprechweisen in Abhängigkeit des Teils der auszugebenden Rede korrekt auszusprechen.
      • Das Tag PartOfSp hat ein Attribut, Part.
      • “Unknown”, “Noun”, “Verb”, “Modifier”, “Function”, “Interjection”.
    • Context
      • <context id=”date_mdy”> 03/04/01 </context>
      • <context id=”date_dmy”> 03/04/01 </context>
      • <context id=”date_ymd”> 03/04/01 </context>
      • Damit kann die Stimme zwischen zu verwechselnden Datumsformaten unterscheiden.
      • Hat ein Attribut, Id.

 

Voice selection, kontrolliert:

    • Zwei Tags, die (unter Umständen) dazu genutzt werden können, die aktuelle Stimme zu ändern: Voice und Lang.
    • Voice (Wenn mehrere Stimmen installiert sind)
      • <voice required=”Gender=Female;Age!=Child”>
      • <voice required=”Age=Teen”> Text </voice>
      • <voice required=”Age=Adult;gender=male”>
      • <voice required=”Age=Adult;gender=female”>
      • Wählt eine Stimme aus, basierend auf ihren Attributen Age, Gender, Language, Name, Vendor und VendorPreferred.
      • Hat zwei Attribute: Required und Optional.
      • Eine der aktuellen Stimme ähnlichere Stimme wird gewählt anstatt einer weniger ähnlichen.
    • Language
      • <lang langid=”409”>
      • <lang langid=”409”> Text </lang>
      • Benutzt Registry-Einstellungen (wenn vorhanden).
      • Wählt eine Stimme nur wegen ihrer Sprachattribute aus.
      • Der Tag Lang hat ein Attribut, LangId.
      • Muss eine gültige LANGID sein, wie z. B. 409 (U.S. English).
      • LANGID- Nummern sind hexadezimal.
      • Es ist das gleiche wie das Tag/Attribut Voice Language.

 

SAPI ist eine COM-basierte Anwendung, und COM muss beim Start Deines Programms initialisiert sein (vor der Sprachausgabe) und am Ende Deiner Anwendung vor dem Verlassen. Wenn COM läuft, ist der nächste Schritt, die Stimme zu erzeugen. Eine Stimme ist ein COM-Objekt und es werden die Voreinstellungen der Spracheigenschaften im Einstellungsfenster verwendet, wenn eine Stimme erzeugt wird, damit es gleich losgehen kann.  Abschließend rufst Du die Speak-Funktion der SAPI-COM-Schnittstelle auf und übergibst ihr den Text-String oder den Dateinamen zum Sprechen.

Hier ist ein Kommandozeilen-Player, kompiliere ihn deshalb als Console-Anwendung.

Beispiel:
C:> say Dateiname.ext
C:> say Dateipfad\Dateiname.ext

 
#INCLUDE <SAPI.H>
$LIBRARY <OLE32.LIB>
 
GLOBAL pVoice AS ISpVoice PTR
pVoice=NULL
GLOBAL BcxGetText$
 
'COM initialisieren, überzeugen, dass es läuft und aktiv ist.
'Nur fortsetzen, wenn COM erfolgreich initialisiert wurde
IF FAILED( CoInitialize( NULL ) ) THEN
  PRINT "CoInitialization Failed!"
  END
END IF
 
'Die zu sprechende Datei lesen.
BcxGetText$=COMMAND$
BcxGetText$=TRIM$(BcxGetText$)
'gibt es keinen vollständigen Pfad, liefern wir ihn.
IF instr(BcxGetText$,":\")=0 THEN
  BcxGetText$=APPEXEPATH$ & BcxGetText$
END IF
 
'dem Benutzer mitteilen, was wir tun.
IF NOT EXIST(BcxGetText$) THEN
  print "File Not Found!"
  END
END IF
print "Speaking: ";BcxGetText$
 
'Das eigentliche Sprechen ausführen
IF NOT Speak(BcxGetText$,1)THEN
  PostQuitMessage(0)
END IF
'Den pVoice-Pointer freigeben, wenn erforderlich.
CALL BeQuite()
'Wir brauchen COM nicht länger, deshalb geben wir es hier frei.
CoUninitialize()
END
 
 
'mode=0 wenn A$ Text enthält
'mode=1 wenn A$ einen Dateinamen enthält (doppelte Schrägstriche vorhanden)
FUNCTION Speak OPTIONAL(A$,mode=1)
'Wir lassen nur einen Stream laufen, ist pVoice also in Gebrauch, sprechen wir gerade
'deshalb müssen wir es freigeben, bevor wir es erneut benutzen.
BeQuite()
 
'Wenn COM läuft, ist der nächste Schritt, die Stimme zu erzeugen.
'Eine Stimme ist einfach ein COM-Objekt.
'Zusätzlich benutzt SAPI intelligente Standardeinstellungen.
'Während der Initialisierung des Objekts weist SAPI die meisten Werte automatisch zu,
'so dass das Objekt unmittelbar darauf benutzt werden kann.
'Die Standardwerte werden von den Spracheinstellungen im Controlpanel entnommen.
local hr as HRESULT
hr=CoCreateInstance (&CLSID_SpVoice, NULL, _
CLSCTX_ALL, &IID_ISpVoice,(void**)&pVoice)
IF FAILED(hr) THEN
  PRINT "Creation of voice failed!"
  EXIT FUNCTION
END IF
'An dieser Stelle ist pVoice ein Zeiger auf unser Voice-COM-Interface.
 
 
IF mode=0 THEN
  'Speak() initialisiert das Sprechen eines Text-Strings 
  ‘und das XML, das mit < beginnt
  pVoice->lpVtbl->Speak(pVoice, ANSITOWIDE(A$), _
  SVSFPurgeBeforeSpeak | _'Bereinigt alle anhängigen Sprachanfragen vor diesem Sprachaufruf.
  SVSFlagsAsync , _       'zur Rückkehr direkt nachdem die Sprachanfrage im Puffer ist.
  NULL)                   'Eine Long-Variable, die die Stream-Nummer enthält.
ELSEIF mode=1 THEN
  'Speak() initialisiert das Sprechen einer Datei
  pVoice->lpVtbl->Speak(pVoice,ANSITOWIDE(A$), _
  SVSFIsFilename, _
  NULL) END IF
 
FUNCTION=1
 
END FUNCTION
 
SUB BeQuite()
  IF pVoice THEN
    pVoice->lpVtbl->Release(pVoice)
    pVoice=NULL 'Das stellt sicher, dass kein ungültiger Zeiger weiterverwendet wird
  END IF
END SUB
 
 

 

Hast Du Fragen oder Hinweise zu diesem Artikel?
Dann teile sie uns mit an bcxnews@verizon.net.

 

 

 

Von John Jacques

Hast Du eine Webcam, Digitalkamera oder einen Scanner? Dann ist dieser Artikel für Dich!

Jef Rozenski hat das TWAIN-Demoprogramm “TWAINTEST” hochgeladen, dass mit ein paar einfachen Zeilen Funktionsaufrufe an die enthaltene Freeware “eztw32.dll” sendet, um die gewünschte Funktion auszuführen.

Lasst uns einen Blick auf sein Quelltext-Beispiel werfen:

TWAIN_SelectImageSource(LIB "eztw32.dll",Form1)

 

Wie Du am Namen der Funktion sehen kannst, öffnet diese Anweisung an eztw32.dll eine Dialog Box und ermöglicht dem Benutzer damit, die zu verwendende Twain-Quelle auszuwählen. Für diejenigen, die nicht wissen, was eine Twain-Quelle ist: Das ist eine Schnittstelle, die eine Anwendung mit Hardware, wie z. B. einem Scanner, einer Webcam oder einer Digitalkamera verbindet.

Jetzt, da eine Twain-Quelle ausgewählt ist, sehen wir uns an, was zum Scannen eines Bildes in unser BCX-Programm erforderlich ist:

 retval = TWAIN_AcquireToFilename(LIB "eztw32.dll",Form1,tempfile$)
 SET_BCX_BITMAP(Bmp1,tempfile$)
 KILL tempfile$

 

Wie Du sehen kannst, genügt eine einzige Anweisung an die EZ-TWAIN-DLL und das gescannte Bild wird in einer Datei gespeichert, deren Name wiederum in der Zeichenkette tempfile$ gespeichert ist. Die zweite Zeile liest die Bitmapdatei in Bmp1, einem BCX_BITMAP-Control ein. Die dritte Zeile löscht letztlich die gescannte Bilddatei von der Festplatte.

Die Verwendung der EZ-TWAIN-DLL macht das einscannen von Bildern in Deine BCX-Anwendung ein Kinderspiel, und dank Jef’s Demoprogramm kannst Du sofort beginnen!

Die EZ-TWAIN Version 1.2 der DLL ist kostenlos verfügbar auf http://www.dosadi.com, aber alles, was Du brauchst ist in der Zip-Datei, die Jef im BCX-File-Bereich hochgeladen hat, enthalten: http://groups.yahoo.com/group/BCX/files/Free_DLLS/twain.zip

 

Hast Du Fragen oder Hinweise zu diesem Artikel?
Dann teile sie uns mit an bcxnews@verizon.net.

 

 

 

Von John Jacques

Wie bei jedem guten Newsletter findest Du Kommentare von Usern neben den aktuellen FAQ (Frequently Asked Questions).

 

Q. Kann jemand ein gutes (kostenloses oder billiges) Installerprogramm empfehlen, das
vom Benutzer vor der eigentlichen Installation abfragt, ob er der Lizenzinfo zustimmt?

A1. http://nsis.sourceforge.net
”NSIS (Nullsoft Scriptable Install System) ist ein Tool, das Programmierern die Erzeugung solcher Installer für Windows ermöglicht. Es ist veröffentlicht unter einer Open Source Lizenz und ist für jede Nutzung vollständig freigegeben.”
A2. http://innosetup.com
”Inno Setup ist ein kostenloser Installer für Windowsprogramme. 1997 zum ersten Mal vorgestellt, macht Inno Setup heute sogar vielen kommerziellen Installern Konkurrenz und übertrifft sie an Features und Stabilität.”
A3. http://files.jrsoftware.org/ispack/ispack-4.0.10.exe
Martijn Laan's QuickStart Pack enthält zusätzliche Third-party Add-ons, wie z. B. den ISTool Script Editor, Inno Setup Preprocessor und UPX-Kompression. Diese Add-ons sind nicht offiziell, sind nicht ausgiebig getestet und sind zum allgemeinen Gebrauch auch nicht erforderlich, aber sie machen die Benutzung von Inno Setup einfacher, besonders für neue Benutzer.”

 

Hast Du Fragen und/oder Antworten, die Du gern in dieser Rubrik sehen würdest?
Dann teile sie uns mit an bcxnews@verizon.net.

 

 

 

 

 

Beachte bitte folgende Regeln, wenn Du Artikel, Informationen oder Quellcode bereitstellst:

1.      Die Spaltenbreite ist 80 Zeichen der Größe 10 Verdana Font. Wenn Du möchtest, dass Dein Artikel so erscheint, wie Du ihn im Original bereitgestellt hast,dann füge oder tippe ihn zuerst in einen vorhandenen Newsletter ein, um sicherzugehen, dass er wie gewünscht passt. Dieser Newsletter ist für die Bildschirmauflösung 800x600 entworfen.

2.      Stelle den Artikel entweder als unformatierten Text (Erweiterung .txt) oder so formatiert, wie Du die Ausgabe wünschst bereit bzw. stelle ihn einfach in irgendeinem Standardformat bereit und wir modifizieren ihn, wie gewünscht. Bitte mache genaue Angaben, wenn Du Deinen Artikel in Deinem Originalformat, -Font, -Farbe usw. wünschst.

3.      Bitte unterziehe Deine Info einer Rechtschreibprüfung, bevor Du sie hier bereitstellst. Wir führen eine Rechtschreibprüfung durch, wenn Du nicht festlegst, dass die Ausgabe in Deinem Originalformat erfolgen soll.

4.      Reiche keine Artikel ein, die nicht für jedes Alter bestimmt sind, Umgangssprachliches oder Platzhalter, wie in ap*les (apples), enthalten.

5.      Reiche kein Copyright-geschütztes oder illegales Material ein.

6.      Code sollte zum leichten Lesen mit Einrückungen formatiert sein. Er sollte in Arial, Schriftgrad 8 geschrieben werden, entsprechend eingerückt sein und in einer Tabelle stehen.

7.      Artikel, Informationen und Code sollten auf der letzten offiziell veröffentlichten Version von http://bcx.basicguru.com basieren. Artikel, die auf Betaversionen basieren, sollten darauf hinweisen, und der Code sollte die $BCXVERSION-Anweisung auf der ersten Zeile oder in unmittelbarer Nähe davon enthalten.

8.      Text sollte in Verdana, Schriftgrad 10, geschrieben werden.

 

Wir behalten uns das Recht vor, nicht jeden Artikel, jede Information, jeden Code und anderes Material zu veröffentlichen, das uns zugesendet wird. Da es Zeit braucht, einen Newsletter zusammenzustellen, kann es vorkommen, dass ein Artikel nicht gleich in der nächsten Ausgabe erscheint. In diesem Fall wird dieser Artikel dann zukünftig veröffentlicht und innerhalb von 48 Stunden eine entsprechende Email an die im betreffenden Beitrag angegebene Adresse geschickt.