Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Schnelles erstellen von Objekten (https://www.delphipraxis.net/187867-schnelles-erstellen-von-objekten.html)

ATS3788 10. Jan 2016 07:43

Schnelles erstellen von Objekten
 
Hallo erst mal frohes neues Jahr

Ich habe da eine kleine "Procedure"
und erstelle TShape Objekte.
Das dauert doch recht lange.
Meine frage, wie macht man so etwas besser schneller ?


Delphi-Quellcode:

const
cX = 10;
cY = 10;

_X = 320;
_Y = 240;
var
x, y: Integer;
counter : Integer;
begin
 try
    ScBox.Visible := False;
counter := 1;

    for x := 1 to _X do
      for y := 1 to _Y do begin
     shape := TShape.Create(ScBox);
     shape.Name := 'shape' + IntToStr(counter);
     shape.Parent := ScBox;
     shape.Width := cX;
     shape.Height := cY;
     shape.Brush.Color := clPurple;
     shape.Shape := stRectangle;

     shape.Left := x * cX;
     shape.Top := y * cY;

     if counter mod 150 = 0 then begin
     Shape1.Brush.Color := Random($ffffff);
     StPan1.Caption := '    Pixel : ' + IntToStr(counter);
     Application.ProcessMessages;
     end;

     inc(counter);
      end;

finally
    ScBox.Visible := True;

 end;
end;

bepe 10. Jan 2016 08:27

AW: Schnelles erstellen von Objekten
 
Beim zuweisen des Parents wird etwas getriggered das z.B. dafür sorgt, dass das Alignment korrekt umgesetzt wird. Bei knapp 77 tausend Objekten kann sich der Zeitbedarf entsprechend summieren... (Meine) Faustregel: Bei visuellen Komponenten so sparsam sein wie es nur geht.

Zeichne einfach selber. Wie genau kommt darauf an was du vor hast. Geht es darum Pixel vergrößert darzustellen, dann fang damit an die Koordinaten in ein Array zu schreiben um dieses später zu durchlaufen. Geht es nur um ein Schachbrettmuster dann zeichne in deinen Schleifen einfach Linien.

HolgerX 10. Jan 2016 09:24

AW: Schnelles erstellen von Objekten
 
Zitat:

Zitat von bepe (Beitrag 1326547)
Beim zuweisen des Parents wird etwas getriggered das z.B. dafür sorgt, dass das Alignment korrekt umgesetzt wird. Bei knapp 77 tausend Objekten kann sich der Zeitbedarf entsprechend summieren... (Meine) Faustregel: Bei visuellen Komponenten so sparsam sein wie es nur geht.

Zeichne einfach selber. Wie genau kommt darauf an was du vor hast. Geht es darum Pixel vergrößert darzustellen, dann fang damit an die Koordinaten in ein Array zu schreiben um dieses später zu durchlaufen. Geht es nur um ein Schachbrettmuster dann zeichne in deinen Schleifen einfach Linien.

Das Alignment kann man bei einer ScrollBox vorübergehend ausschalten:

Delphi-Quellcode:
  ScrollBox1.DisableAlign;
  try

    //...

  finally
    ScrollBox1.EnableAlign;
  end;

jaenicke 10. Jan 2016 11:35

AW: Schnelles erstellen von Objekten
 
Hier findest du ein etwas älteres Beispiel von mir zu dem Thema:
http://www.delphipraxis.net/132375-p...-beta-6-a.html
Dort zeige ich wie man so etwas zeichnen und mit der Maus ansteuern kann.

HeZa 11. Jan 2016 09:22

AW: Schnelles erstellen von Objekten
 
Auf den ersten Blick erscheint mir das Application.ProcessMessages überflüssig. Evtl. stattdessen am Ende der Schleife, Parent.Invalidate aufrufen.

Aber vielleicht solltest du tatsächlich nochmal deine Motivation überprüfen warum du TShape verwenden willst (und nicht wie z.B. vorgeschlagen alles selbst zeichnest).

ATS3788 11. Jan 2016 09:25

AW: Schnelles erstellen von Objekten
 
Danke meine Delphianer

Ich habe das Problem nun ganz anders gelöst,
aber es war eine Frage die ich mir schon immer
stellte und das mit dem Parent macht Sinn Danke.


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