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
Seite 1 von 2  1 2      
nisemono

Registriert seit: 19. Mai 2014
3 Beiträge
 
#1

Hilfe mit Canvas?

  Alt 19. Mai 2014, 15:37
Hey

ich kenn mich mit Delphi gar nicht gut aus muss aber eine Aufgabe erfüllen mit der Aufgabe:

Wie kann mann erreichen, dann man beim Erstellen von Quelltexten für eine Eigenschaft Canvas nicht jedesmal Image1.Canvas vor die einzelnen Methoden oder Eigenschaften von Canvas schreiben muss?

Wäre nett wenn ihr mir helfen könntet.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.539 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Hilfe mit Canvas?

  Alt 19. Mai 2014, 15:42
Auch wenn es mir fast körperliche Schmerzen verursacht:
Delphi-Quellcode:
with Image1.Canvas do
  begin
    MoveTo(X, Y);
    LineTo(X + 200, Y + 100);
    RectAngle(10, 10, 150, 200);
  end;
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 baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Hilfe mit Canvas?

  Alt 19. Mai 2014, 15:44
Mit einer with-Anweisung.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Benutzerbild von Gollum
Gollum

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

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.679 Beiträge
 
Delphi 2007 Enterprise
 
#5

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

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
43.121 Beiträge
 
Delphi 12 Athens
 
#7

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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

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

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.679 Beiträge
 
Delphi 2007 Enterprise
 
#9

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.539 Beiträge
 
Delphi 11 Alexandria
 
#10

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
Seite 1 von 2  1 2      


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 11:38 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