 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Neuling
Anmeldungsdatum: 19.08.2013 Beiträge: 12 Wohnort: Baienfurt (DE)
|
Verfasst am: 19.08.2013, 16:42 Titel: Einstieg finden |
|
|
Hallo Forum,
Mitte der 80er habe ich auf dem C64 kommerzielle Programme geschrieben und dann noch ein Projekt von 1989 bis 1991. Letzteres ist immer noch unverändert im Einsatz. Geschrieben wurde das Pgm (bestehend aus mehreren Teilprogrammen) mit Hilfe von PDS V7.x. Damals musste das Projekt in Teilprogramme untergliedert werden, weil der Programmcode die gültigen Grenzen überschritten hat. Es ist ein DOS-Programm.
Da es immer schwieriger wird, unter DOS (cmd-Befehl) zu arbeiten, soll bzw. muss das Projekt auf Windows umgeschrieben werden. Ob es aber nicht besser ist, alles neu zu programmieren, muss ich noch entscheiden. Unter DOS liegt ja die Herausforderung in der Gestaltung der Eingabe(n). Dies wird heute unter Windows ja sicher von vorgefertigten DLLs gut unterstützt - so nehme ich an. Weitere Herausforderungen damals waren diverse "Routinen", für die es heute fertige Lösungen gibt; z.B. Sortieren nach dem Datum, wenn es in der Form TTMMJJJJ vorliegt oder Berechnen von Zeitdifferenzen Datum2 ./. Datum1 = x Tage.
Ich tue mir richtig schwer, einen Einstieg zu finden. Und das, wo ich ja alles "nur abzuschreiben" brauche. Kann mir jemand Literatur nennen, wie man ein Windows-Projekt angeht. Zuerst Eingabe-Maske(n) dann Verarbeitung - oder umgekehrt? Welche Eingabe-"Fenster-Typen" gibt es - mit Beispielen. Wie sieht generell die Struktur eines Windows-Programmes aus? Diese Hilfe würde ich gerne bevorzugt in elektronischer Form haben.
Vielen Dank für die (guten) Hinweise.
PS: Programmieren ist nicht und war nie meine berufliche Betätigung; es war ein Hobby. Als solches betrachte ich auch dieses Projekt. |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 19.08.2013, 18:25 Titel: |
|
|
Also das Wichtigste vorab: Nachfolgender Screenshot
http://beilagen.dreael.ch/QB/16_Bit_Teils_1.png
=> selbst Windows 8 erlaubt die Ausführung von 16-Bit-Code. Tipp von mir also, bevor Du Dich in viel Arbeit stürzst: Unter
http://windows.microsoft.com/de-ch/windows-8/preview-download
würde ich an Deiner Stelle also die .ISO der 32-Bit(!)-Version (32-bit ist ganz wichtig, nicht die 64-Bit!) herunterladen, auf einer freien Hardware (normaler PC, auf dem Du die Festplatte komplett "flachmachen" kannst) oder virtualisiert (z.B. VMware Player) aufsetzen und im dortigen Gastsystem Deine alte 16-Bit-Anwendung spontan einmal von A bis Z testen, dabei sämtliche nicht mehr funktionierenden Dinge sauber dokumentieren.
Wenn Du keine verrückten INP()s und OUTs gemacht hast, ebenso wenig irgendwelche komplizierten Dinge wie SuperVGA, Soundkarte usw. im Gebrauch (aber selbst dort gibt es eine Lösung: DOS-Box!), dann müsste Deine bestehende Anwendung auch auf moderner Hardware noch gebrauchstüchtig sein. Bekannte Stolpersteine sind in der Regel Drucker, wenn da frisch und fröhlich mit LPRINT und Matrixdrucker-Befehlscodes (z.B. Epson) gearbeitet wurde (PostScript und PCL 5/6 dagegen unterstützen auch aktuelle Laserdrucker immer noch).
Ebenfalls bekannt: Gerne wurde früher die CPU-Geschwindigkeit mit einer Zählschleife (Integer erhöhen, bis z.B. 1 Sekunde verstrichen ist) gemessen, was bei heutigen 3,6 GHz-CPUs zu Überläufen führen kann -> derartigen Code solltest Du im Quelltext komplett eliminieren.
Und für die Original Commodore 64-Version: VICE verwenden, Diskette hierbei in eine .D64-Datei umwandeln. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
RockTheSchock
Anmeldungsdatum: 04.04.2007 Beiträge: 138
|
Verfasst am: 20.08.2013, 08:13 Titel: |
|
|
Da du viel von Eingabemasken sprichst, gehe ich davon aus, dass dein Programm im weitesten Sinne mit Datenverarbeitung zu tun hat. Hier ein paar Empfehlungen von mir unter der Annahme, dass dein Programm eine Datenbank als Grundlage hat:
Wenn du planst eh alles neu zu machen und schnell mal eine Einzelplatz Datenbank mit Masken brauchst nimm Access.
Wenn du eine Datenbank brauchst, die von unterschiedlichen Leuten/Rechnern aus möglichst einfach von überall benutzt werden können soll, bietet sich PHP+MYSQL an, um damit ein Webinterface zu erstellen.
Wenn du sehr komplexe Datenstrukturen hast, die sehr stark miteinander verknüpft sind und zwischen denen komplexe Berechnungen durchgeführt werden. Nimm die Sprache die du am besten kannst.
Vielleicht lässt sich mit wenig Aufwand dein Programm Freebasic kompatibel machen. Ob das sinnvoll ist, können wir dir sagen, wenn du dein Programmcode veröffentlichst oder wenn du das nicht möchtest uns mehr informationen dazu gibst vielleicht mit ein paar Code schnipseln. Umso mehr Details wir über dein Programm haben umso gezielter können wir dir helfen.
Oder du lässt dein Programm weiter unter z.B. DOSBox laufen. Wenn du copy and paste haben möchtest gibt es wohl einen workaround:
http://www.autoitscript.com/forum/topic/45621-a-way-of-copy-and-paste-for-dosboxautoit-wrapper/
Für Freebasic gibt es vor allem die Befehlsreferenz z.B. auf Deutsch
http://www.freebasic-portal.de/befehlsreferenz/
ansonsten gibt es das auch das englische Forum:
http://www.freebasic.net/forum/
Für Java gibt es sehr viele gute kostenlose Programmierbücher, aber vor allem mit Basic Kenntnissen dauert es etwas bis du dich an Java gewöhnst.
http://www.javabuch.de/
http://openbook.galileocomputing.de/javainsel/ |
|
Nach oben |
|
 |
Neuling
Anmeldungsdatum: 19.08.2013 Beiträge: 12 Wohnort: Baienfurt (DE)
|
Verfasst am: 20.08.2013, 15:08 Titel: Einstieg finden |
|
|
Zuerst herzlichen Dank.
Ich muss ergänzen:
Mein BS ist Win7 Prof x64. Ich habe Oracle VirtualBox 4.2.x installiert. Darin ist Win XP Prof x86 eingespielt mit dem Ergebnis, dass sich besagte .EXE trotzdem nicht starten lassen. Ebenso habe ich versucht, mit DOSBox V 0.74 zu arbeiten. Ohne Erfolg. Auch die in Win 7 integrierten Kompatibilitätseinstellungen schlugen fehl. Es gibt reichlich Tipps, Vorschläge und Videos zum Thema "16Bit-Spiele unter Win 7/8 x64 zum Laufen bringen". Ich möchte behaupten, dass ich alle halbwegs sinnigen Vorschläge getestet habe. Keine zumutbare war erfolgreich. Unter Vista Premium Home x86 (32Bit) und erst recht unter XP 32Bit läuft alles problemlos.
Exotische Tipps mit Potential zum instabilen Gesamtsystem waren auch dabei, scheiden aber angesichts der Tatsache aus, dass es sich bei mir um eine kaufmännische Anwendung mit wirtschaftlichem Hintergrund handelt. Es ist unzumutbar, einem EDV-Laien (mit einem Alter von knapp 80 Jahren) eine Anwendung zu bieten, die potentiell ein seriöses Arbeiten unmöglich macht. Die Arbeiten mit diesem Programm müssen zuverlässig gespeichert werden und die Auswertung prompt bereit stehen.
Es wird ermöglicht,
1 - 99 Gebäude(komplexe) mit
1 - 99 Wohnungen je Gebäude
abrechnungstechnisch zu verwalten. Hauptsächlich werden die "Miet-Nebenkosten" auf die Mieter verteilt. Dabei liegt eine Besonderheit darin, dass der Vermieter bei allen Kosten nicht darauf angewiesen ist, bezahlte Beträge verteilen zu können, sondern auch noch nicht bezahlte. D.h., wenn von 10.04. bis 30.09. abgerechnet werden muss und z.B. der Strompreis sich in einem Punkt ab 10.07. ändert, kann das kWh-genau berücksichtigt werden. Vorausgesetzt der Stromzähler wird zeitnah abgelesen. Diese Funktion ist dem Lizenzeigentümer sehr wichtig und wird derzeit von keiner bezahlbaren (weniger als 5.000 € Investitions- und weniger als 300 € monatliche Servicekosten) Software geboten.
Wenn es weiterhin notwendig ist, kann ich gerne den Code bereitstellen - als Originalcode oder als PDF. Für den Anfang dann aber der Praktikabilität wegen von einem Teilprogramm, das ohne die restlichen Daten lauffähig ist.
??? Wie kann ich meinem Beitrag eine PDF- oder JPG-Datei anhängen??? Wenn ich das weiß, stelle ich eine Auswertung zur Verfügung.
@drael: Der Nutzer der Software wohnt 25 km von mir entfernt und braucht (nach wie vor) Hilfe in Form von Fernwartung, die aber regelmäßig bei Nutzung von DOS-Boxen (im Vollbildformat) nicht mehr richtig funktioniert - egal welche (kostengünstige/kostenlose) Lösung ich gewählt hatte bzw. habe. Deshalb kommen nur Lösungen in Frage, die keine "Verrenkungen" im Gesamtsystem erforderlich machen.
@RockTheSchock: Wie gesagt, es sind sog.
Stammdaten zu verwalten: pro Gebäude, pro Wohnung (Mieter) ... und
Abrechnungsdaten: Zählerstände, Arbeitspreise, Grundpreise usw. und
individuelle Verrechnungsdaten. Alle fließen in die Abrechnung ein. |
|
Nach oben |
|
 |
RockTheSchock
Anmeldungsdatum: 04.04.2007 Beiträge: 138
|
Verfasst am: 20.08.2013, 15:24 Titel: |
|
|
Alle virtualisierungsmöglichkeiten alla VMware / VirtualBox / VirtualPC unter einem 64bit System ein 16 bit Programm laufen zu lassen müssen fehlschlagen. Das ist einfach so. Nur echte CPU Emulation (nicht Virtualisierung) könnte funktionieren. Da gibt es:
- DOSBox am einfachsten und am langsamsten
- DOSEmu
- QEmu
- Bochs
in QEmu kannst du auch MSDOS oder Win95 ... theoretisch sogar Win764bit installieren.
Es könnte sein, dass das Programm mit dem FreeDOS oder einer Komponente von FreeDOS nicht klar kommt. DosBox und DOSEmu kommen mit FreeDOS daher.
Solltest du code bereitstellen bitte nicht als PDF sondern die originalen BAS Dateien bitte als .BAS im Text Format gespeichert. (Innerhalb von PDS "Speichern unter" und als Text)
Zum Hochladen registrier dich irgendwo wo es kein geld kostet und lade es hoch und verlinke es:
http://www.freebasic-portal.de
http://www.dropbox.com/
http://www.4shared.com
http://drive.google.com
Die Software hört sich recht komplex an, komplett alles von vorne zu programmieren ist sicher sehr aufwendig, macht aber sicher auc Spaß!
Wenns mit Qemu nicht klappt, würde ich es an deiner stelle es mal mit FreeBasic probieren und dich an einigen der vielen Libs bedienen.
http://sourceforge.net/projects/fbc/files/Binaries%20-%20Windows/Libraries/
Als Datenbank-Backend könnte statt selbst verwalteten Dateien eine eingebettete relationale Datenbank zum Einsatz kommen, wie z.B. SQlite. Laut Wikipedia ist "SQLite das am weitesten verbreitete und meistverwendete Datenbanksystem der Welt." Interessant dabei sind vor allem Aggregat Funktionen und das einfache sortieren und filtern von Datensätzen:
http://www.sqlite.org/lang_aggfunc.html
Zuletzt bearbeitet von RockTheSchock am 22.08.2013, 08:50, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
darkinsanity aka sts

Anmeldungsdatum: 01.11.2006 Beiträge: 456
|
Verfasst am: 21.08.2013, 22:56 Titel: |
|
|
RockTheSchock hat Folgendes geschrieben: | Alle virtualisierungsmöglichkeiten alla VMware / VirtualBox / VirtualPC unter einem 64bit System ein 16 bit Programm laufen zu lassen müssen fehlschlagen. |
Das ist Quatsch. VMWare / VirtualBox / VirtualPC starten alle ihre virtuelle CPU im Real Mode - sonst wären sie nicht x86-kompatibel. Ich kann also problemlos in VirtualBox ein DOS installieren und dort meine 16 Bit Programme laufen lassen.
RockTheSchock hat Folgendes geschrieben: | Das ist einfach so. Nur echte CPU Emulation (nicht Virtualisierung) könnte funktionieren. |
Emulation ist auch nur ein Weg Virtualisierung umzusetzen. Btw, qemu kann auch Hardware-Support nutzen.
RockTheSchock hat Folgendes geschrieben: | DosBox und DOSEmu kommen mit FreeDOS daher. |
Nein. DOSBox und FreeDOS haben rein gar nichts miteinander zu tun.
@Neuling:
Wenn es dir nur darum geht dass Programm auf Windows lauffähig zu bekommen wäre vermutlich 1:1 Portierung auf FreeBASIC am einfachsten. Sofern dein Programm keine exotischen Dinge tut wirst du kaum etwas ändern müssen.
Wenn du die Anwendung dabei aber gleich modernisieren möchtest wäre Java vielleicht einen Blick wert. Um sich mit Java vertraut zu machen ist das dir bereits vorgeschlagene "Java ist auch eine Insel" ideal. Allerdings hat Java eben nicht mehr viel mit BASIC zu tun. Wenn du stattdessen bei BASIC bleiben willst musst du dich, sofern du eine "moderne" Benutzerschnittstelle willst, entweder mit der WinAPI oder mit externen Bibliotheken beschäftigen. _________________ Traue keinem Computer, den du nicht aus dem Fenster werfen kannst -- Steve Wozniak |
|
Nach oben |
|
 |
RockTheSchock
Anmeldungsdatum: 04.04.2007 Beiträge: 138
|
Verfasst am: 22.08.2013, 09:02 Titel: |
|
|
Zitat: | RockTheSchock hat Folgendes geschrieben: | Das ist einfach so. Nur echte CPU Emulation (nicht Virtualisierung) könnte funktionieren. |
Emulation ist auch nur ein Weg Virtualisierung umzusetzen. Btw, qemu kann auch Hardware-Support nutzen.
RockTheSchock hat Folgendes geschrieben: | DosBox und DOSEmu kommen mit FreeDOS daher. |
Nein. DOSBox und FreeDOS haben rein gar nichts miteinander zu tun.
|
Richtig, VMWare, XP Mode und Konsorten haben alle eine CPU Emulation , sodass darin auch 16 bit Programme laufen sollten. Und DosBOX kommt mit einem eigenen DOS daher.
Man oh mann da hab ich ja viel Scheiße gelabert. Soll ich die fehler in meinem Originalpost verbessern / Fehler anmerken? |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 22.08.2013, 09:36 Titel: Re: Einstieg finden |
|
|
Neuling hat Folgendes geschrieben: | Der Nutzer der Software wohnt 25 km von mir entfernt und braucht (nach wie vor) Hilfe in Form von Fernwartung, die aber regelmäßig bei Nutzung von DOS-Boxen (im Vollbildformat) nicht mehr richtig funktioniert |
Nachdem das Ganze eine klassische Büroanwendung ist, kommt es vermutlich mit SCREEN 0-Textoberfläche sogar aus. Aus meiner Sicht unbedingt Benutzung im Fenstermodus überprüfen (früher im Röhrenbild-Zeitalter war mir eine falsch eingestellte DOSPRMT.PIF ein Dorn im Auge -> Fenstermodus war dort immer das Erste. Mit der Schriftgrösse kann schlussendlich auch die Fenstergrösse gesteuert werden, z.B. in Deinem Fall so gewählt, dass das Fenster bildschirmfüllend annähernd dem bisherigen Vollbildmodus entspricht), dann steht einer Benutzung via Remotedesktop, VNC, TeamViewer usw. nichts mehr im Weg. Ferner ist ein Mehrkern-Prozessor bei Deinem Nutzer empfehlenswert, da eine DOS-Anwendung noch kein CPU-Idle machen kann und bei nur einem Kern die ganze CPU jedesmal bei 100% "verstopft" ist -> bei mehreren Kernen ist dies dann nur bei einem Kern der Fall -> der VNC-Serverprozess hat dann immer noch genügend Rechenleistung.
Ansonsten nebenbei: Es gibt einen speziellen CALL INTERRUPT, der innerhalb der NTVDM einer DOS-Anwendung erlaubt, die CPU freizugeben -> diesen in sämtliche INKEY$ einzubauen wirkt sich dann wie Tag und Nacht auf die CPU-Gesamtbelastung aus und der temperaturgeregelte Lüfter fährt dann ebenfalls herunter. d.h. wird leiser. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
Lothar Schirm
Anmeldungsdatum: 24.04.2006 Beiträge: 65 Wohnort: Bayern
|
Verfasst am: 22.08.2013, 20:05 Titel: |
|
|
Hallo Neuling,
ich weiß ja nicht, ob es dir nur um dieses eine Projekt geht und ob eine Benutzeroberfläche im DOS-Stil für deine Kunden heute noch akzeptabel ist. Falls du bei einem Basic-Dialekt bleiben willst und eine einfache GUI-Programmierung brauchst, würde ich mal PureBasic in Erwägung ziehen. Die Demoversion gibt es kostenlos. Es gibt in der IDE einen Formdesigner, der einfach zu verstehenden und schlanken Code produziert, und für Dein Problem gibt es in PureBasic auch jede Menge Befehle für den Umgang mit Datenbanken (SQLite-, PostgreSQL- oder jeden anderen Datenbank-Typ (Oracle, MySQL, Access, etc.) |
|
Nach oben |
|
 |
RockTheSchock
Anmeldungsdatum: 04.04.2007 Beiträge: 138
|
Verfasst am: 22.08.2013, 20:30 Titel: |
|
|
Ich bin mir nicht sicher ob du älteren Herrschaften einen gefallen tust mit einer Windows Oberfläche. Aus meiner Erfahrung ist eine lineare / single Task Oberfläche / mit nur einem richtigen/möglichen Weg für ältere Leute viel einfacher zu handhaben, als eine moderne intuitive wo man das gleiche Ziel auf unterschiedlichsten wegen erreichen kann.
DOS Oberflächen mit einfacher Struktur und Eingabefeldern, die man nacheinander in EINER bestimmten Reihenfolge abarbeiten muss, sind nun mal für DAUs perfekt. D.h. ja nicht dass du auf moderne Elemente wie die Zwischenablage und das einfache Drucken/E-Mail versenden usw. verzichten musst. |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 22.08.2013, 21:23 Titel: |
|
|
Wenn du bei dem alten Code weitgehend bleiben willst, ist FreeBasic (im lang:qb Modus) sicherlich sehr gut geeignet aus der 16-Bit DOS Applikation eine 32-Bit Windows(/Linux/FreeBSD)-Applikation zu erstellen. Je nachdem wie viele DOS-/Hardware-nahe Funktionen du im Quellcode verwendest (z.B. (DOS) Interrupts, direkte Speicherzugriffe, direkte Portzugriffe, ...) werden trotzdem wenige oder mehrere Änderungen erforderlich sein.
Besser wäre es jedoch die Programmoberfläche auf aktuelle Systeme anzupassen. Da sich moderne Oberflächen derzeit in FreeBasic noch nicht so einfach wie in anderen Umgebungen erstellen lassen, kann ich dieses zumindest für die Programmoberfläche nicht empfehlen. Wenn du den UI-Code und die eigentliche Programmfunktionalität gut getrennt hast (wird angesichts des Alters jedoch wohl nicht so sein ...) wäre das Auslagern der Funktionalität in eine FreeBasic Bibliothek (DLL / LIB) möglich, sodass nur der UI-Teil neu geschrieben werden muss (in einer kompatiblen Programmiersprache, wie etwa C, C++, ... oder FB selbst, wobei ich letzteres jedoch wie vorhin begründet nicht unbedingt empfehle).
Noch besser wäre es die Software in einer modernen Programmiersprache neu zu schreiben. Das ist andererseits wohl die meiste Arbeit. Meiner Meinung nach aber besser als so eine "halbe" Lösung. Als Programmiersprache kann ich C# empfehlen. Moderne Benutzeroberflächen und Programmierkonzepte lassen sich damit bestens umsetzten. Natürlich ist etwas Einarbeitungszeit nötig, um ein vernünftiges Basiswissen zu erlangen, ohne welches erstmal nicht viel geht. Das .NET Ecosystem und C# sind allerdings extrem umfangreich, sodass man etwas darauf achten muss sich auf das Wesentliche zu konzentrieren, dass man sich nicht in der scheinbaren Unendlichkeit verliert. _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
 |
Neuling
Anmeldungsdatum: 19.08.2013 Beiträge: 12 Wohnort: Baienfurt (DE)
|
Verfasst am: 31.08.2013, 17:20 Titel: Einstieg finden |
|
|
Vielen Dank für die bisherigen Tipps und Anregungen.
Mein vordergündigstes Ziel war und ist es, eine windows-kompatiblere EXE zu erstellen, als die originalen unter PDS 7.x. Richtig ist, dass unter Windows viel eher die Möglichkeit besteht, eine vorgesehene Abfolgelogik zu verletzen und sich damit Probleme einzuhandeln. Andererseits soll das Programm(paket) ja auch von den "Nachfolgern" (Erben) genutzt werden können. Und die finden es ätzend, wenn man zum "Nachschauen" das aktuelle Programm verlassen und ein ganz anderes aufrufen muss und wieder zurück.
Zu den Tipps bezüglich der Datenbanken: Es handelt sich um einfache Dateien, die im wesentlichen zum Anzeigen (auf dem Bildschirm) und zum Drucken im Hauptprogramm benötigt werden. Es ist - auch unter einem modernen System - nicht nötig, Datenbanken einzusetzen. Ich habe noch keinen großen Einblick in vorhandene LIBs, aber für mein Projekt sind bestimmt genügend vorhanden, um das eine oder andere Problemchen in den Griff zu bekommen.
Ich habe mich einfach dran gesetzt und probiert. Und es ist mir mit "wenigen" Änderungen gelungen, die 7 Teilprogramme unter -lang "qb" zum Laufen zu bringen. Sogar unter Win 7 64Bit gab es keine Probleme. Allerdings sind einige Neuerungen in FreeBasic (auch unter "qb") im Weg; die früheren Integer-Variablen - insbes. die %-Typen - sind inkompatibel wegen unterschiedlicher Länge. Früher konnte einfach mit dem Suffix die Bytelänge bei Zahlen festgelegt werden. DIM und DEF... wurden so gut wie nicht gebraucht. Und das rächt sich heute gewaltig! Ebenso aufwändig ist die Definiererei - und das nach über 20 Jahren.
Im nächsten Schritt habe ich mich dran gemacht, den "qb" in "deprecated" abzuändern. Das ging noch, erfordert aber noch eine ganze Portion mehr an Disziplin. Es ist aber machbar - auch in angemessener Zeit. Diesen Schritt habe ich aber nur an einem Teilprogramm getestet. Auch das ist nicht schwierig, aber schon zeitintensiver.
Dieses Teilprogramm habe ich dann noch mit -lang "fb" getestet. Und ein Problem habe ich jetzt in 2 Tagen Fummelei nicht geschafft zu lösen . Das würde ich gerne grundsätzlich (in vereinfachter Form) an euch weitergeben und um Hilfe bitten:
Was ist hier noch falsch? Den Code findet ihr am Ende!
Neben dem Compiler FreeBasic 0.90.1 Win32 habe ich installiert: FB IDE V 0.4.6 vom 19.02.2006 (nutze ich aber nicht aktiv) und FreeBasic Editor V 1.0.7.6c. Mit letzterem arbeitete ich die vergangenen Tage und werde ich auch weiterhin arbeiten, es sei denn es gibt was besseres (von euch empfohlen).
Herzlichen Dank im voraus.
Hier der Code:
Code: |
#lang "fb"
Dim Shared EFirmaNr As Short: EFirmaNr = 0
Dim Shared EName As String: EName = Space (30)
Dim Shared EStrasse As String: EStrasse = Space (25)
Dim Shared EOrt As String: EOrt = Space (25)
Dim Shared EBankname As String: EBankname = Space (20)
Dim Shared EBLZ As String: EBLZ = Space ( 8 )
Dim Shared EKontoNr As String: EKontoNr = Space (10)
Dim Shared FirmaNr As Short: FirmaNr = 0
Dim Shared XS As String: XS = Chr(0) & "S"
Dim Shared xe As String: xe = Chr(27)
TYPE FirmenDatei
As Short DFirmaNr: ' = 0
As String DName: ' String * 30
As String DStrasse: ' String * 25
As String DOrt: ' String * 25
As String DBankname: ' String * 20
As String DBLZ: ' String * 8
As String DKontoNr: ' String * 10
END TYPE
DIM Fir AS FirmenDatei: ' Länge = 120
' Open "FIRMEN.DIR" FOR RANDOM AS #1 Len = 120 'Len (Fir)
' Declare Sub DateiSchreiben ()
' ***** Daten in Datei schreiben *****
Sub DateiSchreiben
FirmaNr = EFirmaNr
Fir.DFirmaNr = EFirmaNr
Fir.DName = EName
Fir.DStrasse = EStrasse
Fir.DOrt = EOrt
Fir.DBankname = EBankname
Fir.DBLZ = EBLZ
Fir.DKontoNr = EKontoNr
' Put #1, FirmaNr, Fir
End Sub
EFirmaNr = 1
EName = "Otto Mayer Verlag HH"
EStrasse = "Haus am Bach 22"
EOrt = "12345 Nirgendhausen"
EBankname = "Hansis Hausbank Berlin"
EBLZ = "87654321"
EKontoNr = "0085246357"
Print EFirmaNr
Print EName
Print EStrasse
Print EOrt
Print EBankname
Print EBLZ
Print EKontoNr
Sleep
'Call DateiSchreiben
'Print Fir
Sleep
End |
Und die Meldungen:
Code: | D:\FreeBASIC\fbc -g -s console "ZahlenSpeichern.bas"
ZahlenSpeichern.bas(32) error 41: Variable not declared, Fir in 'Fir.DFirmaNr = EFirmaNr'
ZahlenSpeichern.bas(33) error 247: Symbol not a CLASS, ENUM, TYPE or UNION type, before '.' in 'Fir.DName = EName'
ZahlenSpeichern.bas(34) error 247: Symbol not a CLASS, ENUM, TYPE or UNION type, before '.' in 'Fir.DStrasse = EStrasse'
ZahlenSpeichern.bas(35) error 247: Symbol not a CLASS, ENUM, TYPE or UNION type, before '.' in 'Fir.DOrt = EOrt'
ZahlenSpeichern.bas(36) error 247: Symbol not a CLASS, ENUM, TYPE or UNION type, before '.' in 'Fir.DBankname = EBankname'
ZahlenSpeichern.bas(37) error 247: Symbol not a CLASS, ENUM, TYPE or UNION type, before '.' in 'Fir.DBLZ = EBLZ'
ZahlenSpeichern.bas(38 ) error 247: Symbol not a CLASS, ENUM, TYPE or UNION type, before '.' in 'Fir.DKontoNr = EKontoNr'
Build error(s) |
|
|
Nach oben |
|
 |
Elor
Anmeldungsdatum: 12.07.2013 Beiträge: 205 Wohnort: Konstanz
|
Verfasst am: 31.08.2013, 17:50 Titel: |
|
|
Hallo:
Um die Variable Fir in der SUB "Dateischreiben" zu nutzen, musst du sie mit
SHARED bekannt machen.
Beispiel:
Code: |
Dim Shared Fir As Firmendatei
|
|
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4702 Wohnort: ~/
|
Verfasst am: 31.08.2013, 20:19 Titel: |
|
|
Das Schreiben eines kompletten UDTs mittels PUT wird nur richtig funktionieren, wenn du in der UDT-Deklaration Strings fester Länge verwendest (die hast du in den Kommentaren ja bereits angedeutet). Ob OPEN im Modus RANDOM korrekt funktioniert, musst du schauen; das wird nicht mehr weiterentwickelt; vielleicht lohnt sich hier ein Blick in den Dateimodus BINARY.
Zu den gemeldeten Fehlern: 'Fir' verwendest du wohl ausschließlich in der SUB - dann kannst du es auch in der SUB selbst mit DIM deklarieren (DIM Fir AS FirmenDatei). Nicht deklarierte Variablen werden in FreeBASIC auf jeden Fall immer bemeckert. Dadurch entsteht deine erste Fehlermeldung; alle anderen sind dann eine Folge aus der ersten.
Wenn du 'Fir' innerhalb und außerhalb der Prozedur nutzen willst, brauchst du das von Elor erwähnte SHARED. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 31.08.2013, 20:58 Titel: Re: Einstieg finden |
|
|
Neuling hat Folgendes geschrieben: | Mein vordergündigstes Ziel war und ist es, eine windows-kompatiblere EXE zu erstellen, als die originalen unter PDS 7.x. Richtig ist, dass unter Windows viel eher die Möglichkeit besteht, eine vorgesehene Abfolgelogik zu verletzen und sich damit Probleme einzuhandeln. Andererseits soll das Programm(paket) ja auch von den "Nachfolgern" (Erben) genutzt werden können. Und die finden es ätzend, wenn man zum "Nachschauen" das aktuelle Programm verlassen und ein ganz anderes aufrufen muss und wieder zurück. |
Noch einmal kurz auf die Projektmanagement-Ebene zurück: Die Frage, ob die existierende Anwendung virtualisiert betrieben oder portiert / im Extremfall sogar einem kompletten Refactoring unterzogen werden soll, sollte in einem solchen Fall fundiert entschieden und beantwortet werden.
Die Tipps von mir dazu: Entscheidend ist die Zukunft des Ganzen: Ist Dein Kunde, der Liegenschaftsbesitzer/Vermieter in diesem Fall, bald im Pensionsalter und es ist somit abzusehen, dass nur er mit Deiner seinerzeit gestrickten Lösung noch solange arbeitet, solange er geistig noch mag, dann ist Virtualisierung, d.h. 16-Bit-Umgebung zur Verfügung stellen, das Richtige.
Hast Du hingegen einen längeren Zukunftshorizont vorgesehen, z.B. Du willst Deine Lösung auch gegenüber anderen Liegenschaftsbesitzern anbieten (Neukunden), dann sind Portierung (=Du übernimmst des Quellcode z.B. ins FreeBasic mit dem Ziel einer 32-Bit-Windows-.EXE, aber möglichst minimaler Anpasssung -> Compilierung mit "-lang qb") oder gar Refactoring (=Du schreibst die gesamte Anwendung weitgehend neu unter Nutzung moderner Sprachstrukturen [z.B. die objektorientierten Ansätze von FreeBasic -> Arbeiten mit Klassen und Objekten] zwecks künftig besserer Wartbarkeit) sinnvoll.
In Deinem Fall würde ich das Kundengespräch mit diesen Erbnachfolgern aufsuchen und konkret fragen, in welcher Form sie das Liegenschaftseigentum ihres Vaters künftig weiterverwalten möchten. Entscheiden sich diese nämlich dazu, das Ganze an eine professionelle Liegenschaftsverwaltung zu verkaufen (und diese Firma XY Immobilien AG hat ihr eigenes EDV-System), dann wären Deine Bemühungen mit der Portierung/Refactioring plötzlich für die Katze... _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
Neuling
Anmeldungsdatum: 19.08.2013 Beiträge: 12 Wohnort: Baienfurt (DE)
|
Verfasst am: 05.09.2013, 11:28 Titel: Einstieg finden |
|
|
@drael: Gespräche, sowohl mit dem derzeitigen als auch den künftigen Nutzern, haben ergeben, dass ich die Umsetzung in eine "echte" Windows-Anwendung angehen soll. Es liegt in meinem Ermessen, wie viel ich davon umsetze. Aber Sinn soll das Ganze dann doch machen.
Wirtschaftlich ist es für's erste unrentabel. Wenn es mir gelingt, eine gute Applikation zustande zu bringen, steht einer Vermarktung nichts im Wege; zumindest ist es einen Versuch wert. Aus diesem Grund und um in die Materie "objektorientierte Programmierung" hinein zu kommen, würde ich gerne diese Aufgabe angehen. An einem konkreten Projekt mit einem klaren Ziel ist dies leichter zu erreichen, als wenn man "nur so" loslegt. Erfahrungsgemäß macht man dann nur das, was man eh schon kann. Die Tiefe und der Biss fehlen dann, zumindest bei mir.
@RockTheSchock: Ich sehe es als besondere Herausforderung, in der bekannten Sprache zu bleiben. Es wäre vllt. einfacher, die Sache ganz neu in einer anderen Sprache - C, C++, Java o.ä. - anzugehen. Programmieren habe ich nie "professionell" gelernt, es war und ist ein Hobby von mir.
Inzwischen habe ich weitere kleine Codes erprobt und komme der Materie näher. Eines habe ich damals nicht ganz verstanden und nur "angewandt". Heute brauche ich aber für eine saubere Programmierung das Verständnis; sonst wird es kompliziert oder sehr ineffektiv. Dazu gehört folgender Code:
http://www.freebasic-portal.de/benutzer/neuling-525.html
Kann es sein, dass (auch bei korrekter Deklaration mit SHARED) die Variable "Fir" nicht den gewünschten Inhalt hat. Nachfolgend ist der Inhalt der Datei in Hex (dargestellt mit WinHex) und hier eingefügt. Warum stimmt der Dateiinhalt nicht mit den Eingaben überein?
01 00 00 00 F0 4C 73 00 14 00 00 00 24 00 00 00
20 4D 73 00 0F 00 00 00 24 00 00 00 50 4D 73 00
13 00 00 00 24 00 00 00 80 4D 73 00 16 00 00 00
24 00 00 00 B0 4D 73 00 08 00 00 00 24 00 00 00
E0 4D 73 00 0A 00 00 00 24 00 00 00
Die Variable "Fir" soll doch den Zweck haben, dass mit ihr der ganze Datensatz kompakt ausgegeben werden kann. Eigentlich (und idealerweise) auf dem Bildschirm, dem Drucker oder in eine Datei - selbstredend ohne Formatierung. Wo liegt mein Denkfehler oder was fehlt im Code noch, um dies zu erreichen?
Gibt es fertige Eingabe-Routinen, die parametergesteuert bei der Eingabe die Cursorsteuerung (up, down, right, left, pg up, pg down, end, pos1) berücksichtigt? Die Abfrage nach dem korrekten Inhalt (Datum muss existieren, sonst wird das Eingabefeld nicht verlassen) muss jeder wohl selbst neu programmieren?
Vorab vielen Dank für eure Hilfe. |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 05.09.2013, 12:09 Titel: Re: Einstieg finden |
|
|
Hallo!
Du meinst den hier, oder?
http://www.freebasic-portal.de/porticula/daten-speichern-test-1644.html
Übrigens, wenn du Bankdaten in der Anwendung verwaltest, solltest du heute auf jeden Fall auch IBAN+BIC berücksichtigen. Wenn du mit der Programmierung fertig bist, ist sonst die Anwendung womöglich schon nicht mehr benutzbar, weil ja 2014 die SEPA-Umstellung erfolgt.
Neuling hat Folgendes geschrieben: | Gibt es fertige Eingabe-Routinen, die parametergesteuert bei der Eingabe die Cursorsteuerung (up, down, right, left, pg up, pg down, end, pos1) berücksichtigt? Die Abfrage nach dem korrekten Inhalt (Datum muss existieren, sonst wird das Eingabefeld nicht verlassen) muss jeder wohl selbst neu programmieren? |
Programme mit zu bedienenden Benutzeroberflächen werden heute in aller Regel mit grafischen Oberflächen entwickelt. Tastaturnavigierte, konsolenbasierte Eingabeoberflächen (wie z. B. diese hier: http://www.sapdesignguild.org/goodies/images_hist/R2-2.GIF) werden heute normalerweise nicht mehr neu entwickelt. Dementsprechend ist das Angebot an passenden Bibliotheken, Tutorials etc. "überschaubar".
Trotzdem ein paar Tipps zum Thema:
Wenn du mit grafischen Benutzeroberflächen arbeiten möchtest, kannst du mal einen Blick auf wxFBE werfen. Da entwickelt unser Community-Mitglied MOD gerade an einer Entwicklungsumgebung, die das vereinfachen soll. Du kannst MOD insb. abends auch direkt im FreeBASIC-Chat erreichen und Fragen dazu stellen.
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
RockTheSchock
Anmeldungsdatum: 04.04.2007 Beiträge: 138
|
Verfasst am: 05.09.2013, 14:12 Titel: Re: Einstieg finden |
|
|
Neuling hat Folgendes geschrieben: | Kann es sein, dass (auch bei korrekter Deklaration mit SHARED) die Variable "Fir" nicht den gewünschten Inhalt hat.
01 00 00 00 F0 4C 73 00 14 00 00 00 24 00 00 00
20 4D 73 00 0F 00 00 00 24 00 00 00 50 4D 73 00
13 00 00 00 24 00 00 00 80 4D 73 00 16 00 00 00
24 00 00 00 B0 4D 73 00 08 00 00 00 24 00 00 00
E0 4D 73 00 0A 00 00 00 24 00 00 00
|
Fir enthält genau das was du angegeben hast
Code: |
TYPE FirmenDatei Field = 4
As Short DFirmaNr: ' = 0
As String DName: ' String * 30
As String DStrasse: ' String * 25
As String DOrt: ' String * 25
As String DBankname: ' String * 20
As String DBLZ: ' String * 8
As String DKontoNr: ' String * 10
End Type
Public Sub DateiSchreiben
'...
'...
Print OffsetOf(FirmenDatei,DFirmaNr),OffsetOf(FirmenDatei,DName),OffsetOf(FirmenDatei,DStrasse),OffsetOf(FirmenDatei,DOrt) '...
End Sub
|
Das Alignment ist standardmäßig auf 4 Bytes gesetzt deshalb startet das zweite feld bei 4 statt bei 2 bytes. Die normalen Strings enthalten im UDT nur einen 12 Byte großen Descriptor aber keine Daten. Sobald du Strings fester Länge nutzt liegen die Daten in der UDT Struktur. Willst du die Strings mit dynamischer länge in eine Datei abspeichern, geht das über "Open ... For Output" und "Write # oder Print #"
Datensätze mit "Open ... FOR RANDOM" zu lesen und zu schreiben ist eine schnelle und einfache Möglichkeit, die aber wenig flexibel ist und nur Felder fester länge zulässt. Willst du Memofelder mit variabler Länge speichern musst du etwas mehr Aufwand betreiben. Du kannst natürlich für einen Straßennamen 25 Zeichen reservieren, aber sollte das später nicht mehr reichen, läufst du gefahr alle Datendateien in das neue Format konvertieren zu müssen. Da sind CSV Dateien für Text zwar viel langsamer als binärdateien wegen der Umwandlung von binär in Text aber deutlich flexibler.
Ein anderer Ansatz ist eine SQL Datenbank zu wählen. In deinem Fall bietet sich SQLite an. Du kannst Erweiterungen an der Datenstruktur flexibel vornehmen und solange du vorhandene Felder vergrößerst bzw. neue Felder hinzufügst läuft dein Programm ohne Fehler weiter.
Zuletzt bearbeitet von RockTheSchock am 05.09.2013, 15:10, insgesamt 3-mal bearbeitet |
|
Nach oben |
|
 |
HorstD
Anmeldungsdatum: 01.11.2007 Beiträge: 110
|
Verfasst am: 05.09.2013, 14:45 Titel: |
|
|
Zitat: |
Fir enthält genau das was du angegeben hast |
Er will aber wahrscheinlich folgendes:
Code: |
01 00 4f 74 74 6f 20 4d 61 79 65 72 20 56 65 72
6c 61 67 20 48 48 20 20 20 20 20 20 20 20 20 20
48 61 75 73 20 61 6d 20 42 61 63 68 20 32 32 20
20 20 20 20 20 20 20 20 20 31 32 33 34 35 20 4e
69 72 67 65 6e 64 68 61 75 73 65 6e 20 20 20 20
20 20 48 61 6e 73 69 73 20 48 61 75 73 62 61 6e
6b 20 42 65 72 6c 38 37 36 35 34 33 32 31 30 30
38 35 32 34 36 33 35 37
|
|
|
Nach oben |
|
 |
RockTheSchock
Anmeldungsdatum: 04.04.2007 Beiträge: 138
|
Verfasst am: 05.09.2013, 16:57 Titel: Re: Einstieg finden |
|
|
Neuling hat Folgendes geschrieben: | Gibt es fertige Eingabe-Routinen, die parametergesteuert bei der Eingabe die Cursorsteuerung (up, down, right, left, pg up, pg down, end, pos1) berücksichtigt? Die Abfrage nach dem korrekten Inhalt (Datum muss existieren, sonst wird das Eingabefeld nicht verlassen) muss jeder wohl selbst neu programmieren? |
Eine kleine Routine für Screen 0, die nicht alle Funktionen enthält. Müsste etwas angepasst werden für andere Modi.
http://www.freebasic-portal.de/porticula/eingabe-box-fuer-console-modus-1645.html
@horst:
Wenn man die String Daten einfach in den Binärblob hängt, muss man die Datei mit "open ... for binary" öffnen und die Zugriffsfunktionen selbst schreiben. D.h Felder müssen einzeln mit Get/Put gelesen und geschrieben werden. Natürlich lässt sich das wieder mit einer eigenen Funktion abstrahieren, aber erstmal muss man jedes Feld einzeln angehen und Fehler in einem Datensatz führen dazu dass nichts mehr richtig gelesen werden kann. |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|