Delphi-PRAXiS

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 Eigene Komponente: Label auf TCustomPanel platzieren (https://www.delphipraxis.net/156718-eigene-komponente-label-auf-tcustompanel-platzieren.html)

borncrush 12. Dez 2010 15:14

Eigene Komponente: Label auf TCustomPanel platzieren
 
Hallo liebe Gemeinde ;-),

ich habe momentan ein Problem beim Erstellen eines Labels innerhalb meiner, von mir erstellen, Komponente.

Das Label ist einfach nicht zu sehen. Kann bitte mir einer einen kurzen Denkanstoß geben?

Hier der verkürzte Quelltext:
Delphi-Quellcode:
unit Ctrl_ListItem;

interface

uses
  SysUtils, Classes, Controls, ExtCtrls, StdCtrls, Graphics,dialogs;

type
  TCtrl_ListItem = class(TWinControl)
  private

    FUrl: string;
    FDescription: string;

    procedure SetLabel_Url(const Value: string);
    procedure SetLabel_Description(const Value: string);
    function ReadLabel_Url: string;
    function ReadLabel_Description: string;
  protected
    Label_Url: TLabel;
    Label_Description: TLabel;
  public
    constructor Create(AOwner: TComponent); //override;
  published
    property Url: string read FUrl write SetLabel_Url;
    property Description: string read FDescription write SetLabel_Description;
  end;

procedure Register;

implementation

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

{ TCtrl_ListItem }

constructor TCtrl_ListItem.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  // csAcceptsControls ist gesetzt
  //ControlStyle := [csAcceptsControls, csCaptureMouse, csClickEvents,
//    csSetCaption, csOpaque, csDoubleClicks, csReplicatable];

  self.Label_Url := TLabel.Create(self.Owner); //NOTWENDIG???????????
  self.Label_Description := TLabel.Create(self);      


  Self.Align := alTop;
  self.Color := clCream;
  self.Font.Color := clCream;

  self.Label_Url.ParentColor := false;
  self.Label_Url.ParentFont := false;
  self.Label_Url.Top := 8;
  self.Label_Url.Left := 8;
  self.Label_Url.Font.Color := clBlue;
  self.Label_Url.Font.Style := [fsBold];
  self.Label_Url.Font.Size := 10;
  self.Label_Url.Cursor := crHandPoint;

  self.Label_Description.ParentColor := false;
  self.Label_Description.ParentFont := false;
  self.Label_Description.Top := 24;
  self.Label_Description.Left := 8;
  self.Label_Description.Font.Color := clblack;
  self.Label_Description.Font.Style := [fsBold];
  self.Label_Description.Font.Size := 8;
  self.Label_Description.Height := 33;
  self.Label_Description.Width := self.Width - 8;
  self.Label_Description.Anchors := [akLeft, akTop, akRight];


  self.Label_Url.BringToFront;
  self.Label_Description.BringToFront;
  Invalidate;
end;



function TCtrl_ListItem.ReadLabel_Description: string;
begin
  result := FDescription;
end;

function TCtrl_ListItem.ReadLabel_Url: string;
begin
  result := FUrl;
end;

procedure TCtrl_ListItem.SetLabel_Description(const Value: string);
begin
  self.FDescription := Value;
  self.Label_Description.Caption := Self.FDescription;
  Invalidate;

end;

procedure TCtrl_ListItem.SetLabel_Url(const Value: string);
begin
  self.FUrl := Value;
  self.Label_Url.Caption := Self.FUrl;
  Invalidate;

end;

end.

Danke.

Gruß und noch einen angenehmen 3. Advent :feuerchen:

DeddyH 12. Dez 2010 15:26

AW: Eigene Komponente: Label auf TCustomPanel platzieren
 
Setz einmal den Parent der Labels auf self.

borncrush 12. Dez 2010 15:56

AW: Eigene Komponente: Label auf TCustomPanel platzieren
 
Ja, danke DeddyH. Dies war ausschlaggebend für das Darstellen. Super!

(Habe noch bei der Constructor-Deklaration ein override hinzugefügt. :xmas: )

sx2008 13. Dez 2010 00:04

AW: Eigene Komponente: Label auf TCustomPanel platzieren
 
BringToFront und Invalidate sollten im Konstruktor nicht aufgerufen werden.
Der Aufruf von Invalidate ist auch an anderer Stelle unnötig, weil ein Label bei Änderung der Caption schon selbst dafür sorgt, dass es neu gezeichnet wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01: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