Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Images zur Laufzeit erstellen - Delphi 8 Architect (https://www.delphipraxis.net/51579-images-zur-laufzeit-erstellen-delphi-8-architect.html)

mjreaper 15. Aug 2005 13:40


Images zur Laufzeit erstellen - Delphi 8 Architect
 
Hallo,

ich möchte gerne einige images zur laufzeit erstellen, leider zeigt er mir die noch nicht an. Ich erhalte aber auch keine Fehlermeldung. Was könnte das Problem sein?

Delphi-Quellcode:
procedure Tmainform.FormCreate(Sender: TObject);
var i: integer;
begin

  // images erstellen

 for i:=1 to 25 do
 begin
  punkt[i]:=timage.Create(self);

  with punkt[i] do
  begin

   left  := 5+i*10;
   height := 5;
   width := 5;
   top   := 25;

   parent:=mainform;
   visible:=true;
   picture:=image1.picture;

  end;
 end;

end;
image1 ist ein schon vorhandenes image, welches einfach nur die picture information enthält (vorerst).

die images wurde vorher als array deklariert:

Delphi-Quellcode:
punkt: array[1..25] of timage;
hab schon überall nach einer lösung gesucht, nur leider finde ich keine...

wäre über jede konstruktive Hilfe erfreut ;)

[edit=sakura] [code] -> [delphi]. Mfg, sakura[/edit]

dahead 15. Aug 2005 14:14

Re: Images zur Laufzeit erstellen - Delphi 8 Architect
 
wo legst du die länge des array fest (SetLength)?

edit: oh, sehe gerade du verwendest ja einen statischen array.

außerdem würde ich statt "I := 1 to 25" lieber "I := Low(Punkt) to High(Punkt" verwenden. so musst du später falls sich der array vergrößert/verkleinert nicht immer im code nach den werten suchen.

edit2: bei mir funktioniert dein code. habe noch ein AutoSize := True eingefügt.

Robert_G 15. Aug 2005 14:45

Re: Images zur Laufzeit erstellen - Delphi 8 Architect
 
Autsch, das ist der Grund, warum ich D.Nets Art, wie D32 auszusehen nicht gutheißen kann.
Wenn du D8 hast, dann hast du ganz sicher kein Win32 Projekt. Wenn du das weißt und es im Header trotzdem nicht geändert hast: :wall: .

Dein Problem könnte die Deklaration des Arrays sein.
Es gibt in .Net 2 inkompatible Arten von Arrays.
D.Net (wie auch C#) benutzt nur eine Sorte. Diese beginnen aber immer mit einem Index von 0.
Ich kann mir kaum vorstellen, dass sie dich einen array[0...24] behandeln lassen wie einen array[1..25].
Pobiere am besten mal die Deklaration auf 0..24 zu ändern.

Ansonsten sollte es "eigentlich" funktionieren. Ich kenne mich mit der *VCL*.Net nicht so gut aus.

@daHead & setLength:
Ein .Net Array ist immer (read: IMMER) auf die Größe fixiert, mit der er erzeugt wurde.
setLength ist eines dieser kranken Dinge, die zur Kompatibilität eingebaut wurden.
Wer das benutzt gehört dann zwangsläufig zu denen, die denken .Net sei langsam...

dahead 15. Aug 2005 14:59

Re: Images zur Laufzeit erstellen - Delphi 8 Architect
 
Zitat:

@daHead & setLength:
Ein .Net Array ist immer (read: IMMER) auf die Größe fixiert, mit der er erzeugt wurde.
setLength ist eines dieser kranken Dinge, die zur Kompatibilität eingebaut wurden.
Wer das benutzt gehört dann zwangsläufig zu denen, die denken .Net sei langsam...
ich wusste nicht, dass es sich hierbei um .net handelt. wg. geschwindigkeit: du solltest SetLength halt nicht in einer Schleife aufrufen, aber ich denke das ist dir auch klar.

auch wenn es kein .Net wäre, wäre der array statisch, also auf die Größe fixiert, mit der er erstellt wurde.

Robert_G 15. Aug 2005 15:03

Re: Images zur Laufzeit erstellen - Delphi 8 Architect
 
Zitat:

Zitat von dahead
auch wenn es kein .Net wäre, wäre der array statisch, also auf die Größe fixiert, mit der er erstellt wurde.

Kostet in .net aber mehr als in Win32.
In nativem code kannst du den alten Bereich in einem Rutsch auf den neuen, erweiterten Bereich kopieren. In .Net darfst du das mit jedem Element einzeln machen. Es sind dann noch ein paar internals involviert, kurz: Arrays in .Net sind nur für konstante Größen da, alles andere ist vorsätzliches CPU-Bremmsen. ;)

mjreaper 15. Aug 2005 17:44

Re: Images zur Laufzeit erstellen - Delphi 8 Architect
 
danke für eure Hilfe,

ich habe das Problem leider nicht lösen können, habe aber das gleiche noch einmal mit Delphi 7 probiert, dort funktionierte es problemlos!
Ich habs halt noch nicht so mit .NET :)

Robert_G 15. Aug 2005 17:50

Re: Images zur Laufzeit erstellen - Delphi 8 Architect
 
War ja auch nur VCL.Net. Da kannst du nicht erwarten das alle gleich läuft. ;)
Das ist eine Art Kompatibilitätsschicht halb auf .Net, halb neben .Net aufbauend.
Auch wenn Borland die VCL.Net immer wieder als überlegen gegenüber WinForms als GUI Framework bewirbt, IMHO ist das nix weiter als eine Hilfe um von einem Win32 Projekt langsam und stückchenweise zu einem richtigen .Net Projekt zu kommen. (Einfach in D8 öffnen und kompilieren klappt nur in BDN TV oder auf der Roadshow :lol: )


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