Hallo liebe DPler,
vielleicht hat jemand von Euch eine Idee zu folgendem Problem:
Ein Kollege hat in vielen seiner Programme Konstrukte drin, das Objekte an ListItems "hängen" und das im Gegenzug das Objekt das ListItem kennt.
Wird das ListView aktualisiert, kennt es das Objekt und holt sich von dort die Daten zum Visualisieren... Ändert sich am Zustand des Objektes etwas,
kann das Objekt direkt das ListItem aktualisieren, da es das ja kennt. (Saubere Trennung sieht anders aus, ich weiß - die Programme sind halt schon ein paar Jahre alt...)
Die ListViews sind was die Anzahl und Reihenfolge der Items angeht in der Regel bis auf den Programmstart eher statisch - also keine Sortierfunktionen, etc.
Zur "Illustration"...
Delphi-Quellcode:
type
TMyObject = class(TObject)
private
fListItem: TListItem;
procedure SomeProc;
public
constructor Create(AListItem: TListItem);
property ListItem: TListItem read fListItem;
end;
implementation
constructor TMyObject.Create(AListItem: TListItem);
begin
fListItem := AListItem;
...
end;
procedure TMyObject.SomeProc;
begin
...
fListItem.SubItems[3] := 'FooBar';
...
end;
procedure TSomeControllerObject.FooBar;
var
li: TListItem;
begin
li := lvSomeListView.Items.Add;
li.Data := TMyObject.Create(li);
...
end;
Vielleicht nicht sehr schön... Allerdings hat das jahrelang einwandfrei funktioniert, solange die Programme mit Delphi 2006 kompiliert waren...
Nun das eigentliche Problem:
Er hat umgestellt auf XE6 und seitdem passiert es aus bisher nicht nachvollziehbaren Gründen, das unter der Adresse, auf die fListItem
zeigt, entweder nichts mehr (dann knallt es), oder ein anderes ListItem (dann wird die falsche Zeile aktualisiert) zu finden ist.
Wir sind nun schon ein bisschen länger auf der Suche nach der Ursache und haben nun festgestellt, dass sich im Laufe der Zeit (bisher
kein Muster erkennbar), die tatsächliche Adresse des ListItems ändert - aber nicht in seinen Objekten, sondern im ListView!
Ist das Normal? Vorher konnten die Programme Wochenlang durchlaufen, ohne das solche Probleme auftraten - war das nur Zufall?
Der Fehler ist auf dem Entwicklungsrechner vom Kollegen bisher leider nicht nachvollziehbar, wie immer passiert so etwas natürlich nur
sporadisch beim Kunden, was es umso schwieriger macht, das Problem zu lokalisieren.
Hat irgendjemand eine Idee? Wir sind mit unserem Pascal am Ende?
Gruß
Wormid
Debuggers don't remove Bugs, they only show them in Slow-Motion.