Gab es dort eine Überladung mit Variant? (wo dann drin der interne Typ des Variant ausgewertet wird)
Lösungen z.B. für Boolean:
Delphi-Quellcode:
json.AddPair(prop, Boolean(value));
json.AddPair(prop, VarToBool(value));
Nein, ich habe da nichts überladen. Das mit dem VarTo.. sieht interessant aus, das werde ich versuchen (im Moment habe ich es auskommentiert, weil ich noch andere Probleme habe
).
Gerade ein anderes kniffliges Problem:
Ich habe SynEdit aus dem GetIt installiert.
Und weil im Git es dazu keine Issue gibt (und auch wenn ich ein neues Projekt damit starte, problemlos), wird das wahrscheinlich nur bei mir das Problem sein. In einem neuen Projekt funktioniert das SynEdit mit den selben Einstellungen
Wenn ich jetzt mein Projekt öffne, das ein SynEdit enthält, sagt mir die
IDE, bevor noch irgendwas davon erscheint:
Zitat:
Listenindex außerhalb des gültigen Bereichs (0). TList<System.Integer> ist leer
Aha!?
Die Details erzählen mir..
Zitat:
[23308D4C]{SynEditDR290.bpl} System.Generics.Collections. + $24
[23319B83]{SynEditDR290.bpl} Syneditwordwrap.TSynWordWrapPlugin.RowCount + $1F
[233465D9]{SynEditDR290.bpl} Synedit.TCustomSynEdit.GetDisplayRowCount + $75
[23312CCF]{SynEditDR290.bpl} Syneditkbdhandler.Finalization + $A67
[23312D8A]{SynEditDR290.bpl} Syneditkbdhandler.Finalization + $B22
[23339F5D]{SynEditDR290.bpl} Synedit.TCustomSynEdit.UpdateScrollBars + $41
[23341971]{SynEditDR290.bpl} Synedit.TCustomSynEdit.SizeOrFontChanged + $D1
[2333A748]{SynEditDR290.bpl} Synedit.TCustomSynEdit.WMSize + $1C
Wenn ich die Komponente in ein neues Projekt kopiere, kommt es nicht zu diesem Fehler.
Beim Ausführen meines Programms knallt es mit der selben Meldung in der
unit SynEditWordWrap hier (die // stammen vom Autor):
Delphi-Quellcode:
// fLineOffsets[n] is the index of the first row of the [n+1]th line.
// e.g. Starting row of first line (0) is 0. Starting row of second line (1)
// is fLineOffsets[0]. Clear?
TSynWordWrapPlugin =
class(TInterfacedObject, ISynEditBufferPlugin)
private
fLineOffsets: TList<Integer>;
[...]
constructor TSynWordWrapPlugin.Create(aOwner: TCustomSynEdit);
begin
inherited Create;
// just to work as reminder in case I revert it to a TComponent...
if aOwner =
nil then
raise Exception.Create( '
Owner of TSynWordWrapPlugin must be a TCustomSynEdit' );
fEditor := aOwner;
fLineCount := fEditor.Lines.Count;
fLineOffsets := TList<Integer>.Create;
fRowLengths := TList<Integer>.Create;
Reset;
end;
function TSynWordWrapPlugin.RowCount: integer;
begin
if fLineCount > 0
then
Result := fLineOffsets[fLineCount - 1];
// <---- da: EArgumentOutOfRangeException
Assert(fRowLengths.Count = Result);
end;
Ich kenne mich mit Generics nicht aus - fehlt da was bei der Initialisierung? Woran kann das sonst liegen und wie behebe ich das?