Delphi-PRAXiS
Seite 1 von 2  1 2      

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 Probleme mit TRichEdit (https://www.delphipraxis.net/59943-probleme-mit-trichedit.html)

Jonas 31. Dez 2005 02:10


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;

xaromz 31. Dez 2005 09:05

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

Jonas 31. Dez 2005 21:04

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;

xaromz 31. Dez 2005 22:36

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

GuenterS 1. Jan 2006 09:28

Re: Probleme mit TRichEdit
 
Oder du verwendest dafür afterconstruction, damit sollt es dann eigentlich auch gehn.

xaromz 1. Jan 2006 10:07

Re: Probleme mit TRichEdit
 
Hallo,
Zitat:

Zitat von GuenterS
Oder du verwendest dafür afterconstruction, damit sollt es dann eigentlich auch gehn.

das wird nicht funktionieren, AfterConstruction wird ja nach dem Konstruktor aufgerufen, da ist immer noch kein Parent gesetzt.

Gruß
xaromz

Jonas 14. Jan 2006 19:26

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*"

Khabarakh 14. Jan 2006 19:32

Re: Probleme mit TRichEdit
 
Zitat:

Zitat von Jonas
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*"

Toll, das wichtigste Wort hast du ausgelassen :stupid: . Du versuchst aber hoffentlich nicht, im Konstruktor von TSticky den Parent von TSticky auf Self zu setzen?

Jonas 14. Jan 2006 19:51

Re: Probleme mit TRichEdit
 
constructor -> das war das wort ^^

was isn wenn ich nu *doch* sag? ^^'

xaromz 14. Jan 2006 20:53

Re: Probleme mit TRichEdit
 
Hallo,

versuch doch mal folgendes:
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;
    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;
Damit setzt Du die Eigenschaften erst, wenn Deine Komponente TSticky wirklich ein Parent-Control hat.

Gruß
xaromz
// Edit: Fehler korrigiert


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:59 Uhr.
Seite 1 von 2  1 2      

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