AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit TRichEdit

Ein Thema von Jonas · begonnen am 31. Dez 2005 · letzter Beitrag vom 15. Jan 2006
Antwort Antwort
Seite 1 von 2  1 2      
Jonas

Registriert seit: 6. Feb 2005
266 Beiträge
 
Delphi 2007 Professional
 
#1

Probleme mit TRichEdit

  Alt 31. Dez 2005, 03:10
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;
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#2

Re: Probleme mit TRichEdit

  Alt 31. Dez 2005, 10:05
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
  Mit Zitat antworten Zitat
Jonas

Registriert seit: 6. Feb 2005
266 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Probleme mit TRichEdit

  Alt 31. Dez 2005, 22:04
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;
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#4

Re: Probleme mit TRichEdit

  Alt 31. Dez 2005, 23:36
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
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Probleme mit TRichEdit

  Alt 1. Jan 2006, 10:28
Oder du verwendest dafür afterconstruction, damit sollt es dann eigentlich auch gehn.
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#6

Re: Probleme mit TRichEdit

  Alt 1. Jan 2006, 11:07
Hallo,
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
  Mit Zitat antworten Zitat
Jonas

Registriert seit: 6. Feb 2005
266 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Probleme mit TRichEdit

  Alt 14. Jan 2006, 20:26
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*"
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#8

Re: Probleme mit TRichEdit

  Alt 14. Jan 2006, 20:32
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 . Du versuchst aber hoffentlich nicht, im Konstruktor von TSticky den Parent von TSticky auf Self zu setzen?
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Jonas

Registriert seit: 6. Feb 2005
266 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Probleme mit TRichEdit

  Alt 14. Jan 2006, 20:51
constructor -> das war das wort ^^

was isn wenn ich nu *doch* sag? ^^'
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#10

Re: Probleme mit TRichEdit

  Alt 14. Jan 2006, 21:53
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 03:05 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