Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   FMX - DX10: CheckItemRangeInline Error (https://www.delphipraxis.net/187666-fmx-dx10-checkitemrangeinline-error.html)

Harry Stahl 20. Dez 2015 14:27

FMX - DX10: CheckItemRangeInline Error
 
Wenn ich einer Listbox einige String-Items zuweisen will, kracht es hin und wieder mal:

Delphi-Quellcode:
  if Timo.slFaellig.count > 0 then begin
    lbFaellig.Items.Assign(Timo.slFaellig); --> Hier kommt der Fehler
    Timo.slfaellig.clear;
  end;
Und zwar wird der Fehler in

Delphi-Quellcode:
procedure TListHelper.CheckItemRange(AIndex: Integer);
begin
  CheckItemRangeInline(AIndex);
end;
ausgelöst (Access Violation, In unit System.Generics.Collections).

Die Aktion findet in einem Timer-Event statt, in dem in der Listbox die fälligen Termine aktualisiert werden sollen.

Hat jemand hier schon mal entsprechende Probleme gehabt?

Ist das ein Bug?

himitsu 20. Dez 2015 18:57

AW: FMX - DX10: CheckItemRangeInline Error
 
Ein Stacktrace wäre geil, denn wer CheckItemRange aufruft, wäre eine wichtige informative Information.

Bei mir fand ich nur
Delphi-Quellcode:
function TList<T>.GetItem(Index: Integer): T;
begin
  FListHelper.CheckItemRange(Index);
  Result := FItems[Index];
end;
und demnach würde dein Programm versuchen auf ein Item zuzugreifen, welches nicht existiert.

Uwe Raabe 20. Dez 2015 21:53

AW: FMX - DX10: CheckItemRangeInline Error
 
Zitat:

Zitat von himitsu (Beitrag 1324965)
und demnach würde dein Programm versuchen auf ein Item zuzugreifen, welches nicht existiert.

Das ganze findet innerhalb eines
Delphi-Quellcode:
TStrings.Assign
statt. Ich vermute also, der Aufruf geht über
Delphi-Quellcode:
TStrings.AddStrings
->
Delphi-Quellcode:
TCustomListBox.TListBoxStrings.Get
->
Delphi-Quellcode:
TCustomListBox.GetListItem
->
Delphi-Quellcode:
TCustomListBox.ItemByIndex
->
Delphi-Quellcode:
TControlList.GetItem
, wobei
Delphi-Quellcode:
TControlList = TList<TControl>
der erste Zugriff auf eine generische Liste ist.

Näheres kann man ohne mehr Code aber schlecht sagen.

Harry Stahl 20. Dez 2015 22:42

AW: FMX - DX10: CheckItemRangeInline Error
 
Die Listbox ist mit Ihren ListboxItems recht empfindlich.

Wahrscheinlich war das Problem, das die Timer-Arbeiten noch eine Phase fiel, wo die Form noch nicht angezeigt wurde.

Hier ist FMX äußerst empfindlich, man kann sich hier schnell Probleme mit noch nicht richtig Initialisierten Objekten einfangen.

Habe jetzt mit verschiedenen Aktionen sichergestellt, dass die Timer-Aktion erst stattfindet, wenn die Form einmal ganz angezeigt wurde. Problem ist nun verschwunden.

Mal am Rande: Von diesem Problemchen (und anderen kleinen) mal abgesehen, macht es mir gerade Riesen-Freude mit Delphi 10 Seattle und FMX zu arbeiten (hatte bislang noch eher mit XE7 die "realen" Projekte bearbeitet).

Hier sind Riesen-Performance-Verbesserungen (bei FMX) festzustellen, alles geht deutlich schneller... und die Delphi-IDE ist wirklich super...


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz