AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Win32-Fehler. Code 87 Falscher Parameter
Thema durchsuchen
Ansicht
Themen-Optionen

Win32-Fehler. Code 87 Falscher Parameter

Ein Thema von GuenterS · begonnen am 9. Mai 2008 · letzter Beitrag vom 12. Mai 2008
Antwort Antwort
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#1

Win32-Fehler. Code 87 Falscher Parameter

  Alt 9. Mai 2008, 16:22
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:
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;
Bei der Datei handelt es sich um eine kleine existierende Bitmap Datei (11x11 pixel).


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.
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Win32-Fehler. Code 87 Falscher Parameter

  Alt 9. Mai 2008, 16:27
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Win32-Fehler. Code 87 Falscher Parameter

  Alt 12. Mai 2008, 20:17
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?
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: Win32-Fehler. Code 87 Falscher Parameter

  Alt 12. Mai 2008, 20:31
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.
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Win32-Fehler. Code 87 Falscher Parameter

  Alt 12. Mai 2008, 21:14
Zitat von Muetze1:
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.
Es wird im Grunde aus einem Stream geladen, aus einer Datenbank, deshalb setze ich das Pixelformat vorher. Hab den Code für die Testprozedure da einfach nur übernommen.

Werde es wohl in dieser Art lösen und die Streams speichern. Dann sinds sicher deutlich weniger.
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  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 06:04 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