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 Neue Komponente entwickeln (https://www.delphipraxis.net/193634-neue-komponente-entwickeln.html)

josef-b 25. Aug 2017 08:08

AW: Neue Komponente entwickeln
 
nein im Code ist er auch nicht verfügbar..

Ich möchte einfach nur die Farbe von der aus TGraphicControl abgeleiteten Komponente
zur Laufzeit ändern, in Abhängigkeit von einer Boolschen Variablen.

Genau genommen nicht die ganze Komponente sondern nur zwei "Kreise" darin,
etwas weiter oben sieht man das Teil im Anhang.

So nach dem Motto: if true then farbe = rot, if false then farbe = weiss

DeddyH 25. Aug 2017 08:20

AW: Neue Komponente entwickeln
 
Das würde ich nicht so machen, sondern im Setter der Property ein Refresh/Repaint/Invalidate aufrufen. Innerhalb der Zeichenroutine wird dann der entsprechende Teil gemäß des Property-Wertes eingefärbt.

josef-b 25. Aug 2017 08:21

AW: Neue Komponente entwickeln
 
Sorry DeddyH ,

da hatte sich jetzt was überschnitten...

Das hat jetzt geklapt mit dem Canvas.

Habe die property eingefügt.

Danke, aber das mit dem Setter habe ich nicht verstanden.

Kannst du mir das noch etwas genauer erklären, ich bin leider kein gelernter Informatiker, nur Betriebswirt :( ;-)

Aviator 25. Aug 2017 09:23

AW: Neue Komponente entwickeln
 
Habe gerade mal ausgehend von Detlef's Beispiel im Editor was zusammengeschrieben. Sollte eigentlich funktionieren. Eventuell ist noch der ein oder andere Syntaxfehler drin, aber den bekommst Du dann denke ich aufgelöst. :)

Delphi-Quellcode:
type
  TSiloZelle = class(TGraphicControl)
  private
    FIsEmpty: Boolean;
  protected
    procedure Paint; override;
    procedure SetIsEmpty(Value: Boolean); virtual;
    function GetIsEmpty: Boolean; virtual;
  public
    //...
    property Canvas;
    property IsEmpty: Boolean read GetIsEmpty write SetIsEmpty;
  //...
  end;


procedure TSiloZelle.Paint;
begin
  inherited;

  DoSomePaintStuff();

  if IsEmpty then
    Canvas.Brush.Color := clRed
  else
    Canvas.Brush.Color := clGreen;

  DoSomeOtherPaintStuff();
end;

procedure SetIsEmpty(Value: Boolean);
begin
  FIsEmpty := Value;
  Self.Invalidate;
end;

function GetIsEmpty: Boolean;
begin
  Result := FIsEmpty;
end;

DeddyH 25. Aug 2017 10:14

AW: Neue Komponente entwickeln
 
Richtig, ich persönlich frage nur immer ab, ob sich der Wert auch tatsächlich geändert hat, damit nicht unnötig neu gezeichnet wird.
Delphi-Quellcode:
type
  TMeineDingensKomponente = class(TGraphicControl)
  private
    FSomeProp: Boolean;
    procedure SetSomeProp(const Value: Boolean);
  //...
  public
    property SomeProp: Boolean read FSomeProp write SetSomeProp;
    //...
  end;

//...

procedure TMeineDingensKomponente.SetSomeProp(const Value: Boolean);
begin
  if FSomeProp <> Value then
    begin
      FSomeProp := Value;
      Invalidate; //In der Paint-Methode dann je nach Wert zeichnen
    end;
end;

Aviator 25. Aug 2017 10:25

AW: Neue Komponente entwickeln
 
Zitat:

Zitat von DeddyH (Beitrag 1379451)
Richtig, ich persönlich frage nur immer ab, ob sich der Wert auch tatsächlich geändert hat, damit nicht unnötig neu gezeichnet wird.

:thumb: :thumb: :thumb:

Meins war allerdings nur ein Beispiel um zu verdeutlichen was du meintest. Die zusätzlichen Optimierungen habe ich in dem Schritt noch nicht bedacht/beachtet. :wink:

DeddyH 25. Aug 2017 10:32

AW: Neue Komponente entwickeln
 
Man kann sich auch ein paar OpenSource-Projekte ansehen, z.B. das hier: http://www.delphipraxis.net/71655-bu...nschaften.html oder auch meinen runden Button: http://www.delphipraxis.net/107624-g...ezeichnet.html


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

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz