Thema: Delphi Gleiche Variablen-Namen

Einzelnen Beitrag anzeigen

Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#27

AW: Gleiche Variablen-Namen

  Alt 9. Mai 2017, 11:25
Hi zusammen

Eben hab ich versucht, Uwe Raabes Vorschlag umzusetzen. Der Empfänger des Events befindet sich bislang in der Mainform, und so wolllte ich ihn ins Datenmodul verlegen. Dazu kopierte ich die Prozedur in der Mainform, fügte sie im Datenmodul ein und liess sie per Shift/Control/C deklarieren. Anschliessend versuchte ich, die Variable FPathlist per Refactoring als privates Feld deklarieren zu lassen.
Da hat Delphi aber ganz schön gemeckert! Wie, das zeigt der Anhang.

Ich habe dann mal versucht, das Feld von Hand zu deklarieren. Das schien OK. So hab ich in der Empfängerprozedur einen Haltepunkt gesetzt. Aber als ich von da weitersteppen wollte, meckerte Delphi Gleich zweimal:
Zitat:
---------------------------
Im Projekt SQLiteTestProject.exe ist eine Exception der Klasse $C0000005 mit der Meldung 'access violation at 0x007e007d: read of address 0x0000007c' aufgetreten.
---------------------------
Und das 2. Mal beim weitersteppen mit F8:
Zitat:
---------------------------
Im Projekt SQLiteTestProject.exe ist eine Exception der Klasse EAccessViolation mit der Meldung 'Zugriffsverletzung bei Adresse 007E007D in Modul 'SQLiteTestProject.exe'. Lesen von Adresse 0000007C' aufgetreten.
---------------------------
FPathlist des Datenmoduls kann die AV nicht auslösen - die wird bei Datenmodul.Create erstellt. Und der Konstantenparameter FPathlist ist auch gut gefüllt. Weitere Objekte werden in der Prozedur nicht angesprochen:
Delphi-Quellcode:
procedure TDMLSQLite.DoPathListEvent(Sender: TObject;
  const FOrdner: String; const FPathlist: TStringList);
begin

  Self.FPathlist.Assign(FPathlist);
end;
So, wie ich das jetzt sehe, bleiben also 2 Lösungen:
  • Ich erstelle kurz vor dem Abfeuern des Events eine lokale Stringliste, gebe die dem Event mit und zerstöre sie bei Rückkehr wieder oder
  • Ich setze die Propertylösung ein und feuere einen TNotifier, wenn die Liste frisch gefüllt worden ist.

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat