Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Element hat kein übergeordnetes Fenster #34 (https://www.delphipraxis.net/54547-element-hat-kein-uebergeordnetes-fenster-34-a.html)

Ultimator 6. Okt 2005 12:39


Element hat kein übergeordnetes Fenster #34
 
Liste der Anhänge anzeigen (Anzahl: 1)
So, ich muss nochmal nerven :>

Ich hab mir jetzt ne Komponente gebastelt, die von TShellListView abgeleitet ist; die "TUltiShellListView" :mrgreen:

Ich hab versucht, sie mit der Drag&Drop-Funktionalität auszustatten, klappt auch bisher recht gut :)
Ich papp also die Kompo auf die Form, lass das (Test-)Projekt laufen und alles funktioniert wunderbar.
Wenn ich dann allerdings das Programm schließ, krieg ich folgendes:

Zitat:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project1.exe ist eine Exception der Klasse EInvalidOperation aufgetreten. Meldung: 'Element 'UltiShellListView1' hat kein übergeordnetes Fenster'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------
Wenn ich dann in Delphi auf Datei->Alles schließen geh, kommt erst die Frage, ob ich speichern will (Nein), und dann das:
Zitat:

---------------------------
Fehler
---------------------------
Element 'UltiShellListView1' hat kein übergeordnetes Fenster.
---------------------------
OK
---------------------------

Zitat:

---------------------------
Fehler
---------------------------
Zugriffsverletzung bei Adresse 0083B551 in Modul 'vcl70.bpl'. Lesen von Adresse 00000370.
---------------------------
OK
---------------------------
Und dann schließlich beim Beenden von Delphi noch:
Zitat:

---------------------------
Delphi 7: delphi32.exe - Fehler in Anwendung
---------------------------
Die Anweisung in "0x40008e48" verweist auf Speicher in "0x01aa08c0". Der Vorgang

"read" konnte nicht auf dem Speicher durchgeführt werden.


Klicken Sie auf "OK", um das Programm zu beenden.
---------------------------
OK
---------------------------
Wahlweise kommt bei Datei-Alles schließen (Nein) auch ne AV bei 00000000 im Modul delphi32.exe :lol:

Ich hab die Kompo mal angehängt, Benutzung auf eigene Gefahr :mrgreen:

Ach ja, wenn ich ich die EXE ohne Delphi starte, kommt beim Beenden das hier:

Zitat:

---------------------------
Project1: Project1.exe - Fehler in Anwendung
---------------------------
Die Ausnahme "Unbekannter Softwarefehler" (0x0eedfade) ist in der Anwendung an der Stelle 0x7c81eb33 aufgetreten.


---------------------------
OK Abbrechen
---------------------------
Bei OK kommt die Sache mit dem übergeordneten Fenster und DANN wird das Programm beendet und bei Abbrechen wird das Programm gleich beendet.

Ich hoff, ihr könnt mir helfen :)

Christian Seehase 6. Okt 2005 18:30

Re: Element hat kein übergeordnetes Fenster #34
 
Moin Julian,

[dp]Element hat kein übergeordnetes Fenster[/dp]

da gibt es schon einige Fundstellen zum Thema.

Ggf. findest Du direkt weiterführendes unter

Hier im Forum suchenCreateWnd

Jens Schumann 6. Okt 2005 19:47

Re: Element hat kein übergeordnetes Fenster #34
 
Hallo,
Delphi-Quellcode:
constructor TUltiShellListView.Create(aOwner: TComponent);
begin
 inherited Create(aOwner);
// Parent := aOwner as TWinControl; // <- kommentiere diese Zeile bitte aus
 DragAcceptFiles(self.handle, True);
end;

Ultimator 6. Okt 2005 20:20

Re: Element hat kein übergeordnetes Fenster #34
 
Hi Christian, hi Jens^^

@Christian: Hm, bisher hat das was ich so gefunden hab auch nicht funktioniert *gg*
Aber ich schau noch weiter :)

@Jens: Das bringt leider nur insofern was, dass ich nun schon die Meldung
Zitat:

---------------------------
Fehler
---------------------------
Element '' hat kein übergeordnetes Fenster.
---------------------------
OK
---------------------------
bekomme, wenn ich die Kompo nur im Designer platzieren will :stupid:


Das, was mich am meisten stutzig macht, ist, dass die gesamte IDE verrückt zu spielen scheint :-|

//edit:

Hab das ganze nun mal so umgeschrieben:
Delphi-Quellcode:
constructor TUltiShellListView.Create(aOwner: TComponent);
begin
 inherited Create(aOwner);
 //Parent := aOwner as TWinControl;
end;

procedure TUltiShellListView.CreateWnd;
begin
 inherited;
 if parent <> nil then
  begin
   DragAcceptFiles(self.handle, True);
   MessageBox(0, PChar(parent.Name), 'Parent', MB_OK);
  end
 else
  MessageBox(0, 'Kein Parent!', 'Caption', MB_OK);
end;
Nun bekomm ich zweimal die Meldung mit dem Namen des Parents; einmal, wenn ich die Kompo auf die Form platziere, und einmal, wenn ich das Projekt kompiliere und starte.

Aber wieso kommt dann wenn ich das Prog beende die EInvalidOperation-Exception, dass das Element kein übergeordnetes Fenster hätte? :shock:

Funzt übrigens weder in D7 PE noch in D2005 PE...

teebee 6. Okt 2005 21:09

Re: Element hat kein übergeordnetes Fenster #34
 
Lass mal in CreateWnd die Überprüfung auf Parent weg. Wenn Du die Komponente aus der IDE auf das Form ziehst, wird automatisch der Parent gesetzt, ist also da. Wenn Du bei einer dynamischen Erzeugung vergisst, den Parent zu setzen, wird CreateWnd nicht aufgerufen.
Und dann: entferne aus Destroy den erneuten Aufruf von DragAcceptFiles. Wenn überhaupt gehört der nach DestroyWnd.
Bei mir kommen so zumindest keine Fehler mehr wg. des übergeordneten Fensters.

Gruß, teebee

Ultimator 6. Okt 2005 21:15

Re: Element hat kein übergeordnetes Fenster #34
 
teebee, du bist hiermit ab sofort offiziell der Held meines Abends :mrgeen:

Es funktioniert alles perfekt, so wies soll :)

Aber ich muss sagen, dass ich das zweite DragAcceptFiles (Parameter "false) einbringen muss, denn sonst wird das ja nicht mehr zurückgesetzt, wenn ichs im CreateWnd mit Parameter "true" aufrufe. Man will ja schließlich sauber programmieren ;)

Danke nochmal an alle, die helfen wollten :)

Was sich mir aber dennnoch für ne Frage stellt: Wieso lässt sowas die IDE "kaputt gehen"? :shock:

Jens Schumann 7. Okt 2005 07:46

Re: Element hat kein übergeordnetes Fenster #34
 
Hallo Ultimator,
mir ist noch eine Kleinigkeit aufgefallen:
Es fehlt der Aufruf von DragFinish am Ende der Methode.
Da im EventHandler etwas schief gehen könnte sollte es
innerhalb eines Resourceschutzblockes stehen.
Delphi-Quellcode:
procedure TUltiShellListView.WMDropFiles(var Message: TWMDropFiles);
var
  Count: Integer;
  I: Integer;
  Buffer: array[0..MAX_PATH] of Char;
  Temp : TStringList;
begin
  Temp := TStringList.Create;
  Try
    Count := DragQueryFile(Message.Drop, UINT(-1), nil, 0);
    for I := 0 to Count - 1 do
    begin
     DragQueryFile(Message.Drop, I, @Buffer, SizeOf(Buffer));
     Temp.Add(Buffer);
    end;
    OnGetFiles(Temp);
  Finally
    DragFinish(Message.WParam);
    Temp.Free;
    end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz