Zitat von
Aenogym:
hm, ich meinte eigentlich, dass du mit F7 und F8 (Einzelschritt/gesamte Routine) zeile für zeile durchgehst. so siehst du, welche zeile zuletzt erfolgreich ausgeführt wird und wenn dann auch einmal die
AV kommt, dann weißt du, welche zeile du jetzt bist - die ist dann der übeltäter.aenogym
ah ok, also
also folgenden code führt er noch aus
Delphi-Quellcode:
procedure TFormDBAudio.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:= caFree
end;
procedure TFormDBAudio.FormDestroy(Sender: TObject);
begin
FormDBAudio:= nil; //(1)
end;
nach (1) springt er in eine Fremdcomponente AdvMainMenü und bei dieser Function (ganz am ende):
Delphi-Quellcode:
function MDIClientWndProc(hWnd: HWND; uMsg: Integer; WParam: WPARAM; lParam: LPARAM): LRESULT; {$IFNDEF TMSDOTNET} stdcall; {$ENDIF}
const
SeparatorShortcut = $ABCD;
WindowItemGroupIndex = $CD;
var
AdvMenu: TAdvMainMenu;
MenuForm: TForm;
Separator, NewItem: TMenuItem;
i: Integer;
ChildList: TStringList;
begin
if uMsg = WM_MDIREFRESHMENU then
begin
Result := 0;
MenuForm := FindForm(GetParent(hWnd));
if (MenuForm <> nil) and (MenuForm.FormStyle = fsMDIForm) and (MenuForm.Menu <> nil) and
(MenuForm.WindowMenu <> nil) and (MenuForm.Menu is TAdvMainMenu) then
with MenuForm do
begin
AdvMenu := TAdvMainMenu(Menu);
AdvMenu.BeginUpdate;
Separator := AdvMenu.FindItem(SeparatorShortcut, fkShortcut);
if Assigned(Separator) and (Separator.Caption = cLineCaption) then
while Separator.MenuIndex + 1 < WindowMenu.Count do
WindowMenu.Delete(Separator.MenuIndex + 1)
else
begin
Separator := TMenuItem.Create(MenuForm.WindowMenu);
Separator.Caption := cLineCaption;
Separator.ShortCut := SeparatorShortcut;
Separator.AutoLineReduction := maAutomatic;
Separator.Visible := MenuForm.MDIChildCount > 0;
WindowMenu.Add(Separator);
end;
ChildList := TStringList.Create;
ChildList.Sorted := True;
for i := 0 to MenuForm.MDIChildCount - 1 do
ChildList.AddObject(MenuForm.MDIChildren[i].Caption,
TObject(MenuForm.MDIChildren[i].Handle));
for i := 0 to ChildList.Count - 1 do
begin
NewItem := TMenuItem.Create(WindowMenu);
with NewItem do
begin
Caption := IntToStr(i + 1) + ' ' + ChildList.Strings[i];
{$IFNDEF TMSDOTNET}
Tag := THandle((ChildList.Objects[i]));
{$ENDIF}
OnClick := AdvMenu.ActivateMDIChild;
RadioItem := True;
GroupIndex := WindowItemGroupIndex;
{$IFNDEF TMSDOTNET}
Checked := Assigned(MenuForm.ActiveMDIChild) and
(Tag = Integer(MenuForm.ActiveMDIChild.Handle));
{$ENDIF}
end;
WindowMenu.Add(NewItem);
end;
ChildList.Free;
AdvMenu.EndUpdate;
Result := AdvMenu.Handle;
end;
end
else
Result := CallWindowProc(IntPtr(GetWindowLong(hWnd, GWL_USERDATA)), hwnd, uMsg, wParam, lParam); ////(2)
end;
(2) hier Springt er raus schmeißt er die fehlermeldung.
achja was mir gerade noch auffällt, wenn ich die fenster in der reihenfoge schließe wie ich sie öffne (Ältestes zuerest) kommt nicht(oder zumisndest sehr viel seltener) dieser fehler.
gibts allgemein Probleme wenn, man den WMP shr oft aufhat? wei an dem mus es ja liegen, forms ohne den WMP machen keinerlei probleme.