AGB  ·  Datenschutz  ·  Impressum  







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

Hilfe mit Canvas?

Ein Thema von nisemono · begonnen am 19. Mai 2014 · letzter Beitrag vom 20. Mai 2014
Antwort Antwort
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#1

AW: Hilfe mit Canvas?

  Alt 20. Mai 2014, 01:02
Lieber immer die ganze Litanei voll ausschreiben.
DRY
Ich finde Gollums Variante schon deutlich lesbarer und wartbarer als alles dutzendfach zu wiederholen, insbesondere bei längeren Call-Chains.
Im Allgemeinen gehe ich ein Schritt weiter und lagere ich solchen Code in eine Funktion/Methode aus. Damit ist der Code schön kurz und kann dann nach Belieben auf jedes Canvas angewendet werden, welches als Argument übergeben wird.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.340 Beiträge
 
Delphi 12 Athens
 
#2

AW: Hilfe mit Canvas?

  Alt 20. Mai 2014, 03:18
Mit dem WITH muß man halt wissen was man macht, denn das kann auch nachteile haben, da es den Namespace verschiebt und man darin dann andere Methoden bekommt, als man es gewohnt ist.
Oder wer will im WITH denn überall das Self. davor schreiben, nur um auf Nummer sicher zu gehn?

Beispiel: with R do Height := Bottom - Top;

Gemeint war ja ein Self.Height := R.Bottom - R.Top; , aber seit "kurzem" macht Delphi da plötzlich ein R.Height := R.Bottom - R.Top; daraus,
da das Rect nun eine Height.Methode besitzt, womit man nun auch Height := R.Height; schreiben könnte, was einem Height := CalcHeight(R); entspricht.

Wenn sich also der Typ im WITH "weiterentwickelt" und es dadurch zu Namenskonflikten kommt, dann hat man den Salat, wenn man das vorher nicht bedacht hat,
bzw. wenn man es nicht immer wieder überpüft, nach Austausch/Upgrade der entsprechenden Bibliotheken.

Fazit: Solange man, bei dem gezeigten Code, davon ausgehen kann, daß ein TCanvas in Zukunft kein X oder Y enthält, dann ist alles gut.

Oder man nimmt halt die Variante von Gollumn/BUG. (Ob nun lokale Variable oder Parameter ... ist am Ende das Selbe)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (20. Mai 2014 um 03:25 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Hilfe mit Canvas?

  Alt 20. Mai 2014, 06:56
Die beste Alternative ist eigentlich wiederverwendbaren Code zu schreiben:
Delphi-Quellcode:
procedure Foo( ACanvas : TCanvas; X, Y : Integer );
begin
  ACanvas.MoveTo(X, Y);
  ACanvas.LineTo(X + 200, Y + 100);
  ACanvas.RectAngle(10, 10, 150, 200);
end;
und selbiges mit Foo( Image1.Canvas, X, Y ); aufzurufen
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#4

AW: Hilfe mit Canvas?

  Alt 20. Mai 2014, 08:24
Gegen eine Methode mit einem Canvas als Parameter ist nichts einzuwenden, das ist wunderbar selbstdokumentierend (wenn man gescheite Methodennamen nutzt), und sicherlich die beste Lösung von allen. Da stimme ich zu!
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Hilfe mit Canvas?

  Alt 20. Mai 2014, 08:35
Wobei man dann innerhalb der Funktion auch wieder zig mal "ACanvas." schreibt. Hier könnte man wieder in Versuchung kommen, with zu benutzen, was die potentiellen Probleme eigentlich nur verlagert.
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
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Hilfe mit Canvas?

  Alt 20. Mai 2014, 08:48
Wobei man dann innerhalb der Funktion auch wieder zig mal "ACanvas." schreibt. Hier könnte man wieder in Versuchung kommen, with zu benutzen, was die potentiellen Probleme eigentlich nur verlagert.
Ein Großteil des Lebens besteht doch daraus einer Versuchung zu widerstehen

Darum schreiben wir ja auch immer kurze und knackige Methoden und schon wird die Versuchung immer geringer
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Hilfe mit Canvas?

  Alt 20. Mai 2014, 08:58
Die Verwendung der Zwischenablage reduziert die Versuchung noch einmal deutlich . Ich selbst lagere Code-Teile, die nur einmalig verwendet werden, eigentlich nur dann aus, wenn die enthaltende Routine nicht mehr in Gänze auf meinen Bildschirm passt, oder wenn evtl. die Möglichkeit besteht, dass sie später doch noch einmal woanders gebraucht werden könnten.
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
Benutzerbild von nachti1505
nachti1505

Registriert seit: 7. Apr 2007
188 Beiträge
 
Delphi 7 Enterprise
 
#8

AW: Hilfe mit Canvas?

  Alt 20. Mai 2014, 09:01
So richtig passt das hier nicht her - aber wie werden Namenskollisionen im with eigentlich aufgelöst?

Delphi-Quellcode:
TFoo = class
  property Foo2: TFoo2;
  procedure DoSomething;
end;

TFoo2 = class
  property Bar: TBar;
  procedure DoSomething;
end;

TBar = class
  procedure DoSomething;
end;

Foo: TFoo;
with Foo do
  with Foo2 do
    with Bar do
      DoSomething;
Was wird aufgerufen? Mein Tipp wäre doSomething von TBar?
  Mit Zitat antworten Zitat
Antwort Antwort


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 14:08 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