Autor Beitrag
10Markus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Di 24.06.03 19:11 
Hallo,

Das ist die Struktur meiner procedure:

ausblenden 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;
        {das ganze 10mal, parser1 ist eine Funktionsparser-Komponente, werty1 der errechnete y-Wert}
        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//das ganze auch 10x
        unit1.fx:=unit1.wertx+unit1.raster1;  //wertx ist der aktuelle X-Wert
        form1.ProgressBar1.position:=form1.ProgressBar1.position+1//Fortschrittsanzeige
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.

_________________
Grüße,
Markus
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Di 24.06.03 19:54 
Du kannst den Code aus der Schleife nehmen, der sich nicht verändert.


ausblenden volle Höhe 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
   {das ganze 10mal, parser1 ist eine Funktionsparser-Komponente, werty1 der errechnete y-Wert}
     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//das ganze auch 10x
     unit1.fx := unit1.wertx + unit1.raster1;  //wertx ist der aktuelle X-Wert
     Form1.ProgressBar1.Position := Form1.ProgressBar1.Position + 1//Fortschrittsanzeige
  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.

_________________
Ist Zeit wirklich Geld?
10Markus Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: 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 :-)

_________________
Grüße,
Markus