AGB  ·  Datenschutz  ·  Impressum  







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

Canvas drucken

Ein Thema von Masterofdesasta · begonnen am 10. Apr 2013 · letzter Beitrag vom 10. Apr 2013
Antwort Antwort
Masterofdesasta

Registriert seit: 10. Apr 2013
4 Beiträge
 
Delphi 2010 Architect
 
#1

AW: Canvas drucken

  Alt 10. Apr 2013, 10:13
Wieder danke für die ganzen Antworten
Leider ist selbst das wirklich noch zu kompliziert (Besonders das von Bummi)
So weit bin ich leider noch nicht...

Ich glaube aber herausgelesen zu haben das canvas irgendwie ein Objekt ist o.O ...
Vieleicht hab ich mich falsch ausgedrückt(wenn ja sryyyyy). Aber ich zeichne mein Koordiantensystem einfach so:
Code:
   canvas.MoveTo(50,400);    //x-Achse
   canvas.LineTo(750,400);
   canvas.MoveTo(400,50);    //y-Achse
   canvas.LineTo(400,750);
   canvas.MoveTo(225,575);   //z-Achse
   canvas.LineTo(575,225);
Und meinen Graphen so:
Code:
if (a<>0) or (b<>0) or (c<>0) or (d<>0) then begin
                                                 canvas.Pen.Color:=rgb(random(256),random(256),random(256));
                                                 canvas.Pen.Width:=2;
                                                 x:=-7;
                                                 xl:=50;
                                                 repeat begin
                                                           y:=a*x*x*x+b*x*x+c*x+d;
                                                           canvas.MoveTo(xl,400-round(y*50));
                                                           xl:=xl+1;
                                                           x:=x+0.02;
                                                         end;
                                                 until ((400-round(y*50))<751) and ((400-round(y*50))>49);
                                                 repeat begin
                                                           y:=a*x*x*x+b*x*x+c*x+d;
                                                           if ((400-round(y*50))<751) and ((400-round(y*50))>49) then canvas.LineTo(xl,400-round(y*50))
                                                                                                                 else canvas.MoveTo(xl,400-round(y*50));
                                                           xl:=xl+1;
                                                           x:=x+0.02;
                                                         end;
                                                 until xl=751;
                                               end;
Naja... so in etwa... Ich such wirklich nur eine Möglichkeit dies zu drucken :S
  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
 
#2

AW: Canvas drucken

  Alt 10. Apr 2013, 10:24
Es gibt einen Bildschirm-Canvas und einen Drucker-Canvas.

Beide reagieren völlig gleich, nur dass der eine auf den Bildschirm malt und der andere auf den Drucker.

Wie kommst du denn an dein Canvas Objekt was du benutzt?
Irgendwo hast du ja stehen
Delphi-Quellcode:
  // Canvas merken
  canvas := ...
  
  canvas.MoveTo(50,400); //x-Achse
  canvas.LineTo(750,400);
  canvas.MoveTo(400,50); //y-Achse
  canvas.LineTo(400,750);
  canvas.MoveTo(225,575); //z-Achse
  canvas.LineTo(575,225);
oder
Delphi-Quellcode:
with ... do
  begin
    canvas.MoveTo(50,400); //x-Achse
    canvas.LineTo(750,400);
    canvas.MoveTo(400,50); //y-Achse
    canvas.LineTo(400,750);
    canvas.MoveTo(225,575); //z-Achse
    canvas.LineTo(575,225);
  end;
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 uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.749 Beiträge
 
Delphi 2007 Professional
 
#3

AW: Canvas drucken

  Alt 10. Apr 2013, 10:43
Wie kommst du denn an dein Canvas Objekt was du benutzt?
Irgendwo hast du ja stehen
Delphi-Quellcode:
  // Canvas merken
  canvas := ...
  
  canvas.MoveTo(50,400); //x-Achse
  canvas.LineTo(750,400);
  canvas.MoveTo(400,50); //y-Achse
  canvas.LineTo(400,750);
  canvas.MoveTo(225,575); //z-Achse
  canvas.LineTo(575,225);
oder
Delphi-Quellcode:
with ... do
  begin
    canvas.MoveTo(50,400); //x-Achse
    canvas.LineTo(750,400);
    canvas.MoveTo(400,50); //y-Achse
    canvas.LineTo(400,750);
    canvas.MoveTo(225,575); //z-Achse
    canvas.LineTo(575,225);
  end;
... oder du bist im FormPaint und benutzt den Canvas der Form selbst?
Uli Gerhardt
  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
 
#4

AW: Canvas drucken

  Alt 10. Apr 2013, 10:55
BTW

Delphi-Quellcode:
repeat
  begin
    ...
  end;
until SomeState;
ist nicht unbedingt falsch aber es reicht vollkommen
Delphi-Quellcode:
repeat
  ...
until SomeState;
Dann wäre es auch schön, wenn du die Delphi-Tags verwenden würdest
Code:
[DELPHI]
// hier Delphi-Code
[/DELPHI]
und die Formatierung ist ... "abenteuerlich"

So könnte das dann aussehen
Delphi-Quellcode:
  if ( a <> 0 ) or ( b <> 0 ) or ( c <> 0 ) or ( d <> 0 )
  then
    begin
      canvas.Pen.Color := rgb( random( 256 ), random( 256 ), random( 256 ) );
      canvas.Pen.Width := 2;
      x := - 7;
      xl := 50;

      repeat
        y := a * x * x * x + b * x * x + c * x + d;
        canvas.MoveTo( xl, 400 - round( y * 50 ) );
        xl := xl + 1;
        x := x + 0.02;
      until ( ( 400 - round( y * 50 ) ) < 751 ) and ( ( 400 - round( y * 50 ) ) > 49 );

      repeat
        y := a * x * x * x + b * x * x + c * x + d;
        if ( ( 400 - round( y * 50 ) ) < 751 ) and ( ( 400 - round( y * 50 ) ) > 49 )
        then
          canvas.LineTo( xl, 400 - round( y * 50 ) )
        else
          canvas.MoveTo( xl, 400 - round( y * 50 ) );
        xl := xl + 1;
        x := x + 0.02;
      until xl = 751;
    end;
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)

Geändert von Sir Rufo (10. Apr 2013 um 10:58 Uhr)
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Canvas drucken

  Alt 10. Apr 2013, 11:30
Ich würde sagen, am einfachsten ist es, strukturiere das Programm so, daß du ein Canvas als Parameter mitschicken kannst. Dann kannst du sogar auf ein MetafileCanvas zeichen. Zum Drucken braucht du dann nur ein Printer.Canvas.StrechDraw(…., MetaFile).
Analog die Ausgabe am Bildschirm. Zum MetaFile gbt's hier im Forum ein schönes Beispiel von DeddyH (TfrmMetaFileDemo oder so ähnlich).
  Mit Zitat antworten Zitat
Masterofdesasta

Registriert seit: 10. Apr 2013
4 Beiträge
 
Delphi 2010 Architect
 
#6

AW: Canvas drucken

  Alt 10. Apr 2013, 19:17
:S ich versteh nur noch Bahnhof
Noch viel zu kompliziert für mich...

ich stell mir im endeffekt nur ein paar kurze anweisungen vor:

printer.drucken(0,0,800,800)
ich hab einfach keine Ahnung...

ich lad einfach mal meinen quelltext hoch x3 wenn jemand damit was anfangen kann wäre ich euch schwerstens verbunden
Angehängte Dateien
Dateityp: pas U_KS3D.pas (52,4 KB, 8x aufgerufen)
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Canvas drucken

  Alt 10. Apr 2013, 20:54
Eigentlich ganz einfach. Das was du jetzt in den ButtonClicks stehen hast, hat dort eh nichts verloren. Das lagerst du in andere Prozeduren (oder noch besser in eine eigene unit oder Klasse) aus und gibst denen z.B. ein Canvas als Parameter oder die Klasse hat ein Feld Canvas o.ä.. Die Clicks rufen dann diese Prozeduren auf und versorgen sie mit den nötigen Infos aus der GUI. Bzw. die GUI hat eine Instanz der Klasse.
  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 22:25 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