Allgemeine Probleme |
erledigt |
|||
OnKeyPress (TControl) funktioniert nur noch ab ASCII 20. Enter gibt daher nicht #13 oder Del nicht #8 zurück. |
31.05.2010 | |||
TEdit aktives Element, zum Beispiel TButton, kann nicht mehr aus einem Element wie TEdit, TCombobox usw heraus via Enter aktiviert/aufgerufen werden. (Es funktioniert jedoch z.B. aus TCheckBox) |
31.05.2010 |
04.03.2011 bereinigt download |
||
TcRegistry (Unit INIFILES) ReadStrings macht nichts. Es fehl der entsprechende Code. (analog auch ReadSectionValues, WriteInteger, WriteBool, WriteStrings, ReadData, ReadLongWord...) |
03.06.2010 | bereinigt | ||
TabbedNotebook beim Blättern (+/-) korrespondiert die Lasche (Tab) nicht immer mit der aktuellen Seite. Problem 1 : Beim erstmaligen Anzeigen wird z.B. als aktiver TabIndex = PageIndex gezeichnet, was falsch ist wenn z.B. der erste Tab aus mehreren Seiten besteht. Problem 2 : beim Vorwärtsblättern werden die Tabs nach links verschoben obwohl nur innerhalb einem Tab zur nächsten Seite geblättert wird. Problem 3 : entsprechend verschwindet bald einmal der aktuelle Tab. Problem 4 : beim Zurückblättern verschieben sich dieTabs nicht korrekt nach rechts, sodass bald mal der aktuelle Tab gar nicht mehr angezeigt wird. |
27.04.2010 |
03.09.2010 bereinigt download |
||
Memo.Lines.Add ist der erste Eintrag eine Leerzeile, wird sie nicht eingefügt Entsprechend wird auch bei Memo.Lines.LoadFromFile eine Leerzeile am Anfang nicht eingefügt. |
14.06.2010 | |||
TMenuItem OnClick wird nicht aufgerufen wenn es Untermenues hat (Submenu=true) |
17.06.2010 | |||
Eigenschaft Cursor Mauszeiger wird nicht gemäss eigener Definition (z.B. crHand anstatt crDefault) angezeigt (z.B. TButton, TSpeedButton...) |
20.09.2010 | |||
Hint sollte sich beim zeichnen nicht genau unter dem Cursor befinden, da man sonst z.B. einen Button darunter nicht mehr drücken kann. Zudem ist die Breite des Rahmens oft nicht sauber an die Textlänge angepasst (meist ist der Rahmen zu kurz). |
20.09.2010 |
27.10.2010 bereinigt download |
||
StrToInt Der Rückgabewert darf offenbar auch vom Typ LongWord sein. Ein String darf daher einem Wert bis MAXLONGWORD entsprechen. Ist der Wert grösser wird jedoch kein Error ausgegeben und der Rückgabewert ist falsch. ( Beispiel: StrToInt('4294967296') = 0 , StrToInt('42949672956') = 4294967292 ) |
04.06.2010 | |||
IntToStr darf wirklich max nur ein LongInt sein. Mit LongWord gibt's keinen Fehler, doch ist die Rückgabe falsch. Wäre schön wenn IntToStr auch mit LongWord funktionieren würde. ...oder eben z.B. eine neue Funktion : Function LongWordToStr(Value: LongWord): String; Begin Str(Value, Result); End; |
Nov 2010 | |||
toStr s := toStr(4294967296) führt zu einer Compiler-Fehlermeldung 'Illegal character in number' Ganzzahlige Werte sind nur im Bereich -2147483648 bis 4294967295 möglich Beispiele: s := toStr(4294967295+1) gibt '0' zurück s := toStr(4294967297) gibt '1' zurück s := ToStr(-2147483648) gibt '-2147483648' zurück s := toStr(-2147483649) gibt '2147483647' zurück s := toStr(-2147483649.0) gibt '-2.14748364900000E+0009' zurück |
12.04.2018 | |||
Trunc() liefert falsche Resultate bei grossen Werten : zum Beispiel: var d : Double; d := 6.36310080000005E+0013; e := trunc(d); --> -2147483648 --> falsch |
06.06.2017 | |||
tStrings anstatt property TabSeperator steht roperty TabSeperato |
20.07.2010 | bereinigt | ||
PathExists (Unit sysutils) Berücksichtigt nicht, dass ein SubDir auch zusätzlich das Attribut faArchive besitzen kann (JFS). Auch gibt es für SubDirs Attribut=22 zum Beispiel für c:\Nowhere (SysFile + Hidden + Directory) |
05.01.2011 |
bereinigt download |
||
DelTree (Unit sysutils) Ein Fehler in DelTree führt dazu, dass lediglich leere Verzeichnisse gelöscht werden. |
05.01.2011 |
bereinigt download |
||
StrComp (Unit sysutils) Diese Funktion gibt falsche Werte zurück. Man könnte es mit StrIComp umgehen. |
09.05.2019 |
09.05.2019 bereinigt download |
||
StrALCopy (Unit sysutils) Diese Routine enthält ein Fehler. |
09.05.2019 |
09.05.2019 bereinigt download |
||
TImage Eigenschaft TransparentColor hat keine Funktion |
05.01.2011 | |||
TMultiColumnListBox Sort(section:Integer) hat offenbar Probleme (Spalte mit Datum) und ist extrem langsam. |
10.12.2010 | |||
PosN(CONST substr, s:STRING; p : Byte) : Byte; (Unit uString) Sucht nach p-ten String "substr" im String "s". Diese Funktion ist fehlerhaft wenn p = 1 ist. Beispel : a := PosN('b','abcabc',1); //suche erstes 'b' in 'abcabc' kommt immer 0 zurück! Das ist falsch |
23.04.2018 |
24.04.2018 bereinigt download |
||
mrHelp in der Unit CLASSES fehlt die Definition : const mrHelp = mrBase+52; //cmHelp |
12.04.2018 | |||
TEditDate (unit Calendar) Datenübergabe nur via Variable Date (vom Typ tDateTime) möglich. Somit ist eine Eingabeprüfung auf korrektes Datum (zB 31. Februar) nicht möglich. Zudem ist die Eingabe komplett unkorrekter Werte (und Zeichen) möglich. neu : erweitert mit property Year, Month, Day und ReadOnly |
10.06.2017 |
10.06.2017 bereinigt download |
||
AnsiString AnsiString Variablen werden offenbar nach der Deklaration nicht Initialisiert, so dass es später zu Problemen kommen kann. Daher sollte man AnsiString-Variablen immer zuvor initialisieren ( variable := '' ). AnsiSetString (unit system) wird die Variable zuvor nicht initialisiert kann es danach zu einem Absturz kommen. |
09.05.2019 | |||
Compiler Probleme |
erledigt |
|||
Der Typ Word gibt beim Grössenvergleich mit anderen Typen ein falsches Resultat. Vorallem unangenehm wird's, wenn man eine Konstante definiert, die WDSibyl intern dann als Typ WORD behandelt. Beispiel: const BufferSize_1 = $8001; {32K+1 bytes = 32769} //offenbar intern Typ Word var var_Word : Word; var_int : Integer; begin var_int := 112; if var_int >= BufferSize_1 // 112 >= 32769 ? then bytesToRead := Pred(BufferSize_1) // falsch; dumm gelaufen else bytesToRead := var_int; AStream.ReadBuffer(pBuf^, bytesToRead); // crash var_int := 112; var_Word := 32769; if var_int >= var_Word // 112 >= 32769 ? then bytesToRead := Pred(var_Word) // ebenso falsch; dumm gelaufen else bytesToRead := var_int; //AStream.ReadBuffer(pBuf^, bytesToRead); // crash .. .. end; |
Jan 2010 | |||
Compiler-Fehler bei aktivierter Option "Common subexpressions". Varianten mit unterschiedlichem Ausgang ergeben sich, wenn man die linke Array-Grenze mal auf 0 oder auf 1 setzt. Siehe auch Hinweis unter http://www.wdsibyl.org/Forum/viewtopic/topic/55 Program OptBug; var i,Summe : WORD; Anzahl : Array[0..2] OF WORD; BEGIN Anzahl[1] := 3; Anzahl[2] := 7; Summe := 0; For i := 1 to 2 do BEGIN WriteLn (i*Anzahl[i]); Inc (Summe, i*Anzahl[i]); END; Writeln (Summe); ReadLn END. |
Jan 2010 | |||
Beim Summieren mit LongWord gibt's "Integer overflow". procedure test; { MAXLONGWORD = $ffffffff = 4'294'967'295 } var a,b : Longword; begin a := 2146411008; b := 96247160; a := a + b; { Integer overflow } end; |
||||
Diese Anweisung erzeugt ein Fehler : "Array bounds exceeded" var a : Word; b : LongInt; begin a := 0; b := a - 1000; end; |
10.06.2017 | |||
Compiler-Fehler beim Multiplizieren mit Extended.: var max_Temp : Extended; funktioniert nicht : max_Temp := 4*1024*1024*1024; funktioniert: max_Temp := 1024*1024; max_Temp := 4*1024*max_Temp; Probleme beim Zuordnen : var Wert : Extended; funktioniert : Wert := 2147483647; funktioniert nicht : Wert := 2147483648; Daher ist auch ein Zuordnen von einem grossen Longint zu einer Extended nicht möglich. |
31.07.2013 | |||
Typ Variant : Diesem Typ dürfen fast beliebige Zuordnungen gemacht werden, jedoch ganzzahlige Werte nur im Bereich -2147483648 bis 4294967295. Zudem erzeugt folgendes Beispiel die unsinnige Compiler-Fehlermeldung 'Illegal character in number' procedure Test; var vExample: Variant; begin vExample := 'Hallo'; // Stringzuweisung vExample := 3.141592; // Gleitkommazuweisung vExample := 666; // Integerzuweisung vExample := 4294967295; // LongWord vExample := 4294967296; // Compiler-Fehlermeldung 'Illegal character in number' vExample := 4294967295+1; // Bei Werten grösser 4294967295 gibts Probleme vExample := -2147483648; // LongInt vExample := -2147483649; // Bei Werten kleiner -2147483648 gibts Probleme end; |
12.04.2018 | |||
Compiler-Fehler bei aktivierter Option "peephole Optimierung". So ist es möglich, dass Str(Value:0:999, Result) zu einem Fehler "Float invalid operation exeption (EInvalidOp) occured at CS:EIP =$0000005B:$0001A145 at $0001A145 !" führt. Eine solche Anweisung befindet sich zum Beispiel in der Funktion FloatToStrF() und betrifft Zahlen-Umwandlungsroutinen (FloatToStr, ...) |
04.04.2010 | |||
Debugger Probleme |
erledigt |
|||
Stack 'Unhandled stack invalid exception notification in ...' (z.B. bei rekursivem Aufruf von Prozeduren) |
30.03.2011 | |||
tSearchRec Probleme im Zusammenhang mit dieser lokalen Variablen-Definition. Erzeugt die Meldung "Float invalid operation exeption..." Beispiel : procedure xy; var SearchRec : tSearchRec; begin .... end; |
06.05.2011 | |||
Extended Probleme wenn z.B. innerhalb einer Funktion eine Extended-Variable definiert wird. Fehler-Meldung z.B. "Float invalid operation exeption (EInvalidOp) occured at CS:EIP =$0000005B:$1C059C0C at $1C059C0C !..." Beispiel : function xy; var Wert : Extended; begin .... end; Abhilfe wenn's geht: Double anstatt Extended. |
04.06.2011 | |||
Editor Probleme |
erledigt |
|||
Text suchen via Ctrl-Q-F: Enter führt nicht mehr zum sofortigen Start der Suche. (siehe Problem OnKeyPress (TControl)) (in tEdit bereinigt 04.03.2011) |
04.02.2010 |
04.03.2011 bereinigt download |
||
Ctrl-Ins das Speichern in die Zwischenablage (Ctrl-Ins) kann nach kurzer Zeit zur folgenden Fehlermeldung führen : "Exception occured: Heap structure error (EInvalidHeapStructure) Type 12 Group ID -1 at $00024285 !" oder "Access violation exception (EGPFaul) occured at CS:EIP =$0000005B:$000261A0 at $000261A0!" |
04.05.2010 | |||
gehe zu Zeile Das Eigabefeld für die Zeilennummer besitzt leider nicht den Focus. |
07.04.2010 | |||
Hilfetexte in der Entwicklungsumgebung Im Objekt Inspektor wird der Hilfetext nicht gefunden, da das Schlüsselwort vermutlich nur aus der Bezeichnung (Eigenschaft, Methode...) besteht. Es gibt aber gleichlautende Eigenschaften in verschiedenen Klassen. In den HLP-Dateien besteht der Schlüssel (neu) aus Eigenschaft und Klasse, also in der Form "xxxxx (xxxxxxxxxx)". |
12.03.2010 | verbessert | ||
Neues Objekt Das bei der Installation angegebene Verzeichnis für die Objekte wird nicht vorgeschlagen. |
13.04.2010 | |||
Komponentenbezeichner umbenennen TLabel.Name (als Beispiel) umbenennen, jedoch lediglich Gross-/Kleinschreibung ändern ; Fehler "Doppelter Komponentenbezeichner" |
03.04.2010 | |||
Komponente/n ausschneiden/einfügen Der/die Komponenten-Name/n wird/werden nicht beibehalten sondern umbenannt. |
03.04.2010 | |||
Doppelklick im Formular auf ein PopupMenu-Objekt funktioniert optisch nur beim Erstenmal korrekt. |
24.06.2017 | |||
Objekt Inspektor Auf der Auswahl-Liste fehlen die tMenuItem-Objekte |
24.06.2017 | |||
Optische Probleme |
erledigt |
|||
Hint in den Programmen nach der Compillierung ist der Rahmen mit gelbem Hintergrund oftmals zu lang (bei Kleinbuchstaben) aber auch schon mal zu kurz (bei Grossbuchstaben). Dafür ist er beim WDSibyl-Editor zu kurz. Zudem sollte er klein wenig versetzt gezeichnet werden, sodass ein Tastendruck auch funktioniert (z.B. tCheckBox, TSpeedButton usw). |
04.04.2010 |
27.10.2010 bereinigt download |
||
TMultiColumnListBox im schmalen weissen Streifen rechts von vert. Scrollbar kann der dahinterliegende Text sichtbar sein (sofern breiter als sichtbarer Bereich). Die Zeilenhöhe kann nicht definiert werden und ist etwas zu klein (oder der Text zu tief). Beispiel: Buchstabe g (WarpSans 9). |
Juni 2010 |
19.11.2010 bereinigt download |
||
TMultiColumnListBox Fonteinstellung wird nicht übernommen (ParentFont=false). MultiColumnList.Items.Count ist leider auf 32767 begrenzt (Integer) Die Spaltensortierung ist bei vielen Einträgen langsam. |
Juni 2010 | |||
TAnalogClock hat optische Probleme bei diversen Bildschirmauflösungen (Uhr nicht immer schön rund) |
07.04.2010 | |||
Diverses |
erledigt |
|||
Ländereinstellungen : In eCS 2.0 rc7 und GA fehlen die Länder-Einträge in der Registry (HKEY_CURRENT_USER\CONTROL PANEL\INTERNATIONAL). Entsprechend werden die Registry-Definitionen aus PM_National verwendet. Diese werden jedoch bei der Installation nicht immer richtig gesetzt (z.B. Schweiz). Daher können Dezimalzeichen (sDecimal), Tausendertrennzeichen (sThousand)... falsch sein. |
31.05.2010 |
ein OS/2- eCS- / ArcaOS - Problem |
||
Diverse Tools |
erledigt |
|||
Help Compiler v1.01 Sobald intern auf Grund der Verarbeitung von Links die Zeilenlänge 255 überschritten wird, gerät der Compiler in einen Loop und zeigt zum Beispiel die Meldung: Error at [289810,0] in OS2API_DE.SHS "Illegal link" Beispiel: .BOLD_UNDERLINE Deklaration .XMP function WSAAsyncSelect(s:TSOCKET;ahWnd:{HWND}; wMsg:{LONGWORD}; lEvent:{LONGINT}):{LONGWORD};{APIENTRY}; 'PMWSock' name 'WSAAsyncSelect'; .EXMP Abhilfe: Zeilenvoschub dazwischen einfügen oder Zahl der Links in dieser Zeile vermindern. |
05.02.2010 | |||
".TITLE" funktioniert nicht und zeigt keine Wirkung. Via ".TITLE" wird keine Definition ":title." in der IPF-Datei erzeugt. Problemlösung: ".IPFC :title." |
31.03.2010 |
29.04.2018 bereinigt |
||
Einrückung links (zum Beispiel via .LEFTMARGIN) oder rechts (zum Beispiel via .RIGHTMARGIN) nicht implementiert. Problemlösung: ".IPFC :lm margin=6." beliebiger Text ".IPFC :lm margin=1." |
28.04.2018 |
29.04.2018 bereinigt |
||
".DLIST" (formatierte Liste) ist im Hilfetext nicht beschrieben. Zudem kann man deren Attribute nicht beeinflussen. Sie wurde fix "verdrahtet". |
28.04.2018 |
29.04.2018 bereinigt |
||
Fussnote z.B. via ".FN / .EFN" ist nicht implementiert. Problemlösung: ".IPFC :fn id=xxxx." belibiger Text ".IPFC :efn." ".IPFC :link refid=xxxx reftype=fn. yyyyy :elink." |
||||
Link auf eine externe Hilfe-Datei mit Suche nach Schlüsselworte ist leider nicht implementiert. |
24.06.2017 | |||
Mögliche Erweiterungen |
erledigt |
|||
GetTickCount Unit System Nicht nur in Unit System für Win32 einbauen sondern auch für OS2. Beispiel: {$IFDEF OS2} function GetTickCount:LongInt; begin Result := tcOS.TickCount; end; {$ENDIF} {$IFDEF WIN32} function GetTickCount; external kernel32 name 'GetTickCount'; {$ENDIF} |
Jan 2010 | |||
Typ int64 einbauen |
Jan 2010 | |||
function Hex2Longint(Str : string) : Longint; einbauen function RandomRange(const AFrom, ATo: Integer): Integer; einbauen function AnsiCompareStr(const S1, S2: AnsiString): LongInt; einbauen function AnsiSameStr(const S1, S2: AnsiString): Boolean; einbauen function AnsiStrUpper(Str: PChar): Pchar; einbauen function CompareByte(Const buf1,buf2;len:LongInt):LongInt; einbauen |
Jan 2010 | |||
EA-Routinen einbauen, zum Beispiel SysQueryEAList(), SysGetEA(), SysPutEA(), ...usw oder tEAs = class(), tEA = class(), tEA_Ascii = class(), tEAList = class(), .....usw |
Jan 2010 | |||
tMenuItem.Bitmap einbauen |
Jan 2011 | |||
Wünsche für neuen Compiler |
erledigt |
|||
overload Wie im C++ sollten überladene Prozeduren und Funktionen möglich sein. Überladene Prozeduren sind Prozeduren mit demselben Namen aber unterschiedlichen Parameterlisten. Beispiel: function LeftStr(const AText: String; const ACount: INTEGER): String; overload; function LeftStr(const AText: AnsiString; const ACount: INTEGER): AnsiString; overload; oder: procedure swap(var a,b : integer); overload; procedure swap(var a,b : double); overload; procedure swap(var a,b : String); overload; |
||||
Wie in C++ sollte es die Möglichkeit geben einen Wert im Prozedurkopf mit "=" anzuhängen der gesetzt wird, wenn eine Funktion mit weniger als der nominellen Parameterzahl aufgerufen wird. Beispiel: procedure init(alles:boolean = true); begin ... end; procedure Neu; begin init; end; |
||||
stored Beispiel: property ChildDefs: TFieldDefs read GetChildDefs write SetChildDefs stored HasChildDefs; |
||||
Unterschiede Delphi / WDSibyl |
Delphi |
WDSibyl |
tCanvas Font.Color FillRect(Rect) |
CharColor FillRect(Rect,Color) |
tDrawGrid onExit, onKeyDown, onKeyPress Font : tFont GridLineWith : LongInt onSelectCell(Sender:TObject; ACol,ARow:Integer; var CanSelect:Boolean); |
fehlt fehlt fehlt onSelectCell(Sender:TObject; ACol,ARow:Integer); |
tMenuItem RadioItem : Boolean; Visible : Boolean; |
fehlt fehlt (alternativ: MenuItem.Caption := '') |
tTimer Enabled := true; (Boolean) Enabled := false; (Boolean) |
fehlt (alternativ: Timer.Start) fehlt (alternativ: Timer.Stop) |
Exit funktion test : Integer; begin ... if a = b then Exit(1); //ab Delphi 2009 end; |
funktion test : Integer; begin ... if a = b then begin Result := 1; Exit; end; end; |
Feld = array of tTyp SetLength(Feld, ...) Feld = array of array of tTyp SetLength(Feld, ... , ... ) |
fehlt (alternativ: array[...] of tTyp fehlt fehlt (alternativ: array[... , ...] of tTyp fehlt |