- - * - WhiteUnicorn - * - -




* #WhiteUnicorn/ StartPage/ Documentation/DelphiFAQ >


Frequently Asked Questions

Creating a palette with more than one entry

Question:

The RTL defines the TLogPallette as having only one palette entry. How can I create a palette with more than one entry?

Answer:

The RTL defines the TLogPallette as having only one entry to allow

you to dynamically create a palette with the number of palette entries

you wish. To access the additional entries, range checking must be

turned off (this can be done in code), and you must access the palette

entry index using a variable.



The following example demonstrates dynamically creating a logical

palette structure with 256 entries, turns off range checking (if it is

on), accesses the palette entries by filling them with gray shades,

turns range checking back on (if it was off), creates a handle to

palette, and then cleans up the allocated resources.



Example:



procedure TForm1.Button1Click(Sender: TObject);

var

  lpPalette : PLogPalette;

  hPal : hPalette;

  i : integer;

begin



 {Allocate the memory used by the palette}

  GetMem(lpPalette,

         sizeof(TLogPalette) + (255 * sizeof(TPaletteEntry)));



 {Fill out the palette header}

  lpPalette^.palVersion := $300;

  lpPalette^.palNumEntries := 256;



 {Turn range checking off if it is on and}

 {remember the range checking state}

 {$IFOPT R+}

   {$DEFINE CKRANGE}

   {$R-}

 {$ENDIF}



 {Fill in the palette structure color table with shades of gray}

  for i := 0 to 255 do begin

    lpPalette^.PalPalEntry[i].peRed := i;

    lpPalette^.PalPalEntry[i].peGreen := i;

    lpPalette^.PalPalEntry[i].peBlue := i;

  end;



 {Turn range checking back on if it was on when we started}

 {$IFDEF CKRANGE}

   {$UNDEF CKRANGE}

   {$R+}

 {$ENDIF}



 {Create a palette handle}

  hPal := CreatePalette(lpPalette^);



 {Free the memory use by the palette structure}

  FreeMem(lpPalette,

          sizeof(TLogPalette) + (255 * sizeof(TPaletteEntry)));



 {Do something with the palette here}



 {Delete the palette handle after use}

  DeleteObject(hPal);

end;



* #WhiteUnicorn/ StartPage/ Documentation/DelphiFAQ >



- - * - Anastasija aka WhiteUnicorn - * - - LJLiveJournal
PFPhotoFile