AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Saubere Programmierung mit Delphi

Ein Thema von Christian18 · begonnen am 15. Mär 2008 · letzter Beitrag vom 16. Mär 2008
Antwort Antwort
Seite 2 von 3     12 3      
mkinzler
(Moderator)

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

Re: Saubere Programmierung mit Delphi

  Alt 15. Mär 2008, 22:15
Zitat von 1234588:
FForm wird ja normalerweise mit der TBackground instance zerstoert, imho
Wenn das Objekt auch dort erzeugt wurde. was hier aber nicht der Fall ist.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Christian S.
Christian S.

Registriert seit: 19. Apr 2003
Ort: Düsseldorf
835 Beiträge
 
#12

Re: Saubere Programmierung mit Delphi

  Alt 15. Mär 2008, 22:16
Ich finde es merkwürdig, dass TBackground die Form zerstört, obwohl es sie nicht erzeugt. IMHO sollte nur derjenige, der etwas erzeugt, auch für das Zerstören zuständig sein.

Außerdem solltest Du Dir hier mal die Konvention zur Methoden-Benennung angucken.
Christian S.
Admin in der Entwickler-Ecke
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#13

Re: Saubere Programmierung mit Delphi

  Alt 15. Mär 2008, 22:19
Hier mal ein Vorschlag...

Delphi-Quellcode:
unit UBackground;

interface

uses
  Forms, Graphics;

type
  TBackground = class
  private
    FForm : TForm;
    FColor : Array[0..1] of TColor;
    FDistance : Byte;
  public
    constructor Create(AForm: TForm; AColor1, AColor2: TColor; ADistance: Byte);
    procedure Horizontal;
    procedure Vertical;
  end;

implementation

constructor TBackground.Create(AForm: TForm; AColor1, AColor2: TColor; ADistance: Byte);
begin
  FForm:=AForm;
  FColor[0]:=AColor1;
  FColor[1]:=AColor2;
  FDistance:=ADistance;
end;

procedure TBackground.Horizontal;
var i : Integer; // Schleifenvariable
begin
  if assigned(FForm) then begin
    FForm.Color:=FColor[0];
    FForm.Canvas.Pen.Color:=FColor[1];
    i:=0;
    while i <= FForm.ClientHeight do begin
      FForm.Canvas.MoveTo(0, i);
      FForm.Canvas.LineTo(FForm.ClientWidth, i);
      Inc(i, FDistance);
    end;
  end;
end;

procedure TBackground.Vertical;
var i : Integer; // Schleifenvariable
begin
  if assigned(FForm) then begin
    FForm.Color:=FColor[0];
    FForm.Canvas.Pen.Color:=FColor[1];
    i:=0;
    while i <= FForm.ClientWidth do begin
      FForm.Canvas.MoveTo(i, 0);
      FForm.Canvas.LineTo(i, FForm.ClientHeight);
      Inc(i, FDistance);
    end;
  end;
end;

end.
Gruss
Thorsten
  Mit Zitat antworten Zitat
Benutzerbild von semo
semo

Registriert seit: 24. Apr 2004
755 Beiträge
 
Delphi 2010 Professional
 
#14

Re: Saubere Programmierung mit Delphi

  Alt 15. Mär 2008, 22:21
parameter sollten als const übergeben werden in deinem constructor
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#15

Re: Saubere Programmierung mit Delphi

  Alt 15. Mär 2008, 22:26
Du setzt die Farbwerte nicht auf den Ursprungszustand zurück. Wenn jemand Deine Klasse benutzt und selber Zeichenoperationen auf dem Canvas durchführt, änderst Du einfach die Farben.

Vor den Schleifen solltest Du FForm.ClientWidth und FForm.ClientHeight in einer Integervariable speichern. Dies ist schneller als der Zugriff über die Formproperties in der Schleife.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#16

Re: Saubere Programmierung mit Delphi

  Alt 16. Mär 2008, 01:16
Zitat von Union:
Du setzt die Farbwerte nicht auf den Ursprungszustand zurück. Wenn jemand Deine Klasse benutzt und selber Zeichenoperationen auf dem Canvas durchführt, änderst Du einfach die Farben.
Das heisst du initialisierst niemals deine Farben vor Zeichenoperationen? Ich finde das vergebliche Mühe, da andere Zeichenoperationen fast immer die Farbe vor derer selber festlegen bzw. sogar unterschiedliche, von anderen Parametern abhängige Farben, festlegen.

Zitat von M. Hassmann:
parameter sollten als const übergeben werden in deinem constructor
Und lieferst du dazu auch eine Begründung?

Und nun noch mein Vorschlag:

Delphi-Quellcode:
unit UBackground;

interface

uses
  Forms, Graphics;

type
  TBackground = class
  private
    fBackgroundColor: TColor;
    fLineColor: TColor;
    fDistance: Integer;
  public
    procedure Horizontal(AForm: TForm);
    procedure Vertical(AForm: TForm);

    property BackgroundColor: TColor read fBackgroundColor write fBackgroundColor;
    property LineColor: TColor read fLineColor write fLineColor;
    property Distance: integer read fDistance write fDistance;
  end;

implementation

procedure TBackground.Horizontal(AForm: TForm);
var
  lWidth, lHeight: integer;
begin
  if assigned(AForm) then
  begin
    AForm.Color := fBackgroundColor;
    AForm.Canvas.Pen.Color := fLineColor;

    lWidth := AForm.ClientWidth;
    lHeight := AForm.ClientHeight;
    while lHeight >= 0 do
    begin
      AForm.Canvas.MoveTo(0, lHeight);
      AForm.Canvas.LineTo(lWidth, lHeight);

      Dec(lWidth, fDistance);
    end;
  end;
end;

procedure TBackground.Vertical(AForm: TForm);
var
  lWidth, lHeight: Integer;
begin
  if assigned(AForm) then
  begin
    AForm.Color := fBackgroundColor;
    AForm.Canvas.Pen.Color := fLineColor;

    lHeight := AForm.ClientHeight;
    lWidth := AForm.ClientWidth;
    while lWidth >= 0 do
    begin
      AForm.Canvas.MoveTo(lWidth, 0);
      AForm.Canvas.LineTo(lWidth, lHeight);

      Dec(lWidth, fDistance);
    end;
  end;
end;

end.
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#17

Re: Saubere Programmierung mit Delphi

  Alt 16. Mär 2008, 10:19
Gutem Morgen,

Muetze1, ich habe da mal ne Frage. Warum machst du alle Eigenschaften der Klasse TBackground über property öffentlcih und die Form nicht?

MFG Christian18
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.641 Beiträge
 
#18

Re: Saubere Programmierung mit Delphi

  Alt 16. Mär 2008, 10:21
Zitat von Christian18:
Delphi-Quellcode:
  TBackground = class
  private
    FForm : TForm;
    FColor : Array[0..1] of TColor;
    FDistance : Byte;
Kleiner Tipp aus der Praxis:
Delphi-Quellcode:
  TBackground = class
  private
    FForm: TForm;
    FColor: Array[0..1] of TColor;
    FDistance: Byte;
Ergo: Keine (oder immer eine feste Anzahl an) Leerzeichen zwischen Name und Doppelpunkt, und dann der Typ.

Des öfteren Sucht man eine Deklaration um schnell dort hin zu gelangen. Ich würde dann z.B. immer nach "FColor:" suchen. Wenn da Leerzeichen zwischen sind findet die Suche das nicht. Und nur nach FColor suchen zeigt ja nicht nur die Deklaration, sondern jedes Vorkommen an. Ist also nicht das gewünschte Ergebnis.

Das mag zwar optisch nicht so schön eingerückt wirken, ist aber bei der Suche nach deklarationen umso praktischer.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#19

Re: Saubere Programmierung mit Delphi

  Alt 16. Mär 2008, 10:29
Ok, danke für den Tipp.

ich werde versuchen mich daran zu halten. Hast du eine Idee auf eine vorherige Frage?

MFG Christian18
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#20

Re: Saubere Programmierung mit Delphi

  Alt 16. Mär 2008, 11:26
Bezüglich der Formatierung würde ich einen der gängigen Codeformatter nehmen und mich danach nicht mehr drum kümmern.

Wenn du sauber programmieren möchtest, 'solltest' Du deinen Code auch kommentieren. Ansonsten finde ich dein Beispiel zu klein, um eine Aussage über sauberes Programmieren zu machen. Es reicht ja nicht, einige Formatierungskonventionen zu verfolgen (dafür gibts ja Formatierer). Viel wichtiger ist doch, wie Du deine Objekte definierst, ob Du immer ein geeignetes Pattern verwendest usw.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 20:43 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