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 mit TImage überfordert? (https://www.delphipraxis.net/174216-delphi-mit-timage-ueberfordert.html)

Magic94 9. Apr 2013 22:55

Delphi mit TImage überfordert?
 
Hallo Forum,
habe ein Programm geschrieben mit ca. 2600 Zeilen. Das Formular beinhaltet 128 TImage Komponenten, welche leer sind. Gefüllt werden sie erst beim Formcreate. Jede Image Komponente ist nur 23x22 Pixel groß.
Leider, wenn ich jetzt die .dpr öffne bekomme ich die Fehlermeldung: "Fehler beim Erzeugen des Formulars: Systemressourcen erschöpft"
Ich nutze Delphi 7 Personal und habe das Projekt auch schonmal kompiliert bekommen - fragt sich warum es jetzt nicht mehr geht :D

Medium 9. Apr 2013 23:38

AW: Delphi mit TImage überfordert?
 
128 Images klingt im Ansatz schon ... sagen wir mal "ungünstig". Der üblichere Weg wäre ein einziges Image, in dessen Picture.Bitmap-Property man aus dem Code heraus das Gesamtbild zusammen baut. (Es ist gut möglich, dass hier die Systemressourcen am Ende sind. Für jedes Image wird intern vorab eine ganze Menge an GDI Ressourcen "veranschlagt", die unabhängig vom RAM oder sonstigem Hardwareausbau systembedingt begrenzt sind. Es ist einfach keine gute Idee so viele Images zu benutzen, das sollte unbedingt anders gemacht werden.)

Magic94 9. Apr 2013 23:45

AW: Delphi mit TImage überfordert?
 
Zitat:

Zitat von Medium (Beitrag 1210908)
128 Images klingt im Ansatz schon ... sagen wir mal "ungünstig". Der üblichere Weg wäre ein einziges Image, in dessen Picture.Bitmap-Property man aus dem Code heraus das Gesamtbild zusammen baut. (Es ist gut möglich, dass hier die Systemressourcen am Ende sind. Für jedes Image wird intern vorab eine ganze Menge an GDI Ressourcen "veranschlagt", die unabhängig vom RAM oder sonstigem Hardwareausbau systembedingt begrenzt sind. Es ist einfach keine gute Idee so viele Images zu benutzen, das sollte unbedingt anders gemacht werden.)

Ich kann sie ja noch nicht mal rauslöschen :D er lässt mich ja garnicht mehr

Medium 9. Apr 2013 23:56

AW: Delphi mit TImage überfordert?
 
Wenn das Formular-File (.dfm) im Textformat ist, könntest du das mit dem Windows Texteditor noch retten. Die entsprechenden "object"-Deklarationen (und deren Propoerties) einfach von Hand daraus löschen. Die entsprechenden Komponenten im .pas File (in deiner Formularklasse) sollte Delphi dann beim Öffnen des Projektes anmakeln - oder ich irre mich, und es ist nur anders herum. Jedenfalls kannst du die dann auch im Code von Hand löschen, sobald sie aus dem .dfm raus sind. Wenn das .dfm aber im Binärformat gespeichert ist... dann müsstest du das Formular wohl noch Mal neu machen müssen. Immerhin ist in diesem Fall das Gros der Arbeit, die .pas, ja als Textfile noch leicht kopierbar.

Tyrolean 10. Apr 2013 07:39

AW: Delphi mit TImage überfordert?
 
Zitat:

Zitat von Medium (Beitrag 1210914)
Wenn das .dfm aber im Binärformat gespeichert ist... dann müsstest du das Formular wohl noch Mal neu machen müssen. Immerhin ist in diesem Fall das Gros der Arbeit, die .pas, ja als Textfile noch leicht kopierbar.

Dafür gibt es Convert.exe.

Daniel 10. Apr 2013 07:51

AW: Delphi mit TImage überfordert?
 
Ansonsten kannst Du die Bilder in eine TImageList legen, die ist eigentlich genau dafür da und sollte in der Lage sein, die Ressource besser zu verwalten.

Union 10. Apr 2013 07:55

AW: Delphi mit TImage überfordert?
 
Du könntest Die Grafiken auch erst zur Laufzeit erzeugen. Das geht vielleicht elegant auch in einer Schleife, falls sie regelmäßig angeordnet sind.

Magic94 10. Apr 2013 19:02

AW: Delphi mit TImage überfordert?
 
Habe es jetzt gelöst bekommen:

Zitat:

for i := 0 to 3 do
for j := 1 to 8 do
for k := 1 to 4 do
begin
Bild := TSeqButton.Create(Form1);
Bild.Parent := Form1;
Bild.Visible := True;
Bild.AutoSize := True;
Bild.Name := 'Image'+IntToStr(l);
Bild.Picture := imSaveOff.Picture;
Bild.Hint := 'off';
if i = 0 then Bild.Left := 48 + i*128 + k*32;
if i = 1 then Bild.Left := 56 + i*128 + k*32;
if i = 2 then Bild.Left := 64 + i*128 + k*32;
if i = 3 then Bild.Left := 72 + i*128 + k*32;
Bild.Top := -10 + j*40;
Inc(l);
end;
Damit lassen sich die Bilder perfekt Anordnen.
TSeqButton ist von TImage abgeleitet. Sollen Buttons für einen Sequenzer werden, daher noch ein paar mehr Funktionen.

Danke für die Hilfe :)

Sir Rufo 10. Apr 2013 21:49

AW: Delphi mit TImage überfordert?
 
Hoffentlich fliegt dir das Form1 nicht um die Ohren ;)

Wenn du das in einer Methode von
Delphi-Quellcode:
TForm1
aufrufst, dann solltest du das gegen
Delphi-Quellcode:
Self
austauschen


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