Einzelnen Beitrag anzeigen

MetalAddict

Registriert seit: 7. Jan 2011
14 Beiträge
 
#3

AW: Achsenkreuz skalieren mit for-to-Schleife

  Alt 9. Jan 2011, 15:15
Nein, das beantwortet sie leider nicht, da passiert nach wie vor nichts.. :/

Das Problem liegt bei der Verarbeitung der Schleifenvariablen, also i. Anstatt das die move-to und line-to-Anweisungen jeden i-Wert benutzen, benutzen sie bloß den letzten.. :/

Wenn ich z.B. schreibe:

Code:
PaintBox1.Canvas.MoveTo(0,(round(einheity*ymax))-5);
PaintBox1.Canvas.LineTo(0,(round(einheity*ymax))+5);
dann zeichnet es mir den Strich am Anfang der x-Achse,

wenn ich schreibe:
Code:
for i:=0 to deltax-5 do
      strichposx:=i*einheitx;

    PaintBox1.Canvas.MoveTo(strichposx,(round(einheity*ymax))-5);
    PaintBox1.Canvas.LineTo(strichposx,(round(einheity*ymax))+5);
dann zeichnet es mir einen Strich bei Position 300 auf der x-Achse (21-5=16, 16*50Pixel=300Pixel).

[Warnung] Unit1.pas(74): FOR-Schleifenvariable 'i' kann nach Durchlauf undefiniert sein
[Warnung] Unit1.pas(70): Variable 'strichposx' ist möglicherweise nicht initialisiert worden
Das wird mir in der Unit angezeigt, falls das hilft.. Ich hoffe, dass da der Fehler liegt und ihr ihn seht.. :/

Ich habs nochmal etwas umgeschrieben, allerdings nicht für das Problem relevant, nur hat die Koordinatenzuweisung nicht ganz gepasst für die y-Achse:
Code:
procedure TForm1.Button1Click(Sender: TObject);
var xmin, xmax, ymin, ymax, deltax, deltay, einheitx, einheity, strichposx, strichposy, i: integer;
mystring: String;
begin
    xmin:=IntEdit1.Value;
    xmax:=IntEdit2.Value;
    ymin:=IntEdit3.Value;
    ymax:=IntEdit4.Value;
    deltax:=xmax-xmin;
    deltay:=ymax-ymin;
    einheitx:=PaintBox1.Width div deltax;
    einheity:=PaintBox1.Height div deltay;

    IntEdit5.Value:=deltax;
    IntEdit6.Value:=einheitx;
    IntEdit7.Value:=deltay;
    IntEdit8.Value:=einheity;


    //x-Achse
    PaintBox1.Canvas.MoveTo(0,round(einheity*ymax));
    PaintBox1.Canvas.LineTo(Paintbox1.Width,round(einheity*ymax));
    //myString := '';

    for i:=0 to deltax-5 do
      strichposx:=i*einheitx;

    PaintBox1.Canvas.MoveTo(strichposx,(round(einheity*ymax))-5);
    PaintBox1.Canvas.LineTo(strichposx,(round(einheity*ymax))+5);
      //PaintBox1.Canvas.MoveTo(0,(round(einheity*ymax))-5);
      //PaintBox1.Canvas.LineTo(0,(round(einheity*ymax))+5);
      myString := myString + IntToStr(i);
      Edit1.Text:=myString;
    Edit2.Text := IntToStr(strichposx);

    //y-Achse
    PaintBox1.Canvas.MoveTo(round(einheitx*xmin*-1),0);
    PaintBox1.Canvas.LineTo(round(einheitx*xmin*-1),Paintbox1.Height);



end;
(Bevor mich jemand auf den Fehler aufmerksam macht.

Ich hoffe, ihr könnt mir helfen.. :/
Grüße
  Mit Zitat antworten Zitat