AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Neue Komponente entwickeln

Ein Thema von josef-b · begonnen am 23. Aug 2017 · letzter Beitrag vom 25. Aug 2017
Antwort Antwort
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.660 Beiträge
 
Delphi 12 Athens
 
#1

AW: Neue Komponente entwickeln

  Alt 25. Aug 2017, 06:25
Auf welchen Canvas greifst Du denn in Deiner Paint-Methode zu, wenn es angeblich keinen gibt?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
josef-b

Registriert seit: 6. Jun 2004
Ort: bei Jena in Thüringen
95 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Neue Komponente entwickeln

  Alt 25. Aug 2017, 07:44
Ich habe die Komponente erstellt.

Sie befindet sich auch in der Tool-Palette.

Wenn ich jetzt die Komponente auf ein Formular platziere,
heisst die dann Silozelle1.

Soweit alles gut.

aber was glaub ich nicht geht..

Silozelle1.canvas....irgendwas

Oder muss ich da noch was extra registrieren? Hinzufügen?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.660 Beiträge
 
Delphi 12 Athens
 
#3

AW: Neue Komponente entwickeln

  Alt 25. Aug 2017, 07:47
Was hast Du denn vor? "Von außen" auf Deine Komponente zeichnen?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.879 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Neue Komponente entwickeln

  Alt 25. Aug 2017, 07:50
Im Objektinspektor sieht man keinen Canvas. Im Code sollte er aber verfügbar sein.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.660 Beiträge
 
Delphi 12 Athens
 
#5

AW: Neue Komponente entwickeln

  Alt 25. Aug 2017, 08:01
In TGraphicControl ist er aber als protected deklariert, man muss ihn also öffentlich machen.
Delphi-Quellcode:
type
  TSiloZelle = class(TGraphicControl)
  private
    //...
  public
    //...
    property Canvas;
  //...
  end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
josef-b

Registriert seit: 6. Jun 2004
Ort: bei Jena in Thüringen
95 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Neue Komponente entwickeln

  Alt 25. Aug 2017, 08:21
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

Geändert von josef-b (25. Aug 2017 um 08:24 Uhr)
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Neue Komponente entwickeln

  Alt 25. Aug 2017, 09:23
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;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.660 Beiträge
 
Delphi 12 Athens
 
#8

AW: Neue Komponente entwickeln

  Alt 25. Aug 2017, 10:14
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
josef-b

Registriert seit: 6. Jun 2004
Ort: bei Jena in Thüringen
95 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Neue Komponente entwickeln

  Alt 25. Aug 2017, 08:08
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.660 Beiträge
 
Delphi 12 Athens
 
#10

AW: Neue Komponente entwickeln

  Alt 25. Aug 2017, 08:20
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 Uhr.
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