unit umain; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Menus, ieview, imageenview, StdCtrls, iemview, ExtCtrls, imageenproc, iexBitmaps, hyieutils, hyiedefs, iesettings, iexColorPalette, Contnrs, Buttons, ComCtrls, iexLayers, iexRulers; type TMainForm = class(TForm) ImageEnView1: TImageEnView; IEColorPalette1: TIEColorPalette; ColorDialog1: TColorDialog; Timer1: TTimer; Splitter1: TSplitter; Panel1: TPanel; btnLoadImage: TButton; btnAnimatePalette: TSpeedButton; Label1: TLabel; pnlCursorColor: TPanel; Label2: TLabel; pnlSelectedColor: TPanel; Label6: TLabel; cmbStyle: TComboBox; Label7: TLabel; updCellSize: TUpDown; btnSetColor: TButton; procedure FormCreate(Sender: TObject); procedure btnLoadImageClick(Sender: TObject); procedure ImageEnView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure btnAnimatePaletteClick(Sender: TObject); procedure btnSetColorClick(Sender: TObject); procedure cmbStyleChange(Sender: TObject); procedure IEColorPalette1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure IEColorPalette1SelectedColorChange(Sender: TObject); procedure ImageEnView1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Timer1Timer(Sender: TObject); procedure updCellSizeChanging(Sender: TObject; var AllowChange: Boolean); private { Private declarations } public { Public declarations } procedure ShowPalette; end; var MainForm: TMainForm; implementation {$R *.DFM} {$R WindowsTheme.res} procedure TMainForm.FormCreate(Sender: TObject); begin // So index of palette matches that of the image IEColorPalette1.SortMethod := iesmNone; cmbStyle.ItemIndex := 0; pnlCursorColor .ParentBackground := False; pnlSelectedColor.ParentBackground := False; end; // fills IEColorPalette1 with the palette procedure TMainForm.ShowPalette; begin IEColorPalette1.AssignPalette( ImageEnView1 ); end; procedure TMainForm.btnLoadImageClick(Sender: TObject); begin // Don't use Windows Bitmaps ImageEnView1.LegacyBitmap := False; // Load images in native format ImageEnView1.IO.NativePixelFormat := true; with ImageEnView1.IO do LoadFromFileAuto( ExecuteOpenDialog()); // if the bitmap is not 8 bit paletted then convert it if ImageEnView1.IEBitmap.PixelFormat <> ie8p then ImageEnView1.IEBitmap.PixelFormat := ie8p; ShowPalette; end; procedure TMainForm.ImageEnView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin IEColorPalette1.SelectedColor := TRGB2TColor( ImageEnView1.IEBitmap.Pixels[ ImageEnView1.XScr2Bmp( X ), ImageEnView1.YScr2Bmp( Y ) ]); end; // animate palette test procedure TMainForm.btnAnimatePaletteClick(Sender: TObject); begin Timer1.Enabled := btnAnimatePalette.Down; ShowPalette; end; procedure TMainForm.btnSetColorClick(Sender: TObject); var selIndex: Integer; begin selIndex := IEColorPalette1.SelectedIndex; if selIndex > -1 then begin ColorDialog1.Color := TRGB2TColor( ImageEnView1.IEBitmap.Palette[ selIndex ]); if ColorDialog1.Execute then begin ImageEnView1.IEBitmap.Palette[ selIndex ] := TColor2TRGB( ColorDialog1.Color ); IEColorPalette1.SelectedIndex := selIndex; ImageEnView1.Update; ShowPalette; end; end; end; procedure TMainForm.cmbStyleChange(Sender: TObject); begin IEColorPalette1.CellStyle := TIECellStyle( cmbStyle.ItemIndex ); end; procedure TMainForm.IEColorPalette1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin pnlCursorColor.color := IEColorPalette1.ColorUnderCursor; end; procedure TMainForm.IEColorPalette1SelectedColorChange(Sender: TObject); begin pnlSelectedColor.color := IEColorPalette1.SelectedColor; end; procedure TMainForm.ImageEnView1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin pnlCursorColor.color := TRGB2TColor( ImageEnView1.IEBitmap.Pixels[ ImageEnView1.XScr2Bmp( X ), ImageEnView1.YScr2Bmp( Y ) ]); end; // animate palette test - running procedure TMainForm.Timer1Timer(Sender: TObject); var i: integer; begin for i := 0 to 255 do ImageEnView1.IEBitmap.Palette[i] := CreateRGB(random(256),random(256),random(256)); ImageEnView1.Update; end; procedure TMainForm.updCellSizeChanging(Sender: TObject; var AllowChange: Boolean); begin IEColorPalette1.CellSize := abs( updCellSize.Position ); end; end.