![]() |
Win32-Fehler. Code 87 Falscher Parameter
Hallo,
ich verwende Delphi5 Enterprise (Servicepack 1). Ich lade in meiner Anwendung sehr viele Bitmaps, welche ich in einer ObjectList verwalte. Leider bekomme ich immer bei einer fixen Anzahl, auf meinem Laptop sind das 9961, einen Win32-Fehler. Code87 Falscher Parameter. Die Googel Suche hat immer nur etwas übers Drucken gebracht.
Delphi-Quellcode:
Bei der Datei handelt es sich um eine kleine existierende Bitmap Datei (11x11 pixel).
procedure TForm1.Button1Click(Sender: TObject);
function nGetBitMap: Graphics.TBitMap; begin Result := Graphics.TBitMap.Create; Result.PixelFormat := pf4bit; Result.TransparentMode := tmAuto; Result.Transparent := true; end; var lObjectList: TObjectList; lBitmap: Graphics.TBitMap; i, lCount: integer; begin lObjectList := TObjectList.Create(true); try lCount := 9961; for i := 0 to lCount do begin lBitmap := nGetBitMap; lBitMap.LoadFromFile('c:\test.bmp'); lObjectList.Add(lBitMap); end; ShowMessage('Ready'); finally lObjectList.Free; end; end; Wie kann ich dieses Problem umgehen? P.S.: Dieser Code stellt bei mir den Fehler nach, dh. er tritt mit diesem auch auf ... ich bin auch so erst an die genaue Anzahl gekommen. |
Re: Win32-Fehler. Code 87 Falscher Parameter
GDI-Ressourcen (und TBitmap verwendet solche) stellen auch unter XP/Vista eine begrenzte Ressource dar.
Du wirst wohl oder übel deine Programmlogik umstellen müssen. |
Re: Win32-Fehler. Code 87 Falscher Parameter
Ich hatte gehofft das Setzen eines Properties oder ähnliches könnte das Problem lösen....
Gibt es eine gleichwertige Komponente, welche nicht diese Resourcen aufbraucht? |
Re: Win32-Fehler. Code 87 Falscher Parameter
1. Wozu setzen von PixelFormat etc, wenn danach geladen wird? Damit nimmt das TBitmap doch eh die Werte der zu ladenen Datei an
2. Wozu soviele Bitmaps? Brauchst du wirklich alle gleichzeitig und kannst diese nicht nachladen (on demand)? 3. Eine andere Komponente die Bitmaps hält und keine GDI Resourcen verbraucht? Das wäre dann das on demand laden in Punkt 2. 4. Nutze eine TImageList. Diese hält alle Bitmaps auf einer grossen internen Bitmap. Voraussetzung: alle deine Bitmaps haben die gleiche Abmasse. 5. Falls deine Bitmaps unterschiedliche Grössen haben: schreib dir eine Klasse, welche die Bitmaps auf einigen internen Bitmaps optimal verteilt ablegen. Bei Gebraucht wird das nötige Bitmap herauskopiert. Genau eine solche Klasse habe ich entwickelt und meine Anwendung kommt ohne Probleme mit über 326.000 Bitmaps klar - und das unter Windows 98! (Die GDI Resourcen waren dort noch begrenzter). Grundlegend muss dein Konzept und dein Code umgearbeitet werden, weil so ist es der falsche Weg bzw. Ansatz. |
Re: Win32-Fehler. Code 87 Falscher Parameter
Zitat:
Werde es wohl in dieser Art lösen und die Streams speichern. Dann sinds sicher deutlich weniger. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:38 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