AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Images zur Laufzeit erstellen - Delphi 8 Architect
Thema durchsuchen
Ansicht
Themen-Optionen

Images zur Laufzeit erstellen - Delphi 8 Architect

Ein Thema von mjreaper · begonnen am 15. Aug 2005 · letzter Beitrag vom 15. Aug 2005
Antwort Antwort
mjreaper

Registriert seit: 15. Aug 2005
6 Beiträge
 
#1

Images zur Laufzeit erstellen - Delphi 8 Architect

  Alt 15. Aug 2005, 13:40
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:

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]
  Mit Zitat antworten Zitat
Benutzerbild von dahead
dahead

Registriert seit: 16. Mai 2005
620 Beiträge
 
#2

Re: Images zur Laufzeit erstellen - Delphi 8 Architect

  Alt 15. Aug 2005, 14:14
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.
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#3

Re: Images zur Laufzeit erstellen - Delphi 8 Architect

  Alt 15. Aug 2005, 14:45
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: .

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...
  Mit Zitat antworten Zitat
Benutzerbild von dahead
dahead

Registriert seit: 16. Mai 2005
620 Beiträge
 
#4

Re: Images zur Laufzeit erstellen - Delphi 8 Architect

  Alt 15. Aug 2005, 14:59
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.
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#5

Re: Images zur Laufzeit erstellen - Delphi 8 Architect

  Alt 15. Aug 2005, 15:03
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.
  Mit Zitat antworten Zitat
mjreaper

Registriert seit: 15. Aug 2005
6 Beiträge
 
#6

Re: Images zur Laufzeit erstellen - Delphi 8 Architect

  Alt 15. Aug 2005, 17:44
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
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#7

Re: Images zur Laufzeit erstellen - Delphi 8 Architect

  Alt 15. Aug 2005, 17:50
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 )
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:35 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