Also ich starte die
IDE von D2007.
Dann öffne ich ein Projekt, das ohne nennenswerte Warnings und Hints compiliert und einwandfrei läuft.
Ohne irgend etwas an dem Projekt zu ändern, klicke ich "Files" - "Close All".
Die
IDE schließt das Projekt, zeigt mir aber die Fehlermeldung: "List index out of bounds (1)".
Ein Klick auf Details bringt folgendes Ergebnis:
[20034FCD]{rtl100.bpl } Classes.TStringList.Delete (Line 4984, "common\Classes.pas" + 1) + $13
[20033A3D]{rtl100.bpl } Classes.TStrings.Error (Line 4379, "common\Classes.pas" + 1) + $11
[20034FCD]{rtl100.bpl } Classes.TStringList.Delete (Line 4984, "common\Classes.pas" + 1) + $13
[201E4029]{vcl100.bpl } Tabs.TTabList.Delete (Line 514, "Tabs.pas" + 2) + $4
[20AA31E6]{coreide100.bpl} WatchWin.TWatchWindow.ClearList (Line 1253, "..\debugger\WatchWin.pas" + 11) + $13
[20AAA908]{coreide100.bpl} DebugCmds.TDebugCommands.WatchViewClearList (Line 187, "..\debugger\DebugCmds.pas" + 1) + $2
[20A464C1]{coreide100.bpl} DebuggerMgr.TDebuggerMgr.NotifyProjectGroupClosed (Line 1281, "DebuggerMgr.pas" + 3) + $F
[004149CD]{
bds.exe } AppMain.TAppBuilder.CloseProjectGroup (Line 2186, "ui\AppMain.pas" + 11) + $7
[004152E5]{
bds.exe } AppMain.TAppBuilder.FileCloseAll (Line 2432, "ui\AppMain.pas" + 5) + $2
[0041531C]{
bds.exe } AppMain.TAppBuilder.FileCloseAll (Line 2440, "ui\AppMain.pas" + 13) + $9
[2004018B]{rtl100.bpl } Classes.TBasicAction.Execute (Line 11081, "common\Classes.pas" + 3) + $7
[20151359]{vcl100.bpl } ActnList.TContainedAction.Execute (Line 388, "ActnList.pas" + 1) + $2C
[201520BC]{vcl100.bpl } ActnList.TCustomAction.Execute (Line 1000, "ActnList.pas" + 7) + $8
[20040057]{rtl100.bpl } Classes.TBasicActionLink.Execute (Line 11010, "common\Classes.pas" + 2) + $7
[2013CA15]{vcl100.bpl } Controls.TControl.Click (Line 5227, "Controls.pas" + 7) + $7
[2019BCF0]{vcl100.bpl } ComCtrls.TToolButton.Click (Line 17003, "ComCtrls.pas" + 0) + $0
[2013CEA7]{vcl100.bpl } Controls.TControl.WMLButtonUp (Line 5365, "Controls.pas" + 6) + $3E
[2013C527]{vcl100.bpl } Controls.TControl.WndProc (Line 5146, "Controls.pas" + 83) + $6
[2013C1B4]{vcl100.bpl } Controls.TControl.Perform (Line 5021, "Controls.pas" + 5) + $C
[20161B8F]{vcl100.bpl } Forms.TApplication.WndProc (Line 7769, "Forms.pas" + 82) + $E
[2013C1B4]{vcl100.bpl } Controls.TControl.Perform (Line 5021, "Controls.pas" + 5) + $C
[2013FEC6]{vcl100.bpl } Controls.GetControlAtPos (Line 7095, "Controls.pas" + 4) + $73
[2013FF8E]{vcl100.bpl } Controls.TWinControl.ControlAtPos (Line 7118, "Controls.pas" + 13) + $E
[2013C1B4]{vcl100.bpl } Controls.TControl.Perform (Line 5021, "Controls.pas" + 5) + $C
[20140199]{vcl100.bpl } Controls.TWinControl.IsControlMouseMsg (Line 7182, "Controls.pas" + 15) + $1F
[20140561]{vcl100.bpl } Controls.TWinControl.WndProc (Line 7269, "Controls.pas" + 76) + $6
[2019DD33]{vcl100.bpl } ComCtrls.TToolBar.UpdateButtonState (Line 18148, "ComCtrls.pas" + 5) + $1C
[2019DD76]{vcl100.bpl } ComCtrls.TToolBar.UpdateButtonStates (Line 18158, "ComCtrls.pas" + 3) + $4
[201A06A9]{vcl100.bpl } ComCtrls.TToolBar.WndProc (Line 19588, "ComCtrls.pas" + 80) + $6
[2013FDD0]{vcl100.bpl } Controls.TWinControl.MainWndProc (Line 7073, "Controls.pas" + 3) + $6
[20040E4C]{rtl100.bpl } Classes.StdWndProc (Line 11583, "common\Classes.pas" + 8) + $0
[2004A49E]{rtl100.bpl } Contnrs.TComponentList.GetItems (Line 380, "common\Contnrs.pas" + 1) + $4
[201625F0]{vcl100.bpl } Forms.TApplication.ProcessMessage (Line 8105, "Forms.pas" + 23) + $1
[2016262A]{vcl100.bpl } Forms.TApplication.HandleMessage (Line 8124, "Forms.pas" + 1) + $4
[2016291F]{vcl100.bpl } Forms.TApplication.Run (Line 8223, "Forms.pas" + 20) + $3
[0042297A]{
bds.exe }
bds.bds (Line 195, "" + 7) + $7
Woran könnte das liegen?
--------
Das Problem bei der Sache ist folgendes:
Im Programm habe ich zwei Formulare, deren
GUI-Events, soweit möglich, über verschiedene Actions einer ActionList abgearbeitet werden.
Dies Actions habe ich den jeweiligen SpeedButtons zugeordnet. Bei dieser Zuordnung verbinded die
IDE auch sofort das ClickEvent des Buttons mit der ActionBlablaExecute-Methode.
Wenn ich das Programm starte, werden die entsprechenden Events bzw. die zugeordneten Actions ausgeführt.
Drücke ich nach beenden des Programms STRG+Shift+S (Alles Speichern) und schließe anschließend die
IDE, kommt besagte Fehlermeldung.
Wenn ich dann das Projekt erneut öffne, sind meine Actions nur noch zum Teil den jeweiligen Events zugeordnet.
Das heißt:
Einige SpeedButtons haben sowohl bei "Action" als auch bei "OnClick" noch einen Eintrag.
Einige SpeedButtons haben zwar bei "Action" noch einen Eintrag aber nicht mehr bei "OnClick"
und einige SpeedButtons haben weder bei "Action" noch bei "OnClick" noch einen Eintrag.
Will ich also mein Projekt speichern, die
IDE schließen und morgen weiter machen, muss ich erst wieder die Actions zuweisen.
Will gar mein Kollege mein Projekt weiterentwickeln, wird er fürchterlich zu fluchen anfangen....
-------------------
Was kann ich tun?
Da der Fehler offensichtlich meine ActionLists beeinträchtigt (wer weiß was noch?), habe ich mir die Zeit genommen, auf jedes Formular eine neue ActionList zu legen, alle vorhandenen Actions unter neuem Namen erneut anzulegen, den ActionExecutes den entsprechenden Quellcode mitgegeben, die alten Actions und danach die ActionLists gelöscht und abschließend die neuen Actions wieder den jeweiligen Events zugeordnet.
Sprich: Ich habe aufgeräumt.
Das Ergebnis ist jedoch enttäuschend!
Und jetzt? Hilfe!