Delphi-PRAXiS
Seite 1 von 3  1 23      

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 Eingaben im Objektinspektor prüfen (https://www.delphipraxis.net/78929-eingaben-im-objektinspektor-pruefen.html)

messie 13. Okt 2006 10:10


Eingaben im Objektinspektor prüfen
 
Moin,

ich bastle mir gerade die TFormResizer-Kompo von kalmi01 für meine Zwecke zurecht, dabei habe ich eine Menge Zeit verschenkt, weil ich im Objektinspektor einen unsinnigen Wert eingegeben hatte.
Wie kann ich die Werte bei der Eingabe prüfen?

Grüße, Messie

mkinzler 13. Okt 2006 10:12

Re: Eingaben im Objektinspektor prüfen
 
In der Setter-Methode der Property bzw. im passenden PropertyEditor

messie 13. Okt 2006 10:22

Re: Eingaben im Objektinspektor prüfen
 
Zitat:

Zitat von mkinzler
In der Setter-Methode der Property bzw. im passenden PropertyEditor

Damit kann ich noch nicht viel anfangen. Ich brauche also eine Routine, die zur Entwurfszeit benutzt wird. Wie sieht die aus? Reicht es, eine Routine zu schreiben und dann die Kompo neu zu installieren?

Grüße, Messie

messie 16. Okt 2006 19:17

Re: Eingaben im Objektinspektor prüfen
 
...ich würde das gerne noch verstehen. Hat noch jemand ein Beispiel oder ein paar warme Worte?

Grüße, Messie

mkinzler 16. Okt 2006 19:34

Re: Eingaben im Objektinspektor prüfen
 
Delphi-Quellcode:
TPerson = class
  private
    FGeburttag: TDate;
  public
    procedure setGeburttag( Value: TDate);
    function getAlter: Byte;
  published
    property Geburtstag: Tdate read FGeburttag write setGeburtstag;
    property Alter: Byte read getAlter;
end;

procedure TPerson.setGeburttag( Value: TDate);
begin
    if Value < date() then
    begin
      FGeburttag := Value;
    end
    else
    begin
     //Fehlerausgabe
    end;
end;

function TPerson.getAlter: Byte;
var
    d,m,y: Word;
begin
    Decodedate( Date()-FGeburttag, y, m, d);
    result := y;
end;

messie 16. Okt 2006 19:50

Re: Eingaben im Objektinspektor prüfen
 
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?

Grüße, Messie

mkinzler 16. Okt 2006 20:04

Re: Eingaben im Objektinspektor prüfen
 
Ja.

idefix2 12. Jul 2015 22:45

AW: Eingaben im Objektinspektor prüfen
 
Zitat:

Zitat von messie (Beitrag 538902)
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?

Zitat:

Zitat von mkinzler (Beitrag 538910)
Ja.

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.

stahli 12. Jul 2015 22:54

AW: Eingaben im Objektinspektor prüfen
 
Bevor sich jemand mit den Details befasst: Installierst Du das Package auch neu?
Sonst wird zur Laufzeit die neue Version genutzt, die IDE nutzt aber noch die alte (die vielleicht noch nicht auf die Änderungen reagiert).

idefix2 12. Jul 2015 23:03

AW: Eingaben im Objektinspektor prüfen
 
AAAhhhh!
Das heisst, dass ich nach jeder Komponentenänderung das Package neu installieren muss, damit die Änderungen sichtbar sind?
Das macht aber die Entwicklung von Komponenten zu einem leicht getrübten Vergnügen :)

Werde das Package jetzt neu installieren und dann berichten, ob das geholfen hat.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:46 Uhr.
Seite 1 von 3  1 23      

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