In einem Frame, in einem Pagecontrol, davon in einem TabSheet ist Clientbedeckend ein TsWorksheetgrid enhalten. In diesem werden zuerst die alten Daten mit Clear gelöscht und die neuen Daten eingetragen. Anschliessend sollte nur die Column Breite angepasst werden.
Mir es aufgefallen, das es viel früher schon Probleme geben kann wenn man in den Projektoptionen Trash Variables aktiviert hat. Leider ist das ganze ein Closed Source Projekt mit Frames in Frames. Somit kann ich es nicht auf ein ganz simples Beispiel herunterbrechen. Hier sind alle Checks in den Projektoptionen aktiviert, Heaptrace ist ein und Trash Variables. Zusätzlich wird für den Debugger -dqrf with sets - mit internen Symbolen gearbeitet.
Source in TAvlTree:#0 TAVLTREENODE__SUCCESSOR(0x15d16378) at laz_avl_tree.pp:1410
#1 TSROWCOLENUMERATOR__MOVENEXT(0x15cf66b8) at .\source\common\fpsclasses.pas:547
#2 TSCUSTOMWORKSHEETGRID__AUTOADJUSTCOLUMN(0, 0x138a5e80) at .\source\visual\fpspreadsheetgrid.pas:1422
#3 TSCUSTOMWORKSHEETGRID__AUTOCOLWIDTH(0, 0x138a5e80) at .\source\visual\fpspreadsheetgrid.pas:1381
#4 TFRAMEABLXLS__CB_CHANGE(0x0, 0x1389cf00) at .\framesI20H\frablxls.pas:287
Code: Alles auswählen
function TAVLTreeNode.Successor: TAVLTreeNode;
begin
Result:=Right;
if Result<>nil then begin
while (Result.Left<>nil) do Result:=Result.Left;
end else begin
Result:=Self;
while (Result.Parent<>nil) and (Result.Parent.Right=Result) do
Result:=Result.Parent; // <----- Result.parent $40ba4444
Result:=Result.Parent;
end;
end;
Die originalen Sourcen aus frablxls.pas sind
Code: Alles auswählen
// Write all cells to the worksheet
Inc(j);
Query_AU_PrHeiz.First;
while not Query_AU_PrHeiz.EOF do
begin
for i := 0 to Query_AU_PrHeiz.Fields.Count - 1 do // Skip last Col
case Query_AU_PrHeiz.Fields[i].DataType of
TFieldType.ftFloat: begin
sWorkbookSource1.Worksheet.WriteCellValueAsString(j, i, formatFloat('#,##0.0', Query_AU_PrHeiz.Fields[i].AsFloat),MyFormat);
end
else begin
if SameStr(LeftStr(Query_AU_PrHeiz.Fields[i].FieldName,2),'MP') then begin
hstr:= Query_AU_PrHeiz.Fields[i].AsString;
hstr:= StrToDreiKommaStr(hstr,'');
sWorkbookSource1.Worksheet.WriteCellValueAsString(j, i, hstr ,MyFormat);
end
else begin
sWorkbookSource1.Worksheet.WriteCellValueAsString(j, i, Query_AU_PrHeiz.Fields[i].AsString ,MyFormat);
end;
end;
end;
Query_AU_PrHeiz.Next;
Inc(j);
end;
for i := 0 to Query_AU_PrHeiz.Fields.Count - 1 do begin // Skip last Col
{$IfNDef BuildDebug}
{ TODO -oAndi : Warum geht AutoColWidth nicht ? }
sWorksheetGrid1.AutoColWidth(i); // <--- hier wird die SIGSEGV exception geworfen
{$EndIf}
end;
Any hint wo da was schieflaufen könnte ?!