home *** CD-ROM | disk | FTP | other *** search
- program ColPal;
-
- { Copyright (c) 1995 by Charlie Calvert }
-
- { Playing with Windows Color Palettes }
-
- uses
- WinProcs,
- WinTypes,
- WinCrt;
-
- const
- TotalEntries = 256;
-
- var
- DC: HDC;
- hWindow: HWnd;
- Pals: array[1..TotalEntries] of TPaletteEntry;
-
- procedure DrawOne(x, y: Integer; Color: LongInt);
- const
- SizeX = 25;
- SizeY = 25;
- var
- i, j: Integer;
- Col, Row: Integer;
- MaxX, MaxY: Integer;
- begin
- Col := x * Sizex;
- Row := y * Sizey;
- Rectangle(DC, Col, Row, Col + SizeX, Row + SizeY);
- end;
-
- function GetColors(i: Integer): TColorRef;
- var
- Color: TColorRef;
- R, G, B: Integer;
- begin
- Color := RGB(0, 0, i);
- GetColors := Color;
- end;
-
- procedure ShowColors;
- var
- x, y, Color: Integer;
- NewColor: LongInt;
- NewBrush, OldBrush: HBrush;
- RGBColor: TColorRef;
- R: LongInt;
- begin
- x := 0;
- y := 1;
- for Color := 1 to TotalEntries - 4 do begin
- Inc(X);
- if X > 14 then begin
- X := 1;
- Inc(y);
- end;
- R := GetColors(Color);
- RGBColor := PaletteRGB(Lo(LoWord(R)), Hi(LoWord(R)), Lo(HiWord(R)));
- NewBrush := CreateSolidBrush(RGBColor);
- OldBrush := SelectObject(DC, NewBrush);
- DrawOne(x, y, NewColor);
- SelectObject(DC, OldBrush);
- DeleteObject(NewBrush);
- end;
- end;
-
- procedure WriteFile;
- var
- F: Text;
- i: Integer;
- begin
- Assign(F, 'ColPal.Txt');
- ReWrite(F);
- for i := 1 to TotalEntries do begin
- WriteLn(F, Pals[i].peRed, ' ', Pals[i].peGreen, ' ', Pals[i].peBlue);
- WriteLn('Writing file: ', i, ' of ', TotalEntries);
- end;
- Close(F);
- end;
-
- function CreateNewPalette(Red, Green, Blue: Boolean): HPalette;
- var
- Palette: HPalette;
- i, Size: Integer;
- R: TColorRef;
- APal: PLogPalette;
- begin
- Size := SizeOf(TLogPalette) * SizeOf(TPaletteEntry) + (TotalEntries - 1);
- GetMem(APal, Size);
- APal^.PalVersion := $300;
- APal^.PalNumEntries := TotalEntries;
- {$R-}
- for i := 1 to TotalEntries do begin
- R := GetColors(i);
- APal^.PalPalEntry[i].peRed := Lo(LoWord(R));
- APal^.PalPalEntry[i].peGreen := Hi(LoWord(R));
- APal^.PalPalEntry[i].peBlue := Lo(HiWord(R));
- APal^.PalPalEntry[i].peFlags := 0;
- end;
- {$R+}
- Palette := CreatePalette(APal^);
- FreeMem(APal, Size);
- CreatenewPalette := Palette;
- end;
-
- var
- OldPal, Palette: HPalette;
- i: Integer;
- begin
- Write('h');
- hWindow := GetFocus;
- ShowWindow(HWindow, Sw_ShowMaximized);
- DC := GetDC(HWindow);
- WriteLn('i');
- for i := 1 to 1 do begin
- GotoXY(1, 1); WriteLn(i, ' ');
- Palette := CreateNewPalette(True, False, False);
- OldPal := SelectPalette(DC, Palette, False);
- RealizePalette(DC);
- GetSystemPaletteEntries(DC, 10, TotalEntries - 10, Pals);
- ShowColors;
- SelectPalette(DC, OldPal, False);
- DeleteObject(Palette);
- end;
- ReleaseDC(hWindow, DC);
- end.
-