![]() |
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; |
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. |
AW: Schnelles erstellen von Objekten
Zitat:
Delphi-Quellcode:
ScrollBox1.DisableAlign;
try //... finally ScrollBox1.EnableAlign; end; |
AW: Schnelles erstellen von Objekten
Hier findest du ein etwas älteres Beispiel von mir zu dem Thema:
![]() Dort zeige ich wie man so etwas zeichnen und mit der Maus ansteuern kann. |
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). |
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 09:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz