Entwickler-Ecke
Multimedia / Grafik - Problem mit zu langsamer Geschwindigkeit...
10Markus - Di 24.06.03 19:11
Titel: Problem mit zu langsamer Geschwindigkeit...
Hallo,
Das ist die Struktur meiner procedure:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| for i:=1 to e do begin if form6.radiobutton1.checked=true then begin try begin form6.parser1.expression:=form6.edit1.text; form6.parser1.x:=unit1.wertx; unit1.werty1:=form6.parser1.value; unit1.werty1_integer:=round(unit1.werty1*unit1.streckung);
end except on exception do form1.label5.caption:=''; end; end; with form1.image1.picture.bitmap do begin with canvas do begin pen.Width:=2; pen.Style:=pssolid; if form6.radiobutton1.checked=true then begin pen.Color:=form6.colordialog1.color; moveto(unit1.wertx_integer+unit1.x0, unit1.y0-unit1.werty1_integer); lineto(unit1.wertx_integer+unit1.x0, unit1.y0-unit1.werty1_integer); end; unit1.fx:=unit1.wertx+unit1.raster1; form1.ProgressBar1.position:=form1.ProgressBar1.position+1; end; |
Das ganze ist sehr sehr langsam, e ist ungefähr 2500. Wie kann ich das beschleunigen? Ich habe die Variablen- und Komponentennamen auf Standard abgewandelt, zur besseren Verständnis. Bitte auch um Kontakt per ICQ.
AndyB - Di 24.06.03 19:54
Du kannst den Code aus der Schleife nehmen, der sich nicht verändert.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| var b: Boolean; C: TCanvas; begin C := Form1.Image1.Bitmap.Canvas; b := Form6.RadioButton1.Checked; if b then begin try Form6.Parser1.Expression := Form6.Edit1.Text; Form6.Parser1.x := unit1.wertx; unit1.werty1 := Form6.Parser1.Value; unit1.werty1_integer := Round(unit1.werty1 * unit1.streckung); except on exception do Form1.Label5.Caption:=''; end; end;
C.Pen.Width := 2; C.Pen.Style := psSolid; C.Pen.Color := Form6.ColorDialog1.Color; for i := 1 to e do begin if b then begin C.MoveTo(unit1.wertx_integer + unit1.x0, unit1.y0 - unit1.werty1_integer); C.LineTo(unit1.wertx_integer + unit1.x0, unit1.y0 - unit1.werty1_integer); end; unit1.fx := unit1.wertx + unit1.raster1; Form1.ProgressBar1.Position := Form1.ProgressBar1.Position + 1; end; end; |
Aber einen Sinn in dem Code sehe ich nicht, denn du zeichnest eine Linie der Länge 0 und das 2500x auf der selben Stelle.
10Markus - Di 24.06.03 19:59
Titel: Geht so nicht...
Wenn ich dem Parser einen neuen X-Wert zuweise (zu dem alten X-Wert zähle ich ja nach jedem durchlauf den wert raster1 dazu), dann gibt er mir einen neuen y-wert aus, d.h. diese zuweisung muss mit in die schleife. gibt es noch anderen möglichkeiten, muss nicht unbedingt von diesem code angeleitet sein, muss nur das selbe ergebnis haben :-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!