Einzelnen Beitrag anzeigen

schnickers

Registriert seit: 25. Okt 2005
12 Beiträge
 
Delphi 2009 Enterprise
 
#6

Re: TWindowsMediaPlayer, Fehler bei mehrmaligem aufrufen

  Alt 5. Dez 2005, 10:11
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.
  Mit Zitat antworten Zitat