Support und Hilfe

XProfan und Windows Vista / Windows 7 / Windows 8 / Windows 10 / Windows 11
Grundsätzlich laufen alle 32-Bit Versionen von XProfan auch problemlos unter aktuellen Windowsversionen. Ältere Versionen (bis 9.1) benötigen Schreibrechte auf INI-Dateien im Windows-Verzeichnis und somit Admin-Rechte. Es ist grundsätzlich empfehlenswert bei der Installation darauf zu achten, das XProfan-Verzeichnis nicht unterhalb des Verzeichnisses "Programme" bzw. "Program Files" anzulegen. XProfan benutzt aab Version 10 keine INI-Dateien, sondern lediglich eine Konfigurationsdatei im Verzeichnis, in dem sich XProfed.exe befindet.

Ab Windows Vista gehört Winhelp32 nicht mehr zum Lieferumfang von Windows. Dieses Programm ist aber nötig, um ältere Hilfedateien im HLP-Format zu nutzen. Damit auch die alte Hilfe unter Windows Vista und Windows 7 funktioniert, gibt es bei Microsoft die Winhlp32 für Vista un neuere Versionen zum Download.

Ab XProfan 11 gehört die HTML-HILFE (.chm) zum Lieferumfang und die mitgelieferte Version des XProfed benutzt diese. Für Nutzer älterer Entwicklungsumgebungen, wie z.B. PrFellow, wird die aktuelle Hilfe allerdings auch noch im alten Format (.hlp) erstellt und im Download-Bereich dieser Seite zur Verfügung gestelltt.

ProBase 2003 und XProfan 10
ProBase 2003 für XProfan funktioniert in der derzeit ausgelieferten Version nur mit XProfan bis einschließlich Version 9.1. Bei XProfan 10 musste auch die Datei HELFER.EXE an die aktuelle XProfan-Version angepasst werden, so dass sich Probase unter XProfan 10 nicht mehr starten läßt.

Abhilfe schaffen die drei Dateien, die es hier zum Download gibt: Einfach diese drei Dateien nach der Installation von ProBase 2003 in das Verzeichnis kopieren, in das ProBase installiert wurde (das XProfan-Verzeichnis), und es sollte alles wie gewohnt funktionieren.

(Für XProfan 11 gibt es ProBase 2009, für XProfan X2 und neuer ist ProBase 2015 zu verwenden.)

Bekannte Probleme und Lösungen zu

Folgende Probleme aus XProfan X4 sind in Version X4a behoben:

(Aktuelle Version PROFAN.EXE / PRFRUN32.EXE vom 8. September 2018)

(Aktuelle Version PROCOMP.EXE vom 6. September 2019)

Das Update von Version X4 Version X4a gibt es hier kostenlos zum Download: Patch für Interpreter und Runtime (8.September 2018) + Compiler (6. September 2019).

WideStrings konnten nicht als Parameter an Prozeduren und Funktionen übergeben werden. Dieser Bug ist vermutlich seit Version X2 vorhanden und wurde nun behoben.

Die Ausgabe von SQL-Ergebnissen mit "SQLExec" (ODBC) in Dateien (Modus 2) war fehlerhaft. Dieser Bug ist durch die Erweiterung auf XML und JSON in X4 entstanden und nun behoben. ("SLExec" (SQLight) und "FBExec" (Firebird) waren davon nicht betroffen.)

Der Compiler gab Debug-Messageboxen aus, die die einzelnen Zeilen der Unit anzeigten.


Folgende Probleme aus XProfan X3 sind in Version X3.1 behoben:

(Aktuelle Version PROFAN.EXE / PRFRUN32.EXE / PROFCOMP.EXE vom 31. März 2016)

Das Update von Version X3 Version X3.1 gibt es hier kostenlos zum Download: Patch für Interpreter, Runtime und Compiler (01.April 2016).

Alle mir bislang bekannten Bugs wurden gefixt.
Insbesondere in FreeProfan wurden einige Bugs gefixt, die auf Unterschiede zwischen Delphi und FreePascal bei numerischem Überlauf und Stringbearbeitung zurückzuführen waren. So führte z.B. in FreePascal der Parameter -1 bei STARTPAINT zum Absturz, ein fehlendes " konnte zum Absturz führen und PASSWORD funktionierte im Modus 1 nicht korrekt. Außerdem wurde in FreeProfan ein Problem beim Anzeigen der Menüs behoben.
Für alle Versionen: Ein Bug bei der Funktion DEL$() wurde beseitigt. Probleme mit komprimierten Runtimes/Programmen wurden behoben.

Neue Features:

Menü-Icons bei Standardmenüs
Bislang funktionierten Icons in Menüs nur mit User-Drawn-Menüs, die durch die Menüfunktionen vom Programmierer farblich und mit Fonts angepasst werden können. Ein Nachteil der User-Drawn Menüs ist, dass die Auswahl eines Menüicons direkt über Hotkey nicht möglich ist, sondern der Menüpunkt bei Tastaturbedienung über die Kursortasten angewählt werden muss. Außerdem gefällt Manchem der normale Windows-Stil bei den Menüs besser.
Jetzt ist es auch möglich, bei Standard-Menüs den einzelnen Menüpunkten ein Icon zuzuweisen. Hierzu muss das Handle des Icons einfach negativ übergeben werden.
HINWEIS: In XProfan tragen nun die Funktionen CREATE("HIcon",...) und IMAGELIST("GetIcon",...) dafür Sorge, dass das Handle eines Icons als LongInt (bzw. QuadInt in FreeProfan64) immer ein positiver Wert ist. Ermittelt man das Icon-Handle mit anderen Funktionen, etwa der Windows-API, muss man sich selbst darum kümmern. Hintergrund: Da ein Handle von Hause aus ein vorzeichenloser Integerwert (32 bzw. 64 Bit) ist, kann seine Entsprechung als vorzeichenbehafteter Integer auch negativ sein, wenn der Wert in der oberen Hälfte des Wertebereichs eines vorzeichenlosen Integers ist. Dann sollte man das ermittelte Icon zerstören und es neu ermitteln, solange bis ein Wert im unteren Bereich zurückgeliefert wird.

Embedded Vars
Es können jetzt, in Anlehnung an "embedded SQL" (siehe Hilfe), auch in Stringliteralen Variablen direkt eingebettet werden. Dazu wird eine neue Escape-Sequemnz eingeführt: "\:". Dahinter folgt der Name der Variablen. Numerische Variablen werden wie mit STR$() in Strings umgewandelt. Den Abschluss bildet bei Variablen mit Postfix eben dieses, bei Variablen ohne Postfix ein Semikolon. Beispiel:
  var string name = "Max Maier"
  var int alter = "55"
  print "Hallo \:name;, du bist \:alter; Jahre alt!"
Letztlich bewirkt es das Gleiche wie:
  print "Hallo " + name + ", du bist " + Str$(alter) + " Jahre alt!"

Neue Operatoren
$
Eigentlich sollte man so etwas bei sauberer Programmierung nicht machen, aber wenn man einen String und einen numerischen Wert mit "+" verknüpft, bestimmt der zweite Parameter, ob das Ergebnis errechnet wird oder ob zwei Strings verknüpft werden. Der neue Operator "$" verknüpft nun beide Werte immer als String zu einem String, selbst wenn beides numerische Werte sind. Vor und nach dem "$" muss ein Leerzeichen sein.

==  !=  &&  ||
Es kam der Wunsch auf, in Anlehnung an andere Sprachen die Zuweisung "=" vom Vergleich auf Gleichheit (bislang auch nur "=") zu unterscheiden. In Anlehnung an die häufigsten Programmiersprachen kann nun auch das "==" beim Vergleich verwandt werden. XProfan und FreeProfan erlauben nun beides. Bei der Gelegenheit wurden auch zusätzliche Schreibweisen für "<>", logischem "AND" und "OR" erlaubt wie sie z.B. in C++ oder Java üblich sind. Wichtig: Diese Operatoren müssen zwingend von zwei Leerzeichen eingerahmt sein, um nicht den Parser zum Stolpern zu bringen.

+% -% *% /%
Was jeder Taschenrechner kann, kann nun auch XProfan: die Prozentrechnung:
+%: "Ergebnis = A +% B" - Hier ist das Ergebnis A + B Prozent von A.
-%: "Ergebnis = A -% B" - Das Ergebnis ist A - B Prozent von A
*%: "Ergebnis = A *% B" - Das Ergebnis ist B Prozent von A
/%: "Ergebnis = A /% B" - Das Ergebnis ist 100%, wenn A gleich B Prozent ist.
Beispiel: Brutto = Netto +% Mehrwertsteuer
Kurz: Rechnen wie mit der Prozenttaste des Taschenrechners!

Neue Systemvariablen
$CurrentDir
Da es seit den 32-Bit-Versionen von Windows kein aktuelles Verzeichnis pro Laufwerk mehr gibt (das war eine DOS-Eigenart), ist die Angabe eines Laufwerkbuchstabens bei der Funktion GETDIR$() sinnlos. Daher wird die Funktion durch die Systemvariable $CurrentDir abgelöst.

&hWin &mWin
Da &uWin und &sWin mit dem LongInt-Kennzeichen anfangen und %hWin und %mWin mit dem Integer-Kennzeichen, führt diese Uneinheitlichkeit gerne zu Tippfehlern, obwohl Integer und Longint beide 32 Bit groß sind. Als %hWin und %mWin eingeführt wurden, war das damalige Profan noch in 16-Bit und für Windows 3.x geschaffen. Da gab es noch keine Longints in Profan. Nun sind auch die Schreibweisen &hWin und &mWin erlaubt.

Verbesserungen/Korrekturen im Textmodus
PRINT und TBOX wirken immer nur auf das Hauptfenster und werden von der Umleitung nicht betroffen. (So steht es auch eigentlich schon immer in der Hilfe.)
Auch bei COLOR habe ich den unerwünschten Nebeneffekt, dass das nachfolgenbde DRAWTEXT auch im Hauptfenster landete, eliminiert. (Nicht eliminiert, habe ich den bislang ungeplanten Nebeneffekt, dass der COLOR-Befehl zusätzlich auch die Umleitung nimmt und für DRAWTEXT wirkt.)

Folgende Probleme aus XProfan X2.1 sind in Version X2.1b behoben:

(Aktuelle Version PROFAN.EXE / PRFRUN32.EXE / PROFCOMP.EXE vom 19. März 2014)

Das Update von Version X2.0a bis X2.1 auf Version X2.1b gibt es hier kostenlos zum Download: Patch für Interpreter, Runtime und Compiler (19. März 2014).

  • Leider hatte sich wohl in XProfan X2 ein Bug eingeschlichen, der dazu führte, dass die Funktion BlockRead() nicht wie erwartet die korrekte Anzahl der kopierten Bytes zurückgab. Das Problem ist nun behoben.
  • Bei bestimmten SQL-Abfragen mit VarChar-Feldern konnte es zu Abstürzen wegen unzulässiger Speicherzugriffe kommen. Das Problem wurde behoben.   

Nähere Infos bei den entsprechenden Themen im Forum.

Folgende Probleme aus XProfan X2, X2.0a bis X2.0d sind in Version X2.1 behoben:

(Aktuelle Version PROFAN.EXE / PRFRUN32.EXE / PROFCOMP.EXE vom 03. Juni 2013)

Das Update von Version X2.0a bis X2.0d auf Version X2.1 gibt es hier kostenlos zum Download: Patch für Interpreter, Runtime und Compiler (03.Juni 2013).

  • Die Rückgabe von Arrays aus Prozeduren/mehrzeiligen Funktionen funktionierte nicht korrekt (seit X2.0)
  • $D kam noch nicht mit den neuen Variablen ohne Postfix klar.
    Zusätzlich können jetzt auch einfache Bereichsvariablen angegeben werden. Es werden Größe und Adresse ausgegeben.
  • Absturz bei Addstring ""
  • Val funktionierte bei Leerstrings nicht korrekt
  • Fehler in WriteIni behoben
  • Beim Abbruch des Threads von DownloadFile$ wird nun auch %Loading zurückgesetzt.
  • Die Übergabe eines Array-Elementes an eine Prozedur oder Funktion schlug fehl.
  • Fehler beim Rechnen mit Werten bzw. Zusammenfügen von Strings aus Elementen in Struktur- oder Objektarrays.
  • SCREENCOPY und WINCOPY wurden komplett neu geschrieben und funktionieren wieder mit allen Druckern.
  • ... und alle weiteren bekannten Bugs

Sonstige Verbesserungen:

  • Das Einbinden von einfachen Variablen (embedded SQL) funktioniert nun auch mit Variablen ohne Postfix.
    Die Variablenbezeichnung muss in diesem Fall mit einem Semikolon enden.
    Beispiel:
      db("SQLExec", "SELECT * FROM tabelle WHERE name = :such;", hGrid)
    In diesem Fall ist such eine Stringvariable.
  • Mit der Compilerdirektive $R kann nun ein Runtimemodul angegeben werden. ACHTUNG: $R hat absoluten Vorrang.
    Die Angaben im Projekt, per Umgebungsvariable oder Kommandozeile werden dann nicht berücksichtigt.
    $R kann nur im Hauptprogramm stehen, nicht aber in Includes oder Units.
    Beispiel:
        $R C:\Runtimes\OhneIcons\prfrun32.exe
  • Für 64-Bit-Windows: Nutzen der 64-Bit-Registry dort wo normalerweise auf die 32-Bit-Kompatibilitätseinträge
      umgeleitet wird durch neue Set-Unterfunktion: Set("Reg64",n)
      n = 0: Defaultmäßg wird die Umleitung zugelassen, die in den allermneisten Fällen für 32-Bit-Programme
             richtig ist
      n = 1: Keine Umleitung
  • Neue ReadIni$-Parameter zum Füllen der Listboxliste mit Registry-Schlüsseln eines Pfades oder den Wertenamen eines Schlüssels.
      ReadIni$("HKEY_?KEY_1",<Pfad>,"") - fügt der Listboxliste die Keys dieses Pfades hinzu.
      Readini$("HKEY_?VAL_1","<Pfad\Key>","") - fügt der Listboxliste die Wertenamen des Keys hinzu. Bei den Wertenamen wird ein | gefolgt vom Typ des Wertes angehängt. (1 = REG_SZ, 2 = REG_EXPAND_SZ,  4 = REG_DWORD). Es gehen natürlich jeweils HKEY_?KEY_0 bis HKEY_?KEY_6, bzw. HKEY_?VAL_0 bis HKEY_?VAL_6.
  • Auch bei ShellExec wird nun ein Prozesshandle zurückgegeben:
  • Auch Static-Controls haben nun eine Control-ID.
  • Es gibt jetzt auch ein reines Static-Control, ideal z.B. als OpenGL-Fenster und andere Zwecke, wo ein Control gewünscht wird, das zunächst sonst nichts anzeigt:Create("Static", hwnd&, x%, y%, dx%, dy%)
  • QuadInts in Strukturen und Klassen. Als Kennzeichen dient das doppelte kaufmännische Pluszeichen "&&"! 
  • Handles und Adressen in Strukturen. Aus Kompatibilitätsgründen zu FreeProfan, das es sowohl als 32-Bit-Version als auch als 64-Bit-Version verfügbar ist, gibt es Attribute für Strukturen und Klassen, die unter 32 Bit den Longints (4 Bytes) entsprechen und unter 64 Bit den QuadInts (8 Bytes). Das Kennzeichen ist das doppelte Prozentzeichen "%%". In XProfan 2.1 entspricht es also den LongInts.
  • Variablentyp für Adressen und Handles. Aus Kompatibilitätsgründen zu FreeProfan, das es sowohl als 32-Bit-Version als auch als 64-Bit-Version verfügbar ist, gibt es einen neuen Variablentyp, der unter 32 Bit den Longints (4 Bytes) entspricht und unter 64 Bit den QuadInts (8 Bytes). Der neue Typ kann als HANDLE oder POINTER deklariert werden. Wer seine Quellcodes auch unter FreeProfan64 nutzen will, sollte also für Handles grundsätzlich HANDLE verwenden und z.B. für Adressen von Bereichsvariablen POINTER.
     
     

Nähere Infos bei den entsprechenden Themen im Forum und in der aktuellen Hilfedatei.

Folgende Probleme aus XProfan 11.2 sind in Version 11.2a behoben:

(Aktuelle Version PROFAN.EXE / PRFRUN32.EXE vom 10. Mai 2009)

Das Update von Version 11.2 auf Version 11.2a gibt es hier kostenlos zum Download: Patch für Interpreter und Runtime (10.Mail 2009).

  • Ein Bug beim Lesen von TextBlobs mittels ODBC-SQL wurde behoben
  • Ein in einigen Fällen auftretender Bug bei langen Strings in der Anzeige durch die Funktion ListBox$() wurde behoben.

Sonstige Verbesserungen:

  • Der UserMessage-Stack wird jetzt FirstIn/FirstOut abgearbeitet. (Bisher war es FirstIn/LastOut.)
  • Die Systemvariable &GetTickCount ist jetzt deutlich genauer 
     

Nähere Infos bei den entsprechenden Themen im Forum und in der neuen Hilfe.

Folgende Probleme aus XProfan 11.0 und früher sind in Version 11.2 behoben:

(Aktuelle Version PROFAN.EXE / PROFCOMP.EXE / PRFRUN32.EXE vom 13. April 2009)

Das Update von Version 11.0 auf Version 11.2 gibt es hier kostenlos zum Download: Patch für Interpreter, Compiler und Runtime + neue Hilfe, angepasster XProfed und Beispielprogramm (13.April 2009).

  • Ein Bug beim Lesen von TextBlobs mittels ODBC-SQL wurde behoben
  • Ein in einigen Fällen auftretender Bug bei langen Strings in der Anzeige durch die Funktion ListBox$() wurde behoben

Sonstige Verbesserungen:

  • Gestaltungsmöglichkeiten bei Menüs: APPENDMENU und SUBPOPUP haben einen zusätzlichen optionalen Parameter, der das Icon angibt, das vor dem Menüpunkt angezeigt wird. Dieser muss das Handle eines Icons sein, oder 0 oder -1. Bei 0 wird kein Icon genutzt, aber die Anwenderdefinierten Farben (s.u.), -1 wirkt so, als gäbe es den Parameter nicht, d.h. dann werden die Standardmenüs verwandt.
    Über zwei Set-Funktionen lassen sich die Menüfarben einstellen:
    Set("MenuBackCol", C&): setzt die Hintergrundfarbe des Menütextes
    Set("MenuBorderCol", C&): setzt die Hintergrundfarbe unter den Icons
    Mit einer weiteren Set-Funktion kann die Größe der MenüIcons eingestellt werden:
    Set("MenuIconSize", N%) - Hinweis: Die Größe wirkt nur,wenn sie größer ist, als die durch die Schrifthöhe des Menütextes vorgegebene Mindestgröße.
    Ein Beispiel findet sich in der mitgelieferten Beispieldatei XPMENUE.PRF
  • Systemvariable &SCPROC:  Adresse der SubClassProc, Parameter wie Windows-Prozedur
  • Systemvariable $APPDATADIR:  Pfad zu den Anwendungsdaten (mit Backslash am Ende). Insbesondere unter Vista und Windows 7 sollte man diesen Pfad wählen, um darin ein Verzeichnis für die jeweilige Anwendung anzulegen, in dem diese ihre Daten speichert. Zudem ist dann gewährleistet, dass es für jeden Userein eigenes Verzeichnis für die Daten der Anwendung gibt.
     

Nähere Infos bei den entsprechenden Themen im Forum und in der neuen Hilfe.

Folgende Probleme aus XProfan 11.0 und früher sind in Version 11.1 behoben:

(Aktuelle Version PROFAN.EXE / PROFCOMP.EXE / PRFRUN32.EXE vom 26. November 2008)

Das Update von 11.0 auf Version 11.1 gibt es hier kostenlos zum Download: Patch für Interpreter, Compiler und Runtime (26. November 2008).

(In Klammern, die Version, in der der Fehler erstmals auftrat.)

  • end n% funktionierte nur im Interpreter (11.0)
  • Bereichsvariable in einem Ausdruck mit Operator liefert immer 0 anstelle der Adresse (schon immer)
  • WhileLoop von%, bis% setzte in manchen Situation (Bereichsvariable als Parameter) von% immer auf 0 (11.0)
  • Das Disposen von Bereichs-Arrays funktionierte nicht (schon immer)
  • Nach dem Dispose eines Objektes konnte kein New mehr auf dieses angewandt werden (schon immer)
  • Übergabe des Dateinamens in Elementen von Strukturvariablen an BlockWrite und BlockRead() machte Probleme (schon immer)
  • create("hPic",0,"&OGLBMP") konnte bei einigen wenigen OnBoard-Grafikkarten/-treibern den OGL-Speicher durcheinander bringen (schon immer)
  • Das binäre AND "&" wurde im Interpreter in manchen Situationen als logisches AND ("AND")  interpretiert (schon immer)
  • In manchen Situationen führte der Aufruf einer Methode ohne Parameter zum Absturz (11.0)
  • In den Einträgen der Headerdatei durfte kein ";" oder "=" vorkommen (schon immer)
  • In speziellen Situationen konnte ein RichEdit die Funktion des Menüs beeinträchtigen (schon immer)
  • Bei oGL("StartTest") wurde die Einstellung von Set("OGLW2H",...) nicht berücksichtigt (11.0)

Sonstige Verbesserungen:

  • Es können nun auch einzelne Elemente eines Bereichsarrays disposed werden: Dispose Figur#[5]
  • AddFiles *."<Maske>" gewaltig beschleunigt und funktioniert jetzt auch für große Festplatten ohne Stacküberlauf
  • Zuweisung von und an Strukturen in Strukturen bzw. Objekten
  • WINDOW mit mit zwei Parametern erzeugt ein zentriertes Fenster der angegeben Größe
  • Widechars in Bereichsvariablen: @StringW$(), StringW (für Zeichen $0000 - $00FF)  

Nähere Infos bei den entsprechenden Themen im Forum.