type
T4Arr = array [0 .. 3] of byte;
P4Arr = ^T4Arr;
TPalette = array [0 .. 15] of T4Arr;
var
pal: record
version: word;
num: word;
a: TPalette
end;
pal_: LOGPALETTE absolute pal;
// работать сразу с LOGPALETTE нельзя из-за длины массива в 1 элемент
H: HPALETTE;
B: TBitmap;
begin
...
pal.version := 0;
pal.num := 16;
pal.a := Palette;
H := CreatePalette( pal_ ); // возвращает 0
Caption := IntToStr(GetLastError); // выводит 8
B.PixelFormat := pf4bit; // в таком порядке, или наоборот, я не знаю?
B.Palette := H;
end;
Почему так?
Я прочитал msdn, но это не помогло, так как там нет рабочего примера. Что писать в номер версии, и что это вообще за поле (зачем оно вообще), я тоже не понял, там ничего не написано. Я пробовал гуглить, но гугл выдал кучу бесплезных сайтов, с 1 строчкой типа "CreatePalette - создаёт палитру по структуре LOGPALETTE" (причём слово LOGPALETTE даже синим не подчёркнуто, перейти нельзя). Ай спасибо, блин, Капитан Очевидность!
Так вот, как правильно создавать палитру, и что означает ошибка 8 (то есть, если верить msdn, ERROR_NOT_ENOUGH_MEMORY)?