Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   ColorPanel - Panel mit speziellen Funktionen (https://www.delphipraxis.net/115400-colorpanel-panel-mit-speziellen-funktionen.html)

NickelM 11. Jun 2008 15:17


ColorPanel - Panel mit speziellen Funktionen
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hi Leute,

Ich hab mal meine erste eigene Komponente geschrieben und wollte mal fragen, was ihr davon haltet.

Es ist ein Panel, wo man halt mehr einfärben kann, als beim Standard oder sogar bei den LMD-Panel.

Es gibt Außerdem die möglcihkeit, es als Panel-Button zuverwenden, d.h. man kann sagen welches Bevel (Inner oder Outer) man den Effect des "Buttons" geben will.

Hier ist ein Bild, wo man (so hoffe ich) erkennen kann, was ich meine.

Bin gespannt was ihr dazu meint :zwinker: :mrgreen:

Hab eigentlich auch ein eigenes Bild, di in ne dcr datei drin ist, die kann ich aber leider net dran hängen schade

shmia 11. Jun 2008 15:50

Re: ColorPanel - Panel mit speziellen Funktionen
 
Nun, deine Farbwahl verursacht bei mir zwar Augenkrebs :zwinker: ,aber der Sourcecode sieht ganz gut aus.
Du solltest noch alle unbenutzten Units aus dem Uses entfernen bzw. falls möglich aus Abschnitt interface nach Abschnitt implementation verschieben.
Und die Einrückung der Sourcecodezeilen nach Borland Style Guide anpassen.

PS: hab da noch einen Fehler gesehen:
Delphi-Quellcode:
property BevelInnerOptions : TBevelOptions read FBevelInnerOptions write FBevelInnerOptions;  // Falsch   property BevelInnerOptions : TBevelOptions read FBevelInnerOptions write SetBevelInnerOptions; // Richtig

procedure TColorPanel.SetBevelInnerOptions(const Value: TBevelOptions);
begin
  FBevelInnerOptions.Assign(Value);
end;
Zusätzlich musst du noch die Assign-Methode von TBevelOptions überschreiben:
Delphi-Quellcode:
procedure TBevelOptions.Assign(Sender: TObject);
begin
  if Sender is TBevelOptions then
  begin
    FOwner := TBevelOptions(sender).FOwner;
    ...
  end
  else
    inherited;
end;

NickelM 11. Jun 2008 23:15

Re: ColorPanel - Panel mit speziellen Funktionen
 
Ist das wirklich nötig?? Da es ja auch so funkt, oder nicht??

shmia 12. Jun 2008 09:59

Re: ColorPanel - Panel mit speziellen Funktionen
 
Zitat:

Zitat von NickelM
Ist das wirklich nötig??

Ja, das muss sein.
Objekte in Delphi sind ja Zeiger. Wenn du im Konstruktor ein Objekt erzeugst, dann musst du genau dieses Objekt im Destruktor wieder freigeben.
Über das property BevelInnerOptions überschreibst du den alten Zeiger.
Also ist das ursprüngliche Objekt für immer verloren im Speicher (Speicherleck).
Bei dem Objekt, dass du zugewiesen hast, besteht die Gefahr, dass es doppelt freigegeben wird.
Deshalb muss das Objekt mit Assign() kopiert werden. So werden die Inhalte kopiert; nicht der Zeiger.

NickelM 13. Jun 2008 09:05

Re: ColorPanel - Panel mit speziellen Funktionen
 
Aha, okay jetzt hab ich das auch mal verstanden, warum die immer Assign benutzen


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