AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi TWindowsMediaPlayer, Fehler bei mehrmaligem aufrufen
Thema durchsuchen
Ansicht
Themen-Optionen

TWindowsMediaPlayer, Fehler bei mehrmaligem aufrufen

Ein Thema von schnickers · begonnen am 1. Dez 2005 · letzter Beitrag vom 5. Dez 2005
Antwort Antwort
schnickers

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

TWindowsMediaPlayer, Fehler bei mehrmaligem aufrufen

  Alt 1. Dez 2005, 13:46
Hallo erstmal, nach durchforschen der suche konte ich nichts dazu finden also...

im groben hab ich eine MDIForm in der mehrere unterschiedliche Childform aufgerufen werden.
Diese Childforms Enhalten mehrere eingabeFelder und die TWindowsMediaPlayer (WMP) componente.
je nach aufruf (unterschiedliche Parameter) wird die URL des WMP beschrieben.

kurzer bsp code:

Delphi-Quellcode:
// Mainform, Aufruf des MDIChild
procedure TMainForm.CreateChildAudio;
var
  Child: TFormDBAudio;
begin
  Child := TFormDBAudio.Create(Application);
end;
Delphi-Quellcode:
// Constructor für neues Element, WMP.URL entspricht einem vorher definierten Default wert (c:\temp\demo.wav)
constructor TFormDBAudio.Create(owner :TComponent; EID :integer);
begin
  inherited Create(Owner); // Initialize inherited parts
  ButtonSave.Enabled:= true;
  ADOQueryGetAudioTable.Open;
  ADOQueryGetAudioTable.Insert;

  ElementEID:= EID;
  Caption := 'Audio - (mit Element "'+IntToStr(EID)+'" verbunden';
end;

// Constructor für ein altes Element, WMP.URL entspricht einem (aus der datenbank) gewonnen
constructor TFormDBAudio.Create(owner :TComponent; AID, EID :integer);
var
  temp :string;
begin
  inherited Create(Owner); // Initialize inherited parts
  ButtonSave.Enabled:= false;

  ADOQueryGetAudioTable.Parameters.ParamByName('parAID').Value:= AID;
  ADOQueryGetAudioTable.open; // Öffnet die Tableconnection
  Caption := 'Audio - '+ DBATitel.Text +' - (mit Element ['+IntToStr(EID)+'] verbunden'; // Bennent das Fenster

  temp:= ADOQueryGetAudioTable.FieldByName('AID').Value;
  WMediaPlayerAudio.URL:= URLPath + temp + '.mus';
end;
wenn ich nun sagen wie 3 mal die Form öffne und dan schließe bekomme ich folgende Fehlermeldung:
Access violation at address 0778C733 in module 'wmp.dll'. Read of adress 00A2331C

Beim schließen des Programms gibs dann nochmal dashier:
Exception EAccessViolation in Module MdiAPP.exe at 00000000.
Access violation at address 00000000 in module 'wmp.dll'. Read of adress 00000000


noch zum rest: das prog dient als eingabemaske für eine datebank (access, ADOQuery usw.)

ich vermute das es am WMP liegt, da bei anderen Forms ohne den WMP keine probleme gibt.

Wenn irgendwer ne idee hat was da komisches vor sich geht, ich bin für alles dankbar.
falls noch informationen gebraucht werden, einfach bescheid sagen.

Gruß schnickers
  Mit Zitat antworten Zitat
schnickers

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

Re: TWindowsMediaPlayer, Fehler bei mehrmaligem aufrufen

  Alt 5. Dez 2005, 09:02
ich nehm mir mal die freiheit zu bumpen und zu fragen wo die heerscharen an antworten bleiben
würd nur gern wissen warum keiner antwortet

- Frage SO mieß formuliert, das ich gemieden werde?
- keine hat ne idee?
- es fehlen informationen?
- ich bin im falschen film?

wie auch immer also ich nehm jeden nochsoklitzekleinen vorschlag dankbar an und wenn er daraus bestehen sollte meine hose auf dem kopf zu tragen (besser nicht)

mit komischem Gruß
  Mit Zitat antworten Zitat
Benutzerbild von Aenogym
Aenogym

Registriert seit: 7. Mär 2004
Ort: Schwerin
1.089 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: TWindowsMediaPlayer, Fehler bei mehrmaligem aufrufen

  Alt 5. Dez 2005, 09:08
hi und herzlich willkommen in der DP, schnickers

hast du schonmal den debugger bemüht, um heraus zu finden, an welcher zeile die Acces Violation auftritt?

aenogym
Steffen Rieke
Was nicht buzzt, wird buzzend gemacht!
http://blog.base-records.de
http://www.base-records.de
  Mit Zitat antworten Zitat
schnickers

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

Re: TWindowsMediaPlayer, Fehler bei mehrmaligem aufrufen

  Alt 5. Dez 2005, 09:20
Zitat von Aenogym:
hi und herzlich willkommen in der DP, schnickers

hast du schonmal den debugger bemüht, um heraus zu finden, an welcher zeile die Acces Violation auftritt?

aenogym
OLE^^.. Hi,

falls du damit meinst, das ich mit breack an die stelle komme wo dann diese zeile eingefäbt bekomme, da zeigt der nichts an.
mit jump tu cpu (das wird wohl nicht viel helfen) ist der code um die abbruchstelle ca. so:

Code:
test ecx,[eax]
jz $0778c739
mov ecx,[eax] //hier springt er raus
push eax
ansonsten vieleicht noch wichtig. wenn ich z.b. 3 forms auf habe, dannbeim 2ten den fehler bekomme, und dann versuche diese form ochmal zu öffnen, passiert es manchmal, das ich die fehlermeldung bekomme, das diese form schon geöffnen ist bzw schon existiert
  Mit Zitat antworten Zitat
Benutzerbild von Aenogym
Aenogym

Registriert seit: 7. Mär 2004
Ort: Schwerin
1.089 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: TWindowsMediaPlayer, Fehler bei mehrmaligem aufrufen

  Alt 5. Dez 2005, 09:46
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.

allgemein kann ich nur vermuten, dass du beim schließen deines childs auf ein objekt zugreifst, das nicht initialisiert wurde...

aenogym
Steffen Rieke
Was nicht buzzt, wird buzzend gemacht!
http://blog.base-records.de
http://www.base-records.de
  Mit Zitat antworten Zitat
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
Benutzerbild von Aenogym
Aenogym

Registriert seit: 7. Mär 2004
Ort: Schwerin
1.089 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: TWindowsMediaPlayer, Fehler bei mehrmaligem aufrufen

  Alt 5. Dez 2005, 12:01
mh, äußerst komisch. da kann ich dir leider auch nicht helfen
vielleicht kennt sich ja jemand anders in diesem forum besser damit aus...
Steffen Rieke
Was nicht buzzt, wird buzzend gemacht!
http://blog.base-records.de
http://www.base-records.de
  Mit Zitat antworten Zitat
mumu

Registriert seit: 28. Okt 2003
Ort: Bamberg
519 Beiträge
 
#8

Re: TWindowsMediaPlayer, Fehler bei mehrmaligem aufrufen

  Alt 5. Dez 2005, 12:48
und was ist wenn du die zeile
FormDBAudio:= nil; //(1) herausnimmst
  Mit Zitat antworten Zitat
schnickers

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

Re: TWindowsMediaPlayer, Fehler bei mehrmaligem aufrufen

  Alt 5. Dez 2005, 13:09
Zitat von mumu:
und was ist wenn du die zeile
FormDBAudio:= nil; //(1) herausnimmst
nach ausführen dieser anweisung tat sich folgendes:

1) (durch auskemmentiere des anweisung) keine fehlermeldungen mehr
2) manche formen ließen sich nicht mehr öffnen nachdem ich sie geschlossen hatte.
3) die anweisungen wieder eingefügt (der code ist nun so wie vor 1)
4) keine fehlermeldung, offnen der forms wieder möglich

ich bin nun total weil ich keine ahnung hab was hier geht, hat auf jedenfall funktioniert danke vielmals

kann nur hoffen das problem taucht nicht wieder auf (was ich vermute,... hmmmm)
naa werd das ganze mal testen und nachher nochmal den status schreiben,

bye
schnickers
  Mit Zitat antworten Zitat
schnickers

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

Re: TWindowsMediaPlayer, Fehler bei mehrmaligem aufrufen

  Alt 5. Dez 2005, 14:36
ok, ich packs nicht, ein problem das mich gut zwei wochen lang beschäftigt hat, und nun ist der code so wie vorher aber ohne fehlermeldungen (gutes altes computer phänomen wenn man mich fragt )

in diesem sinne problem (vorerst gelößt) ich stell dann mal auf erledigt, danke nochmal an alle poster und helfer und an den weinachtsmann

mit weinachtlichem gruß
schnickers
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz