![]() |
Element '' hat kein übergeordnetes Fenster
Tag,
es geht hier um eine abgeleitete Komponente von RichEdit. Ich erhalte diesen Fehler (siehe Topic) sobald ich das nachgebildete RichEdit auf meine Form packe, nur wieso? Im Create steht folgendes:
Delphi-Quellcode:
Ich habe nach der Fehlermeldung im Forum gesucht und habe daraus gelesen, das das daher kommt weil kein Parent angegeben ist, richtig? Wenn dem so ist, wie kann ich dann den Parent wissen wenn ich gar nicht weiss wo ich das richedit nachher draufpacke?
constructor TpbIRCChatBox.Create(AOwner: TComponent);
begin inherited Create(AOwner); OldWndProc := WindowProc; WindowProc := NewWndProc; end; |
Re: Element '' hat kein übergeordnetes Fenster
|
Re: Element '' hat kein übergeordnetes Fenster
im Create der Componente ist kein parent angegeben, und somit existiert auch noch keine WindowProc dafür.
|
Re: Element '' hat kein übergeordnetes Fenster
@Christian: ich schau mal nach, danke.
@SirThornberry: Du hast recht es liegt an dein beiden letzten Zeilen des Create's...hmmm. Wo sollte man denn due windowproc sonst umbiegen? im onshow? |
Re: Element '' hat kein übergeordnetes Fenster
Christian Seehase hat's doch geschrieben... du musst die Prozedur CreateWnd überschreiben.
Delphi-Quellcode:
procedure TpbIRCChatBox.CreateWnd;
begin inherited CreateWnd); OldWndProc := WindowProc; WindowProc := NewWndProc; end; |
Re: Element '' hat kein übergeordnetes Fenster
alternativ kannst du auch CreateParams überschreiben wobei das aufs gleiche hinaus läuft.
|
Re: Element '' hat kein übergeordnetes Fenster
Moin,
so ich habe CreateWnd überschrieben. Nun wenn ich mein Programm beende ist es erstmal 1min gefroren und dann bekomme ich eine AV "Stack Overflow". Weiss jemand was zu tun ist? Sieht nun ca so aus:
Delphi-Quellcode:
ich sehe nicht das was falsch sein könnte oder?
unit pbIRCChatBox;
interface uses Windows, Messages, SysUtils, Classes, Controls, StdCtrls, ComCtrls; type TpbIRCChatBox = class(TRichEdit) private FWndProc: TWndMethod; procedure nWndProc(var Msg: TMessage); protected procedure CreateWnd; override; end; procedure Register; implementation procedure TpbIRCChatBox.nWndProc(var Msg: TMessage); begin FWndProc(Msg); HideCaret(Handle); end; procedure TpbIRCChatBox.CreateWnd; begin inherited CreateWnd; FWndProc := WindowProc; WindowProc := nWndProc; end; procedure Register; begin RegisterComponents('pb', [TpbIRCChatBox]); end; end. |
Re: Element '' hat kein übergeordnetes Fenster
du musst im destroy das ganze auch wieder zurück setzen
|
Re: Element '' hat kein übergeordnetes Fenster
Verstehe ich nicht, wird durch "FWndProc(Msg);" nicht das gleiche getan als wenn ich es zurücksetze?
Btw, ich habe es nun so:
Delphi-Quellcode:
trotzdem gleicher fehler.
destructor TpbIRCChatBox.Destroy;
begin WindowProc := FWndProc; inherited; end; |
Re: Element '' hat kein übergeordnetes Fenster
hast du dir nach dem Fehler mal den CallStack anzeigen lassen um zu sehen durch welche procedure/function das ganze ausgelöst wird?
|
Re: Element '' hat kein übergeordnetes Fenster
Der grüne Pfeil zeigt nach der Exception auf das "begin" hier:
Delphi-Quellcode:
procedure TpbIRCChatBox.nWndProc(var Msg: TMessage);
begin FWndProc(Msg); HideCaret(Handle); end; |
Re: Element '' hat kein übergeordnetes Fenster
und was steht im callstack?????? (View->Debug windows->callstack)?
|
Re: Element '' hat kein übergeordnetes Fenster
![]() Da sind viele weitere lines mit der (???) message, aber anscheinend kann man das ganze nicht in ner textdatei speichern daher als bild |
Re: Element '' hat kein übergeordnetes Fenster
Moin Mario,
solch Zuweisungen in CreateWnd dürfen nur einmal gemacht werden. Setze Dir am Besten ein Flag um das zu bewerkstelligen. |
Re: Element '' hat kein übergeordnetes Fenster
Moin christian,
wird createwnd denn mehrmals ausgefürht? |
Re: Element '' hat kein übergeordnetes Fenster
Delphi-Quellcode:
unit pbIRCChatBox;
interface uses Windows, Messages, Classes, ComCtrls; type TpbIRCChatBox = class(TRichEdit) protected procedure WndProc(var Message: TMessage); override; end; procedure Register; implementation procedure Register; begin RegisterComponents('pb', [TpbIRCChatBox]); end; { TpbIRCChatBox } procedure TpbIRCChatBox.WndProc(var Message: TMessage); begin if Message.Msg <> WM_PAINT then if Assigned(Parent) then HideCaret(Handle); inherited WndProc(Message); end; end. |
Re: Element '' hat kein übergeordnetes Fenster
Hallo Sprint,
das funktioniert soweit. Es gibt nur ein Problem, der Caret(falls ich den noch erwähnen darf(*g*) ist beim starten des Programms zu sehen, der sollte da natürlich nich da sein. Hast du vielleicht noch ne idee wie ich den direkt nachdem create wegkriege? Er ist erst weg sobald ich mit der maus rüberfahre |
Re: Element '' hat kein übergeordnetes Fenster
Auch wenn das Thema bereits lang zurück liegt:
Dieser Fehler tritt auf, wenn kein Parent zugewiesen worden ist: NeuesObjekt := TNewObjekt.Create(Form); //Neues Objekt erstellen - hier ist AOwner die Form NeuesObjekt.Parent := Form; //und Parent muss auch gesetzt werden - ebenfalls die Form Habe das Problem mal vor langer Zeit auf dem Quickreport gehabt. Als ich einer QRRichText-Komponente seine ParentRichEdit-Komponente zuordnen wollte und kein echtes TRichEdit auf dem Report zur Verfügung stehen hatte. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:03 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