So jetzt habe ich den Fehler gefunden. Ist natürlich reichlich herb.
Das Programm hat von Delphi1 bis Delphi2007 funktioniert. Der Effekt tritt erst mit D2009/Vista auf.
Ich habe ein Auswahlfenster mit einem Grid für die Auswahl von Datensätzen.
Mit Drag und Drop oder durch einen Doubleclick wähle ich einen Datensatz aus.
Dragmode steht auf manual.
Zuerst kommt das Ereignis MouseDown. Hier arbeite ich ein BeginDrag ab und gebe eine Differenz von 8 Pixeln für den Beginn der Drag Funktion.
Danach kommt der zweite Klick, welcher als Doppelclick erkannt wird.
Die ausgewählte ID wird an das aufrufende Programm übergeben und das Fenster geschlossen und freigegeben.
Delphi-Quellcode:
With TAuswahlmodul,Create(Self) do
begin
Showmodal;
result := ID;
Free;
end;
Das bekommt das Laufzeitsystem von Delphi wohl nicht mit und bei der erst besten Gelegenheit z.B. Application.Processmessages kommt der Absturz
oder auch nicht.
System.pas von Delphi greift auf den bereits freigegebenen Speicherbereich zu und versucht die Methodenliste aufzulösen.
Was hier meine
SQL Abfragen mit zu tun haben ? weis der Geier.
Ich vermute das der Objektbereich nach dem Free noch initialisiert ist und der abgearbeitete Code noch irgendeinen Sinn macht.
Nach größeren anderen Operationen ist der Speicher umgeschichtet und der alte, nicht mehr gültige Speicherbereich verursacht nun eine
Speicherschutzverletzung.
Der Debugger war bei diesem Fehler schlichtweg nicht zu gebrauchen und hat eher in die Irre geführt, als bei der Fehlersuche zu helfen.
Gruß
Peter