Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Wozu ist ein "Canvas.Pen.Assign(Pen)" gut? (https://www.delphipraxis.net/156101-wozu-ist-ein-canvas-pen-assign-pen-gut.html)

Jazzman_Marburg 19. Nov 2010 18:27

Wozu ist ein "Canvas.Pen.Assign(Pen)" gut?
 
'n Abend!

Ich lese gerade in einer Klasse (TCustomControl Nachfahre) in der Paint (override) Methode ganz am Anfang folgende drei Zeilen -- und versteh nicht wozu sie gut sind:

Delphi-Quellcode:
  Canvas.Pen.Assign(Pen);
  Canvas.Brush.Assign(Brush);
  Canvas.Font.Assign(Font);
Wozu ist dieses Assign notwenig?
(Wenn ich es auskommentiere merke ich keinen Unterschied)

Jemand eine Idee?

Danke & Gruß
Jazzman

Teekeks 19. Nov 2010 18:38

AW: Wozu ist ein "Canvas.Pen.Assign(Pen)" gut?
 
Assign() Kopiert, vereinfacht gesagt, die gesamten Werte von deiner Angabe in die Variable mit der du Assign aufrufst.
Wenn du die Zeilen Auskommentierst könnte es zu Problemen kommen wenn du die Werte wo anders mal änderst.

Soweit als Kurzfassung.

Gruß Teekeks

DeddyH 19. Nov 2010 19:46

AW: Wozu ist ein "Canvas.Pen.Assign(Pen)" gut?
 
Vereinfacht gesagt sagst Du Deiner Zeichenfläche, dass sie die Werte (Stift, Pinsel und Schriftart) der Komponente selbst zur Darstellung verwenden soll. Du kannst die Zeilen ja spaßeshalber einmal auskommentieren, einen dieser Werte ändern und schauen, was passiert.

Jazzman_Marburg 19. Nov 2010 20:10

AW: Wozu ist ein "Canvas.Pen.Assign(Pen)" gut?
 
Zitat:

Zitat von DeddyH (Beitrag 1062647)
Vereinfacht gesagt sagst Du Deiner Zeichenfläche, dass sie die Werte (Stift, Pinsel und Schriftart) der Komponente selbst zur Darstellung verwenden soll. Du kannst die Zeilen ja spaßeshalber einmal auskommentieren, einen dieser Werte ändern und schauen, was passiert.

Vielen Dank für Die Kommentare!

Bin nicht ganz sicher ob ich es verstanden habe -- aber nachedem ich die Zeilen auskommentiert habe und anschließend:

Delphi-Quellcode:
//  Canvas.Pen.Assign(Pen);
//  Canvas.Brush.Assign(Brush);
//  Canvas.Font.Assign(Font);

    Canvas.Brush.Color := ClRed;
eine neue Farbe setze, funktioniert alles prima -- ohne Probleme. Merkwürdig, nicht wahr?! Das war ja bereits mein erster Test, bevor ich den Thread startete -- einfach auskommentieren und schaun was passiert. Kann keinen Unterschied erkennen.

Merkwürdig
Jazzamn

DeddyH 19. Nov 2010 20:31

AW: Wozu ist ein "Canvas.Pen.Assign(Pen)" gut?
 
Angenommen, Deine Komponente hat eine Color-Property. Wie willst Du nun erreichen, dass auch mit dieser Farbe gezeichnet wird?

Jazzman_Marburg 19. Nov 2010 20:51

AW: Wozu ist ein "Canvas.Pen.Assign(Pen)" gut?
 
Zitat:

Zitat von DeddyH (Beitrag 1062653)
Angenommen, Deine Komponente hat eine Color-Property. Wie willst Du nun erreichen, dass auch mit dieser Farbe gezeichnet wird?

Ich denke doch so:
Delphi-Quellcode:
TMyPaper = CLASS(TCustomControl)

PROPERTY PaperColor : TColor READ FPaperColor WRITE SetPaperColor;
...

PROCEDURE TMyPaper.SetPaperColor(Value: TColor);
BEGIN

  IF FPaperColor <> Value THEN
  BEGIN
    FPaperColor := Value;
    INVALIDATE;
  END;

END;

PROCEDURE TGraphPaper.Paint;
BEGIN
  INHERITED;

  // Canvas.Pen.Assign(Pen);     --> Mit oder ohne, spielt keine Rolle (glaube ich!)
  // Canvas.Brush.Assign(Brush);  "   "
  // Canvas.Font.Assign(Font);    "   "

  Canvas.Brush.Color := FPaperColor;
  Canvas.Rectangle(0, 0, Width, Height);
...
Oder verstehe ich Dich falsch?

Gruß
Jazzman

DeddyH 19. Nov 2010 21:03

AW: Wozu ist ein "Canvas.Pen.Assign(Pen)" gut?
 
Solange das einfache Datentypen sind, kannst Du sie natürlich auch zuweisen. Wenn es aber Klassen sind (genauer: von TPersistent abgeleitet), dann solltest Du vorsichtshalber Assign verwenden (Font wäre z.B. so ein Kandidat).


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