AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Eigene Komponente: Eingenschaft kann nicht gesetzt werden???
Thema durchsuchen
Ansicht
Themen-Optionen

Eigene Komponente: Eingenschaft kann nicht gesetzt werden???

Ein Thema von romber · begonnen am 9. Mär 2009 · letzter Beitrag vom 10. Mär 2009
Antwort Antwort
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#1

Eigene Komponente: Eingenschaft kann nicht gesetzt werden???

  Alt 9. Mär 2009, 23:59
Hallo!
Ich beschäftige mich gerade mit den Grundlagen der Entwicklung eigener Komponenten und versuche eine Komponente zu erstellen, die auf einer anderen visuellen Komponente basiert, z.B. auf TPanel. Ich füge der Kemponente einige neue Eigenschaften hinzu, die bereits zu Desingtime gesetzt werden können. Wenn ich dann die Komponente installiert habe, ein neues Projekt gestartet habe, die neue Komponente auf die Form setze und die neue Eingenschaften setzen möchte, werden diese nicht gesetzt.

Beispielcode:

Delphi-Quellcode:
type
  TMyPanel = class(TPanel)
  private
    FTitle: string;
    FShowTitle: Boolean;
    procedure SetTitle(const ATitle: string);
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property Title: string read FTitle write SetTitle;
    property ShowTitle: Boolean read FShowTitle write FShowTitle
end;
Was mache ich falsch?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.346 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Eigene Komponente: Eingenschaft kann nicht gesetzt werde

  Alt 10. Mär 2009, 01:23
Schau dir einmal die Eigenschaften stored und default an, um genau zu sein sagt stored, dass der Wert explizit in jedem Fall gespeichert werden soll oder eben nicht und default gibt einen Standardwert an. Diesen Standardwert setzt du ja im Konstruktor und wenn der default Wert der aktuelle Wert ist, wird dieser nicht in der .dfm Datei gespeichert.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Eigene Komponente: Eingenschaft kann nicht gesetzt werde

  Alt 10. Mär 2009, 06:20
Deine neuen Eigenschaften, die das Aussehen steuern sollten alle eine Settermethode haben. Nachdem du die eigenschaft geändert hast, rufe ein Repaint, Refresch oder Paint auf, damit diese Änderung auch gezeichnet wird.

Delphi-Quellcode:
type
  TMyPanel = class(TPanel)
  private
    FTitle: string;
    FShowTitle: Boolean;
    procedure SetTitle(const ATitle: string);
    procedure SetShowTitel(const Value : Boolean);
  protected
    procedure Paint; override;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property Title: string read FTitle write SetTitle;
    property ShowTitle: Boolean read FShowTitle write SetShowTitle
end;

....
procedure TMyPanel.SetShowTitel(const Value : Boolean);
begin
  if FShowTitel = Value then
    Exit;
  FShowTitel := Value;
 Paint;
end;
In deiner vererbten Paint-Methode wird dann natürlich dein Titel gezeichnet.

Delphi-Quellcode:
procedure TMyPanel.Paint;
begin
  inherited;
  if FShowTitel then begin
    // ... hier zeichne ich den Titel
  end;
  // ... und so weiter
end;
Üblicherweise lagere ich solche Sachen aber in eigene Methoden wie DrawTitel aus und rufe der Übersicht halber diese nur in Paint auf.

Gruß oki
42
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Eigene Komponente: Eingenschaft kann nicht gesetzt werde

  Alt 10. Mär 2009, 06:36
Zitat:
Üblicherweise lagere ich solche Sachen aber in eigene Methoden wie DrawTitel aus und rufe der Übersicht halber diese nur in Paint auf.
Das ist nicht nur eine Frage der Übersicht.
Markus Kinzler
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Eigene Komponente: Eingenschaft kann nicht gesetzt werde

  Alt 10. Mär 2009, 06:40
Zitat von mkinzler:
Das ist nicht nur eine Frage der Übersicht.
aber für den Anfang eine gute Begründung

Gruß oki
42
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#6

Re: Eigene Komponente: Eingenschaft kann nicht gesetzt werde

  Alt 10. Mär 2009, 14:08
Danke Euch! Jetzt verstehe ich es und es klappt!
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Eigene Komponente: Eingenschaft kann nicht gesetzt werde

  Alt 10. Mär 2009, 14:10
Das freut uns!

Gruß oki
42
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:35 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