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