Einzelnen Beitrag anzeigen

idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#8

AW: Eingaben im Objektinspektor prüfen

  Alt 12. Jul 2015, 23:45
noch mal zur Sicherheit, bevor ich es nochmal ausprobiere (beim ersten Mal hat es nicht geklappt):
die "normalen" Prozeduren zum Setzen der property werden nach einem Register auch zur Entwurfszeit ausgeführt?
Irgendwie klappt das bei mir nicht.
Ich bin dabei, eine eigene Komponente von TEdit abzuleiten. Die soll (ähnlich wie TLabelledEdit) auch eine Caption bekommen, und das funktioniert im Design-Mode überhaupt nicht. Ich habe jetzt im Setter eine Kontrollmeldung ausgegeben, und auch die wird nur zur Laufzeit beim Formcreate angezeigt, aber nicht, wenn ich die Eigenschaft im Object-Inspector ändere. Was ist da falsch?

Delphi-Quellcode:
TLabelPosition = (ptAbove, ptLeft, ptRight, ptBelow);

TfdEdit = Class(TEdit,IfdComponent)
  private
  FCaption: String;
  FCaptionPosition: TLabelPosition;
  FCaptionFont: TFont;
  FCaptionDistance: Integer;
  ...
  procedure SetLabelProperties;
  procedure SetLabelCaption(const value: string);
  procedure SetLabelFont(value: TFont);
  procedure SetLabelDistance(value: integer);
  ...
  published
  property Caption: string read FCaption write SetLabelCaption;
  property CaptionFont: TFont read FCaptionFont write SetLabelFont;
  property CaptionDistance: integer read FCaptionDistance write SetLabelDistance;
  End;

procedure TfdEdit.SetLabelProperties;
begin
if not assigned(FLabel) then exit;
Flabel.Caption:=FCaption;
if assigned(FCaptionFont) then FLabel.Font:=FCaptionfont;
case FCaptionPosition of
   ptAbove: begin FLabel.Left:=Left; FLabel.Top:=Top-FLabel.Height-FCaptionDistance end;
   ptLeft: begin FLabel.Left:=Left-FCaptionDistance-FLabel.Width; Flabel.Top:=Top+(Height-Flabel.Height) div 2 end;
   ptRight: begin FLabel.Left:=Left+FCaptionDistance+Width; Flabel.Top:=Top+(Height-Flabel.Height) div 2 end;
   ptBelow: begin FLabel.Left:=Left; FLabel.Top:=Top+Height+FCaptionDistance end;
   end (* case *);
end;

procedure TfdEdit.SetLabelCaption(const value: string);
begin
  FCaption:=value;
  Showmessage('Label: '+Value);
  if value='then
    begin
    if assigned(FLabel) then FLabel.Free;
    exit
    end;
  if not assigned(FLabel) then
    begin
    FLabel:=TLabel.Create(Self);
    FLabel.Parent:=Parent
    end;
  SetLabelProperties;
end;
Wenn ich das Programm starte, wird Showmessage ausgeführt, und das Editfeld samt des Caption-Labels richtig angezeigt.
Aber wenn ich im OI die Eigenschaft Caption ändere, hat das keine sichtbare Auswirkung, es wird weder das Showmessage noch der Label angezeigt.

Das Setzen der CaptionFont im OI ist übrigens auch nicht möglich. Die Property wird im OI angezeigt, aber wenn ich die drei Punkte anklicke, kommt die Fehlermeldung:
Zitat:
nil kann nicht zu TFont zugewiesen werden.
obwohl ich im Konstruktor von TfdEdit den Wert CaptionFont mit self.font initialisiert habe.

Geändert von idefix2 (12. Jul 2015 um 23:47 Uhr)
  Mit Zitat antworten Zitat