![]() |
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:
image1 ist ein schon vorhandenes image, welches einfach nur die picture information enthält (vorerst).
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; die images wurde vorher als array deklariert:
Delphi-Quellcode:
hab schon überall nach einer lösung gesucht, nur leider finde ich keine...
punkt: array[1..25] of timage;
wäre über jede konstruktive Hilfe erfreut ;) [edit=sakura] [code] -> [delphi]. Mfg, sakura[/edit] |
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. |
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... |
Re: Images zur Laufzeit erstellen - Delphi 8 Architect
Zitat:
auch wenn es kein .Net wäre, wäre der array statisch, also auf die Größe fixiert, mit der er erstellt wurde. |
Re: Images zur Laufzeit erstellen - Delphi 8 Architect
Zitat:
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. ;) |
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 :) |
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