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 Gollum
Gollum

Registriert seit: 14. Jan 2003
Ort: Boxberg
456 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

AW: Hilfe mit Canvas?

  Alt 19. Mai 2014, 18:14
Hallo,

evtl. so?

Delphi-Quellcode:
var derCanvas:TCanvas;
...
...
derCanvas:=Image1.Canvas;
derCanvas.MoveTo(1, 1);
...
  Mit Zitat antworten Zitat
Medium

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

AW: Hilfe mit Canvas?

  Alt 20. Mai 2014, 00:32
Wenn du dir damit "nur" Schreibarbeit ersparen willst, und dies nicht Teil einer Aufgabe ist, muss man dir davon dringend abraten dir das anzugewöhnen. Allen voran die Nutzung des "with" - DeddyH hat da nicht umsonst Schmerzen. Die Gründe einem Anfänger so zu erklären, dass es nicht mehr Fragen aufwirft als nötig ist dürfte schwierig werden, zumal es anfangs erstmal prima funktioniert. Deswegen soll hier erstmal ein "tu's lieber nicht" genügen. Ansonsten gibt es hier im Forum schon mehr als genug gut findbare Diskussionen zu dem Thema.

Gollums Vorschlag birgt nicht die potenziellen technischen Fallen von "with", jedoch trifft auch hier ein weiterer Aspekt zu, der auch "with" betrifft: Die Lesbarkeit leidet unter solchen Verkürzungen immens. Das mag für kleine Programme am Anfang völlig übertrieben klingen, aber spätestens wenn jemand anders oder gar man selbst nach ein paar Wochen erst Stunden suchen muss um zu verstehen was man da gemacht hat (Kommentare im Quellcode sind da auch keine gute Lösung), wird man seine eigene Faulheit doppelt und dreifach bezahlen.

Lieber immer die ganze Litanei voll ausschreiben. Kleiner Tipp: "Image1.Canvas" schreiben, markieren, Strg-C, und von da an jede solche Zeile mit "Strg-V" gefolgt von einem "." beginnen. (Den Punkt schreibe ich immer gerne von Hand, da dann die Codevervollständigung aufklappt und man noch mehr Tippen sparen kann.)
"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 BUG
BUG

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

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
Online

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

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
 
#5

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
 
#6

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
 
#7

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
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 13:40 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