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, 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.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.
|