Delphi-PRAXiS
Seite 3 von 3     123   

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 komponeten eigenschaften (https://www.delphipraxis.net/9559-komponeten-eigenschaften.html)

sakura 29. Sep 2003 13:37

Re: komponeten eigenschaften
 
Sorry, ersetze Nummer mal mit Art...

...:cat:...

Motzi 29. Sep 2003 13:43

Re: komponeten eigenschaften
 
Du musst den neuen Wert der privaten Feld-Variable zuweisen und nicht wieder dem property selbst, sonst kommst du in eine Endlosschleife, da sich die Set-Methode indirekt immer wieder selbst aufruft!
Delphi-Quellcode:
procedure TTest.SetArt(Value: TArt);
begin
  if Value <> Nummer then
  begin
    // ÄNDERUNG
    FNummer := Value;
  end;
end;

LoL 29. Sep 2003 13:44

Re: komponeten eigenschaften
 
im oi wird das was man ausgewählz hat nicht gespeichert sondern einfach wieder zurückgesetzt

Christian Seehase 29. Sep 2003 13:44

Re: komponeten eigenschaften
 
Moin Christoph,

ändere das mal wie folgt ab:

Delphi-Quellcode:
procedure TTest.SetArt(Value: TArt);
begin
  if Value <> Art then
  begin
    // ÄNDERUNG
    Art := Value;
  end;
end;
Wenn die Property (nummer) mit Value gefüllt wird, wird automatisch die Methode SetArt wieder aufgerufen, und zwar endlos. Die Eigenschaft nummer ist ja nur ein Platzhalter für das interne Feld Art, und kann selber keinen Wert aufnehmen.

BTW: Um sich auch in fremden Sourcen zurechtzufinden, bzw. eigenen Sourcen für andere lesbarer zu gestalten, wäre es sinnvoll die Benennungskonventionen einzuhalten.
Das soll in diesem Falle heissen: Interne Felder sollten immer mit einem F beginnen.
Dann sieht man auch innerhalb der Komponente leichter auf was man zugreift.

LoL 29. Sep 2003 13:50

Re: komponeten eigenschaften
 
hier mal das so wie ich es machen will:
ich möchte innerhalb des labels ein dreieck zeichnen. zur auswahl unten rechts und links und oben rechts und links.
Delphi-Quellcode:
unit Test;

interface

uses
  Windows, Messages, SysUtils, Classes, Controls, ExtCtrls, Graphics, StdCtrls;

type
  TArt = (TaDreieckUl, TaDreieckUr, TaDreieckOl, TaDreieckOr);

type
  TTest = class(TLabel)
  private
    { Private declarations }
    FArt    : TArt;
    procedure SetArt(Value : TArt);
  protected
    { Protected declarations }
  public

    { Public declarations }
    constructor Create(AOwner: TComponent); override;
  published
    { Published declarations }
    property Aussehen : TArt   read FArt    write SetArt;
  end;

procedure Register;

implementation

constructor TTest.Create(AOwner : TComponent);
begin
  inherited Create(AOwner);
end;

procedure TTest.SetArt(Value: TArt);
begin
  if Value <> Aussehen then
    begin
      if (Aussehen = TaDreieckUl) or (Aussehen = TaDreieckOr) then
        begin
          canvas.Brush.Color := clblack;
          canvas.MoveTo(0,0);
          canvas.LineTo(width,height);
          if Aussehen = TaDreieckUl then
            canvas.FloodFill(1,10,clblack,fsborder)
          else
            canvas.FloodFill(10,1,clblack,fsborder)
        end
      else
        begin
          canvas.Brush.Color := clblack;
          canvas.MoveTo(width,height);
          canvas.LineTo(0,height);
          if Aussehen = TaDreieckOl then
            canvas.FloodFill(1,10,clblack,fsborder)
          else
            canvas.FloodFill(10,1,clblack,fsborder)
        end;
      Aussehen := Value;
    end;
end;

procedure Register;
begin
  RegisterComponents('Samples', [TTest]);
end;

end.

sakura 29. Sep 2003 13:51

Re: komponeten eigenschaften
 
Code:
...
type
  TTest = class(TLabel)
  private
    { Private declarations }
    FArt    : TArt;
    procedure SetArt(Value : TArt);
  protected
    { Protected declarations }
  public

    { Public declarations }
    constructor Create(AOwner: TComponent); override;
  published
    { Published declarations }
    property Aussehen : TArt   read FArt    write SetArt;
  end;

...

procedure TTest.SetArt(Value: TArt);
begin
  if Value <> Aussehen then
    begin
      ....
      [color=#ff0000]FArt[/color] := Value;
    end;
end;
...
...:cat:...


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:11 Uhr.
Seite 3 von 3     123   

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