Hallo,
jetzt hatte ich einen so schönen Beitrag verfasst, und dann schließ ich Idiot den Browser
.
Egal, auf ein Neues:
Zitat von
Martin K:
Irgendwie bekomme ich das Laden der Palette nicht hin.
Nach dem Laden ist die Datei merkwürdigerweise immmer leer (0 Byte groß), obwohl ich sie doch nur lese...
Ich verstehe es nicht...
Du erstellst ja eine neue Datei mit
fmCreate or fmOpenWrite. Nimm lieber
fmOpenRead.
Du liest die Einträge übrigens in eine TLogPalette-Struktur ein, aber Du brauchst ja nur die Einträge.
Außerdem erstellst Du mit CreatePalette ein Palettenobjekt, das Du nie verwendest.
Und zu guter Letzt solltest Du auch nur so viele Einträge einlesen, wie tatsächlich vorhanden sind.
Ich hab die Prozedur mal verbessert und mit Anmerkungen versehen:
Delphi-Quellcode:
procedure LoadPalette;
var
i: Byte;
Stream: TStream;
lpPal: PLogPalette;
Count: Integer;
begin
// Stream öffnen
Stream := TFileStream.Create('
C:\test.dat', fmOpenRead);
// Anzahl der Einträge ermitteln
Count := Stream.Size
div SizeOf(TPaletteEntry);
// Speicher reservieren
GetMem(lpPal, SizeOf(TLogPalette) + (Count - 1) * SizeOf(TPaletteEntry));
// Palette vorbereiten
lpPal^.palVersion := $300;
lpPal^.palNumEntries := Count;
// Einträge einlesen
Stream.
Read(lpPal^.palPalEntry[0], Count * SizeOf(TPaletteEntry));
Stream.Free;
// Einträge in Array kopieren
for i := 0
to Count - 1
do
Palette^[i] :=
RGB(lpPal^.palPalEntry[i].peRed,
lpPal^.palPalEntry[i].peGreen, lpPal^.palPalEntry[i].peBlue);
FreeMem(lpPal);
end;
Gruß
xaromz