Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Delphi zeichnet nicht :( (https://www.delphipraxis.net/133766-delphi-zeichnet-nicht.html)

Spezi 8. Mai 2009 08:43


Delphi zeichnet nicht :(
 
hallo,

ich hab nen problem mit delphi... ich will ne parabel zeichnen doch delphi hat anscheinend was dagegen...
Ich hab bereits in nem anderen Prog mit der gleichen Funktion gezeichnet und da hats funktioniert... :wall:

ich geb euch mal den Code vllt findet ihr ja den Fehler... ich und meine freunde finden ihn nicht :(

Delphi-Quellcode:
procedure TFAbbParabol.linie (x1,y1,x2,y2 : Integer);
begin
     FAbbParabol.PaintBox1.Canvas.MoveTo(x1,y1);
     FAbbParabol.PaintBox1.Canvas.LineTo(x2,y2);
end;

function TFAbbParabol.Parabel(brennweite:Integer):TPoint;
var
  Scheitelpunkt,Brennpunkt,Startpunkt,Endpunkt,Begrenzungoben,Begrenzungunten:TPoint;
  a,zahl :Double;
begin
    Paintbox1.Canvas.Pen.Width:=5;
    Paintbox1.Canvas.Pen.Color:=clblack;
  //Scheitelpunkt
    Scheitelpunkt.X:=Clientwidth * 9 div 10;
    Scheitelpunkt.Y:=Clientheight *2 div 3;
  //Brennpunkt
    Brennpunkt.X:=Scheitelpunkt.X-brennweite;
    Brennpunkt.Y:=Scheitelpunkt.Y;
  //Begrenzung
    Begrenzungoben.X:=clientwidth * 3 div 4;
    Begrenzungoben.Y:=scheitelpunkt.Y - clientheight div 4;
    Begrenzungunten.X:=Begrenzungoben.X;
    Begrenzungunten.Y:=scheitelpunkt.Y + clientheight div 4;
  //Parabel zeichnen
    a:=1/(4*brennweite);
    Startpunkt.Y:=0;
    Startpunkt.X:=0;
    Linie(Scheitelpunkt.X,Scheitelpunkt.Y,Scheitelpunkt.X,Scheitelpunkt.Y);
    zahl:=0;
    //Oben
    repeat
      //x=-1*a*y*y
      zahl:=zahl+1;
      Endpunkt:=Startpunkt;
      dec(Startpunkt.Y);
      Startpunkt.X:=round(Startpunkt.Y*Startpunkt.Y*(-1)*(a));
      linie(Startpunkt.X+Scheitelpunkt.X,Startpunkt.Y+Scheitelpunkt.Y,Endpunkt.X+Scheitelpunkt.X,Endpunkt.Y+Scheitelpunkt.Y);
    until (Startpunkt.Y+Scheitelpunkt.Y<Begrenzungoben.Y) or (Startpunkt.X+Scheitelpunkt.X<Begrenzungoben.X);
    //Unten
    Startpunkt.Y:=0;
    Startpunkt.X:=0;
    repeat
      Endpunkt:=Startpunkt;
      inc(Startpunkt.Y);
      Startpunkt.X:=round(Startpunkt.Y*Startpunkt.Y*(-1)*(a));
      linie(Startpunkt.X+Scheitelpunkt.X,Startpunkt.Y+Scheitelpunkt.Y,Endpunkt.X+Scheitelpunkt.X,Endpunkt.Y+Scheitelpunkt.Y);
    until (Startpunkt.Y+Scheitelpunkt.Y>Begrenzungunten.Y) or (Startpunkt.X+Scheitelpunkt.X<Begrenzungunten.X);
    result:=Brennpunkt;
end;
diese Funktion wird auch aufgerufen das hab ich schon kontroliert...

danke im vorraus

Luckie 8. Mai 2009 08:52

Re: Delphi zeichnet nicht :(
 
Stimmen denn auch die Koordinaten? Also liegen die überhaupt im sichtbaren bereich deiner Paintbox? Hast du den Code schon mal debuggt?

Spezi 8. Mai 2009 08:58

Re: Delphi zeichnet nicht :(
 
jo...is gedebuggt und die Paintbox ist eig auf maximalgröße... und die Koords müssten super drin liegen....
Delphi-Quellcode:
procedure TFAbbParabol.FormResize(Sender: TObject);
begin
    windowstate:=wsmaximized;
    FAbbParabol.Width:=screen.Width;
    FAbbParabol.Height:=screen.Height;
    PaintBox1.Height:=ClientHeight;
    PaintBox1.width:=Clientwidth;
end;

DeddyH 8. Mai 2009 08:59

Re: Delphi zeichnet nicht :(
 
Und wenn Du die benannte Instanz mal weglässt?
Delphi-Quellcode:
procedure TFAbbParabol.linie (x1,y1,x2,y2 : Integer);
begin
     {FAbbParabol.}PaintBox1.Canvas.MoveTo(x1,y1);
     {FAbbParabol.}PaintBox1.Canvas.LineTo(x2,y2);
end;

Spezi 8. Mai 2009 09:01

Re: Delphi zeichnet nicht :(
 
hat ich vorher und da gings auch nicht...

DeddyH 8. Mai 2009 09:03

Re: Delphi zeichnet nicht :(
 
Du rufst Parabel im OnPaint der Paintbox auf?

Tyrael Y. 8. Mai 2009 09:08

Re: Delphi zeichnet nicht :(
 
Ich habe auf den ersten Blick keinen Fehler gesehen und hab es in eine Testanwendung kopiert.

- eine PaintBox auf das Formular
- ein Button auf das Formular
- die Eigenschaft Align der PaintBox auf alClient gesetzt

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Parabel(10);
end;

procedure TForm1.linie (x1,y1,x2,y2 : Integer);
begin
     PaintBox1.Canvas.MoveTo(x1,y1);
     PaintBox1.Canvas.LineTo(x2,y2);
end;

...
...funktioniert


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:45 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