AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Problem mit Caption bei neuer Komponente basierend auf TLabel
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Caption bei neuer Komponente basierend auf TLabel

Ein Thema von sqlman · begonnen am 26. Mär 2011 · letzter Beitrag vom 27. Mär 2011
Antwort Antwort
Seite 1 von 2  1 2      
sqlman

Registriert seit: 5. Jan 2006
Ort: Bochum
7 Beiträge
 
#1

Problem mit Caption bei neuer Komponente basierend auf TLabel

  Alt 26. Mär 2011, 23:23
Hallo Forum,

vielleicht könnte Ihr mir einmal behilflich sein. Ich habe eine Komponente, basierend auf TLabel, erstellt. Im Konstruktor soll die Caption gesetzt werden. Leider tut sich gar nichts. Parallel habe ich mal die Farbe gesetzt. Funktioniert einwandfrei. Frage: Was mache ich bei der Caption falsch, das die nicht gesetzt wird? Ich verwende D7.

Code:
unit raka_timestamp;

interface

uses
   Classes, Controls, StdCtrls;

type
  Ttimestamp = class(TLabel)
  private
    { Private-Deklarationen }
  protected
    { Protected-Deklarationen }
  public
    { Public-Deklarationen }
    constructor Create(AOwner:Tcomponent);override;

  published
    { Published-Deklarationen }
  end;

procedure Register;

implementation

uses dialogs,sysutils,forms;

procedure Register;
begin
  RegisterComponents('Standard',[TTimeStamp]);
end;

constructor Ttimestamp.Create(AOwner:TComponent);
begin
  inherited Create(AOwner);
  Font.Color:=$00FFFF;
  Caption:='test';
end;
end.
Danke für die Hilfe.

Gruß
raka
  Mit Zitat antworten Zitat
Benutzerbild von roga
roga

Registriert seit: 15. Jun 2008
Ort: Sachsen-Anhalt
109 Beiträge
 
Delphi XE8 Professional
 
#2

AW: Problem mit Caption bei neuer Komponente basierend auf TLabel

  Alt 27. Mär 2011, 06:48
Delphi-Quellcode:
unit raka_timestamp;

interface

uses
   Classes, Controls, StdCtrls;

type
  Ttimestamp = class(TLabel)
  private
    { Private-Deklarationen }
    FCaption: String; // <--
  protected
    { Protected-Deklarationen }
  public
    { Public-Deklarationen }
    constructor Create(AOwner:Tcomponent);override;
  published
    { Published-Deklarationen }
    property Caption: String read FCaption write FCaption; // <--
  end;

procedure Register;

implementation

uses dialogs,sysutils,forms;

procedure Register;
begin
  RegisterComponents('Standard',[TTimeStamp]);
end;

constructor Ttimestamp.Create(AOwner:TComponent);
begin
  inherited Create(AOwner);
  Font.Color:=$00FFFF;
  FCaption:='test'; // <-- FCaption!
end;

end.
Ronald
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#3

AW: Problem mit Caption bei neuer Komponente basierend auf TLabel

  Alt 27. Mär 2011, 07:22
Die Implementierung von sqlman ist korrekt und funktioniert bei mir einwandfrei (D2010, D7 habe ich leider gerade nicht greifbar). Das Neueinführen von FCaption ist nicht zielführend, da diese ja gar nicht zum Zeichnen herangezogen würde.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
sqlman

Registriert seit: 5. Jan 2006
Ort: Bochum
7 Beiträge
 
#4

AW: Problem mit Caption bei neuer Komponente basierend auf TLabel

  Alt 27. Mär 2011, 08:45
Ich muss etwas ergänzen:

In der IDE wird die Caption gesetzt. Ich möchte aber, das hier zur Laufzeit, also beim erstellen des Labels das Datum der Application hineingeschrieben wird. Dies funktioniert zur Laufzeit nicht. Es bleibt die Caption der IDE stehen.

Wir der Konstruktor nicht mehr zur Laufzeit durchlaufen ?

Gruß
raka
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Problem mit Caption bei neuer Komponente basierend auf TLabel

  Alt 27. Mär 2011, 10:02
Ich habe das hier gerade unter Delphi 7 ausprobiert, bei mir funktioniert das:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TTest = class(TLabel)
  public
    constructor Create(AOwner: TComponent); override;
  end;

  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private-Deklarationen }
    FTest: TTest;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TTest }

constructor TTest.Create(AOwner: TComponent);
begin
  inherited;
  if not (csDesigning in ComponentState) then
    Caption := DateToStr(FileDateToDateTime(FileAge(ParamStr(0))));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FTest := TTest.Create(nil);
  FTest.Parent := self;
  FTest.Left := 10;
  FTest.Top := 10;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FTest.Free;
end;

end.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
sqlman

Registriert seit: 5. Jan 2006
Ort: Bochum
7 Beiträge
 
#6

AW: Problem mit Caption bei neuer Komponente basierend auf TLabel

  Alt 27. Mär 2011, 12:12
Ich habe das neue Label allerdings als Komponente installiert. Wenn ich es dann auf die IDE ziehe, bzw. auf die Form, wird dort anscheinend das Erstellungsdatum der IDE abgfebildet. Dieses Datum bleibt dann allerdings auch bei der Form nach dem Start des Programms bestehen.

Also noch einmal, nicht das es unverständlich wird. ICh erstelle eine neue Komponente wie ganz oben beschrieben. Diese verwende ich in einer Form. Dort erscheint das Label dann mit einem Datum, wie gewünscht, jedoch die der IDE (anscheinend).

Starte ich nun die Software, erscheint dort das Datum, welches ich bereits in der IDE sah und NICHT das des Prpogramms , das die Form darstellt.

Mir schwant, das beim Create in der IDE die Caption gesetzt wird, irgendow ziwschengespeichert wird und insofern als überschrieben gilt, durch den Objektinspektor....

ICh denke ich brauche noch eine Methode ähnlich oncreate ?

Gruß
raka
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Problem mit Caption bei neuer Komponente basierend auf TLabel

  Alt 27. Mär 2011, 12:18
Die If-Abfrage in meinem Beispiel hast Du aber schon bemerkt?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.151 Beiträge
 
Delphi 12 Athens
 
#8

AW: Problem mit Caption bei neuer Komponente basierend auf TLabel

  Alt 27. Mär 2011, 12:47
Wenn einmal ein Wert in der DFM gespeichert wurde, dann wird beim Laden/Erstellen deiner Komponente der Constructor und damit die aktuelle Zeit in die Caption geladen, aber danach wird dieses mit den Werten der DFM überschrieben.

Fazit:
man unterbindest das Setzen der Caption und sagt dem DFM-Loader, daß die Caption nicht gepsiehcert und somit später nicht mehr geladen werden soll.
> Setter von Gaption überschreiben
> das Property mit der Direktive stored False versehen

Ab da kann man die Caption nicht mehr manuell verändern und es wird immer der Wert des Constructors genutzt.

Aber in soeinem Fall würde ich nicht von TLabel ableiten, sondern von TCustomLabel und .Caption sollte dann nicht als Published deklatiert werden.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (27. Mär 2011 um 12:51 Uhr)
  Mit Zitat antworten Zitat
sqlman

Registriert seit: 5. Jan 2006
Ort: Bochum
7 Beiträge
 
#9

AW: Problem mit Caption bei neuer Komponente basierend auf TLabel

  Alt 27. Mär 2011, 12:54
Das einzige was dein if erreicht hat, ist das das Label dann den Namen des Typs im Designer erhält und dieser anschliessend in dem Programm bestehen bleibt.

Der Konstruktor wird aber zur Laufzeit durchlaufen...und setzt auch die Caption des Labels. Aber diese wird danach wieder überschrieben. Dies ergab ein Showmessage(caption) im Konstructor.

Code:
constructor Ttimestamp.Create(AOwner:TComponent);
begin
  inherited Create(AOwner);
  if not (csDesigning in ComponentState) then
    caption:=datetimetostr(sysutils.FileDateToDateTime(fileage(application.exename)));
 showmessage(caption);
end;
Das showmessage liefert in der IDE einen leeren String und in der Anwendung das Datum der Anwendung, angezeigt im Label wird allerdings immer 'timstamp1'.

Gut, scheint also ein Oncreate Pflicht zu werden, oder?
  Mit Zitat antworten Zitat
sqlman

Registriert seit: 5. Jan 2006
Ort: Bochum
7 Beiträge
 
#10

AW: Problem mit Caption bei neuer Komponente basierend auf TLabel

  Alt 27. Mär 2011, 12:56
@himitsu: Die Sache mit dem TLael sollte nur das Problem für das Forum vereinfachen. Es ist aber definiv so wie du gesagt hast. Weisst Du ob das holen der DFM Werte vor dem OnCreate geschieht? Dann könnte ich meine Problem, das ich hier mit der Caption des TLabel darstellen wollte ebenfalls so lösen.

Gruß
Raka
  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 16:52 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