Willkommen auf unserer Homepage
WDSibyl  Probleme
 
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  
  DelTree (Unit sysutils)
Ein Fehler in DelTree führt dazu, dass lediglich leere Verzeichnisse gelöscht werden.

05.01.2011 bereinigt  
  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
 
 
 
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