![]() |
Probleme mit TRichEdit
Hi, ich versuche ein TRichEdit Feld zu erstellen was auch wunderbar klappt bis ich die Farbe, Color setzten will. Danach bekomme ich folgenden fehler.
Im projekt ist eine Exception der Klasse Einvalid Operation aufgetreten. Medlung: 'Element " hat kein übergeordnetes Fenster'.
Delphi-Quellcode:
unit gsticky;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, ComCtrls; type Tsticky = class(TCustomControl) constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure Paint; override; private FirstDraw: boolean; stickynote: TRichEdit; public end; constructor Tsticky.Create(AOwner: TComponent); begin inherited Create(Aowner); imageresDLL := LoadLibrary(PChar('imageres.dll')); stickynote := TRichEdit.Create(self); stickynote.Parent := Self; stickynote.Enabled := true; stickynote.Left := 60; stickynote.Top := 10; stickynote.Width := 80; stickynote.Height := 45; //stickynote.Color := clLime; stickynote.BorderStyle := BsNone; |
Re: Probleme mit TRichEdit
Hallo,
im Konstruktor Deiner Komponente hat diese noch kein Parent, deshalb kannst Du auch keine visuellen Eigenschaften des untergeordneten TRichEdit ändern. Bau Dir eine Funktion, die nach der Erstellung aufgerufen wird, dann klappt's. Oder benutze im Konstruktor den Owner als Parent, wenn das ein TWinControl ist (das ist dann aber nicht sauber). Du kannst auch SetParent überschreiben und dort Deine Farbe ändern. Gruß xaromz |
Re: Probleme mit TRichEdit
Mhm...ich check noch nich so ganz wie das nu gemeint is?! :(
Delphi-Quellcode:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, ComCtrls, desktopsticky; type Tsticky = class (TCustomControl) constructor Create(AOwner: TComponent); override; private stickynote: TRichEdit; public end; constructor Tsticky.Create(AOwner: TComponent); begin inherited Create(Aowner); stickynote := TRichEdit.Create(AOwner); stickynote.Parent := Self; stickynote.Enabled := true; stickynote.Left := 60; stickynote.Top := 10; stickynote.Width := 80; stickynote.Height := 45; // stickynote.Color := clLime; stickynote.BorderStyle := BsNone; |
Re: Probleme mit TRichEdit
Hallo,
Du erstellst in Deiner Komponente "TSticky" eine weitere (TRichEdit), die auf dieser Komponente sitzt. Zu diesem Zeitpunkt (im Konstruktor) hat TSticky noch keinen Parent und somit auch kein gültiges Window-Handle. Damit hat auch Dein TRichEdit kein gültiges Window-Handle und eine Veränderung der Optik schlägt fehl. Der Fehler tritt nämlich in der Methode "CreateHandle" von TControl auf. Gruß xaromz |
Re: Probleme mit TRichEdit
Oder du verwendest dafür afterconstruction, damit sollt es dann eigentlich auch gehn.
|
Re: Probleme mit TRichEdit
Hallo,
Zitat:
Gruß xaromz |
Re: Probleme mit TRichEdit
Also entweder mach ich was falsch oder ich bin einfach nur sau dumm. Wenn ich im den Parent auf self setzte bekomm ich den Fehler: "*Steuerelement kann nicht sich selbst als Vorfahr haben*"
|
Re: Probleme mit TRichEdit
Zitat:
|
Re: Probleme mit TRichEdit
constructor -> das war das wort ^^
was isn wenn ich nu *doch* sag? ^^' |
Re: Probleme mit TRichEdit
Hallo,
versuch doch mal folgendes:
Delphi-Quellcode:
Damit setzt Du die Eigenschaften erst, wenn Deine Komponente TSticky wirklich ein Parent-Control hat.
unit gsticky;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, ComCtrls; type Tsticky = class(TCustomControl) constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure Paint; override; private FirstDraw: boolean; stickynote: TRichEdit; procedure SetParent(AParent: TWinControl); override; // <-------- public end; constructor Tsticky.Create(AOwner: TComponent); begin inherited Create(Aowner); imageresDLL := LoadLibrary(PChar('imageres.dll')); stickynote := TRichEdit.Create(self); stickynote.Parent := Self; end; procedure Tsticky.SetParent(AParent: TWinControl); begin inherited SetParent(AParent); if (AParent = nil) then Exit; stickynote.Enabled := true; stickynote.Left := 60; stickynote.Top := 10; stickynote.Width := 80; stickynote.Height := 45; stickynote.Color := clLime; stickynote.BorderStyle := BsNone; end; Gruß xaromz // Edit: Fehler korrigiert |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 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 by Thomas Breitkreuz