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/)
-   -   Komponente ändern von Eigenschaftswerten und (re-)paint (https://www.delphipraxis.net/193748-komponente-aendern-von-eigenschaftswerten-und-re-paint.html)

josef-b 5. Sep 2017 07:30

Komponente ändern von Eigenschaftswerten und (re-)paint
 
Delphi-Quellcode:
unit Elevator;

interface

uses
  System.SysUtils, System.Classes, Vcl.Controls, graphics, dialogs, forms;

type

  TElevator = class(TGraphicControl)
  private
    { Private-Deklarationen }

    FBreite: Integer;
    FHoehe: Integer;

  protected
    { Protected-Deklarationen }

  procedure Paint; override;

    public
    { Public-Deklarationen }

    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;



  published
    { Published-Deklarationen }
   
    property onclick;
    property ondblclick;
    property showhint;

    Property Breite : integer read FBreite write FBreite default 20;
    Property Hoehe : integer read FHoehe write FHoehe default 300;


  end;

procedure Register;

implementation

//uses uKomp_Zustaende;

procedure Register;
begin
  RegisterComponents('SPS', [TElevator]);
end;

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

destructor TElevator.Destroy;
begin
  inherited;

end;

procedure TElevator.Paint;
begin
  inherited; // <--- Wichtig!!!

  with canvas do
    begin
    //Silo-Körper
    pen.Color := clblack;
    Brush.Color := clgray;
    Brush.Style := bsSolid;
    rectangle(0,0,FBreite,FHoehe);
    end;
 
end;

Wenn beim Einsatz der Komponente also zur Entwurfszeit der Anwendung im OI die Werte für Breite und Höhe geändert werden,
wird das Objekt nicht neu gezeichnet..Wie kann ich das programmieren?, also wenn Value für Breite geändert, dann paint.


Die Default-Werte für Breite und Höhe übernimmt er nicht bei Nutzung der Komponente auf einer Form, da steht dann bei beidem 0
im OI.

Wie kann ich die Grundeinstellung (default) für (die geerbten Eigenschaften) width und height der Komponente ändern?

TiGü 5. Sep 2017 07:35

AW: Komponente ändern von Eigenschaftswerten und (re-)paint
 
Delphi-Quellcode:
property Breite : integer read SetBreite write FBreite default 20;
property Hoehe : integer read SetHoehe write FHoehe default 300;

...

procedure TElevator.SetBreite(const Value: Integer);
begin
  if FBreite <> Value then
  begin
    FBreite := Value;
    Repaint;
  end;
end;

procedure TElevator.SetHoehe(const Value: Integer);
begin
  if FHoehe <> Value then
  begin
    FHoehe := Value;
    Repaint;
  end;
end;

HolgerX 5. Sep 2017 07:47

AW: Komponente ändern von Eigenschaftswerten und (re-)paint
 
Hmm..

Besser so herum:

Zitat:

Zitat von TiGü (Beitrag 1380320)
Delphi-Quellcode:
property Breite : integer read FBreite write SetBreite default 20;
property Hoehe : integer FHoehe read write SetHoehe default 300;


haentschman 5. Sep 2017 07:58

AW: Komponente ändern von Eigenschaftswerten und (re-)paint
 
Moin..:P
Delphi-Quellcode:
property Breite : integer read FBreite write SetBreite default 20;
property Hoehe : integer read FHoehe write SetHoehe default 300;
...eher so. :zwinker:

:evil: Man sollte mal aktualisieren...

@josef-b:
Aus deinem Quelltext kann ich entnehmen, daß du nicht mit der Codevervollständigung arbeitest. Warum machst du dir es so schwer? Du hast doch "Seattle". Da hast du die Werkzeuge dazu. :gruebel: Eine bessere Variante ist der CnPack... ein Muß. :zwinker:

josef-b 5. Sep 2017 08:30

AW: Komponente ändern von Eigenschaftswerten und (re-)paint
 
Danke das Klappt :)

Nur die default-Werte übernimmt er nicht.

Breite und Höhe sind immer noch 0.

Ich habe die Initialisierungswerte ins oncreate der Komponente genommen, das geht auch ;-)

Aber wofür sind dann die Default Werte?

haentschman 5. Sep 2017 08:45

AW: Komponente ändern von Eigenschaftswerten und (re-)paint
 
Moin...:P

http://docwiki.embarcadero.com/RADSt...aften_(Delphi)
Zitat:

Die optionalen Direktiven stored, default und nodefault sind Speicherbezeichner. Sie haben keinerlei Auswirkungen auf die Funktionsweise des Programms, sondern bestimmen, ob die Werte der published-Eigenschaften in Formulardateien gespeichert werden.

TiGü 5. Sep 2017 09:05

AW: Komponente ändern von Eigenschaftswerten und (re-)paint
 
Möp, der Kaffee hat noch nicht gewirkt! Natürlich müssen die Setter hinter dem write anstatt hinter dem read!
Ich lasse es als warnendes Beispiel aber mal uneditiert, damit spätere Generationen sehen, was für schädliche Auswirkungen zu geringer Kaffeekonsum haben kann!

Wir haben gar keinen :coffee: Smiley! :(


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