339 lines
10 KiB
ObjectPascal
339 lines
10 KiB
ObjectPascal
unit MCKGRushImageCollectionEditor;
|
|
|
|
// file: MCKGRushImageCollectionEditor.pas
|
|
// file version: 0.35
|
|
// last modified: 06.02.06
|
|
// package: GRushControls
|
|
// author: Karpinskyj Alexandr aka homm
|
|
// mailto: homm86@mail.ru
|
|
// My humble Web-Page: http://www.homm86.narod.ru
|
|
|
|
interface
|
|
|
|
{$I KOLDEF.INC}
|
|
|
|
uses Windows,
|
|
Messages,
|
|
ShellAPI,
|
|
KOL,
|
|
KOLGRushControls,
|
|
tinyJPGGIFBMP,
|
|
tinyPNG,
|
|
mirror,
|
|
Classes,
|
|
Controls,
|
|
mckObjs,
|
|
Graphics,
|
|
mckCtrls,
|
|
MCKGRushControls,
|
|
Forms,
|
|
{$IFDEF _D6orHigher}
|
|
DesignEditors,
|
|
DesignIntf;
|
|
{$ELSE}
|
|
DsgnIntf;
|
|
{$ENDIF}
|
|
|
|
|
|
type
|
|
TKOLGRushImageCollectionEditor = class( TComponentEditor )
|
|
private
|
|
protected
|
|
public
|
|
procedure Edit; override;
|
|
procedure ExecuteVerb(Index: Integer); override;
|
|
function GetVerb(Index: Integer): string; override;
|
|
function GetVerbCount: Integer; override;
|
|
end;
|
|
|
|
ImageCollectionData= record
|
|
fImageType: TKOLGRushImageCollectionImageType;
|
|
fItemWidth: DWORD;
|
|
fItemHeight: DWORD;
|
|
fDataStream: TMemoryStream;
|
|
end;
|
|
|
|
PImageCollectionEditor = ^TImageCollectionEditor;
|
|
TImageCollectionEditor = object (TObj)
|
|
Form: KOL.PControl;
|
|
ScrollBox: PControl;
|
|
ImageShow: PControl;
|
|
ButtonOK: PGRushControl;
|
|
ButtonCancel: PGRushControl;
|
|
ButtonOpen_Close: PGRushControl;
|
|
ButtonSave: PGRushControl;
|
|
OSD: KOL.POpenSaveDialog;
|
|
Collection: ImageCollectionData;
|
|
Comp: TKOLGRushImageCollection;
|
|
Bitmap: KOL.PBitmap;
|
|
///////////////////
|
|
ActiveWindow: HWnd;
|
|
WindowList: Pointer;
|
|
procedure OKClick(Self_: KOL.PObj);
|
|
procedure CancelClick(Self_: KOL.PObj);
|
|
procedure CloseClick(Self_: KOL.PObj);
|
|
procedure OpenClick(Self_: KOL.PObj);
|
|
procedure SaveClick(Self_: KOL.PObj);
|
|
procedure CalcRects (Sender: PGRushControl; var Rects: TGRushRects);
|
|
procedure DoClose ( Sender: PObj; var Accept: Boolean );
|
|
procedure ImageShowPaint ( Sender: PControl; DC: HDC );
|
|
procedure SetControls;
|
|
end;
|
|
|
|
procedure Register;
|
|
|
|
var
|
|
ImageCollectionEditor: PImageCollectionEditor;
|
|
|
|
procedure NewImageCollectionEditor( var Result: PImageCollectionEditor; Component: TKOLGRushImageCollection );
|
|
|
|
implementation
|
|
|
|
procedure Register;
|
|
begin
|
|
RegisterComponentEditor( TKOLGRushImageCollection, TKOLGRushImageCollectionEditor );
|
|
end;
|
|
|
|
procedure NewImageCollectionEditor( var Result: PImageCollectionEditor; Component: TKOLGRushImageCollection );
|
|
begin
|
|
New(Result, Create);
|
|
with Result^ do begin
|
|
Form := NewForm(nil, Component.Name + ': Edit').SetClientSize(440, 256).CenterOnParent;
|
|
KOL.Applet := Form;
|
|
Form.ExStyle := Form.ExStyle or WS_EX_DLGMODALFRAME or WS_EX_WINDOWEDGE;
|
|
Form.Style := Form.Style and not (WS_MINIMIZEBOX or WS_MAXIMIZEBOX);
|
|
Form.CanResize := FALSE;
|
|
Form.OnClose := DoClose;
|
|
Form.Add2AutoFree(Result);
|
|
|
|
ScrollBox := NewScrollBoxEx(Form, esLowered).SetPosition(8, 8).SetSize(320, 240).SetBorder(0);
|
|
|
|
ImageShow := NewPanel(ScrollBox, esNone);
|
|
ImageShow.OnPaint := ImageShowPaint;
|
|
|
|
ButtonOpen_Close := PGRushControl(NewGRushButton(Result.Form, '').SetSize(96, 24).SetPosition(336, 8));
|
|
ButtonOpen_Close.OnRecalcRects := CalcRects;
|
|
|
|
ButtonSave := PGRushControl(NewGRushButton(Result.Form, 'Save as').SetSize(96, 24).SetPosition(336, 40));
|
|
ButtonSave.OnClick := Result.SaveClick;
|
|
ButtonSave.OnRecalcRects := CalcRects;
|
|
|
|
ButtonOK := PGRushControl(NewGRushButton(Result.Form, 'OK').SetSize(96, 24).SetPosition(336, 192));
|
|
ButtonOK.OnClick := Result.OKClick;
|
|
ButtonOK.OnRecalcRects := CalcRects;
|
|
ButtonOK.Focused := TRUE;
|
|
|
|
ButtonCancel := PGRushControl(NewGRushButton(Result.Form, 'Cancel').SetSize(96, 24).SetPosition(336, 224));
|
|
ButtonCancel.OnClick := Result.CancelClick;
|
|
ButtonCancel.OnRecalcRects := CalcRects;
|
|
|
|
OSD := NewOpenSaveDialog('chose file to open', ProjectSourcePath
|
|
, [OSFileMustExist, OSHideReadonly, OSPathMustExist, OSOverwritePrompt] );
|
|
OSD.Filter := 'Jpeg files|*.jpg;*.jpeg|Png files|*.png|Gif files|*.gif|Bmp files|*.bmp|'
|
|
+ 'All suported files|*.jpg;*.jpeg;*.png;*.gif;*.bmp|All files|*.*|';
|
|
OSD.FilterIndex := 5;
|
|
OSD.WndOwner := Form.Handle;
|
|
|
|
|
|
|
|
|
|
Comp := Component;
|
|
Collection.fImageType := Component.ImageType;
|
|
if assigned(Component.DataStream) then begin
|
|
Collection.fDataStream := TMemoryStream.Create;
|
|
Collection.fDataStream.LoadFromStream(Component.DataStream);
|
|
end;
|
|
Bitmap := Component.LoadBitmap;
|
|
SetControls;
|
|
end;
|
|
end;
|
|
|
|
procedure TKOLGRushImageCollectionEditor.Edit;
|
|
begin
|
|
if Component = nil then Exit;
|
|
if not(Component is TKOLGRushImageCollection) then Exit;
|
|
|
|
ImageCollectionEditor := nil;
|
|
AppletTerminated := FALSE;
|
|
try
|
|
NewImageCollectionEditor(ImageCollectionEditor, Component as TKOLGRushImageCollection);
|
|
ImageCollectionEditor.ActiveWindow := GetActiveWindow;
|
|
ImageCollectionEditor.WindowList := DisableTaskWindows(0);
|
|
KOL.Run(KOL.Applet);
|
|
finally
|
|
|
|
end;
|
|
(Component as TKOLGRushImageCollection).Change;
|
|
end;
|
|
|
|
procedure TKOLGRushImageCollectionEditor.ExecuteVerb(Index: Integer);
|
|
begin
|
|
if Index = 0 then
|
|
Edit;
|
|
end;
|
|
|
|
function TKOLGRushImageCollectionEditor.GetVerb(Index: Integer): string;
|
|
begin
|
|
if Index = 0 then
|
|
Result := 'Edit component';
|
|
end;
|
|
|
|
function TKOLGRushImageCollectionEditor.GetVerbCount: Integer;
|
|
begin
|
|
Result := 1;
|
|
end;
|
|
|
|
|
|
procedure TImageCollectionEditor.SetControls;
|
|
begin
|
|
if Bitmap = nil then begin
|
|
try
|
|
Collection.fDataStream.Free;
|
|
finally
|
|
Collection.fDataStream := nil;
|
|
end;
|
|
Collection.fImageType := None;
|
|
ButtonOpen_Close.Caption := 'Open';
|
|
ButtonOpen_Close.OnClick := OpenClick;
|
|
ButtonSave.Enabled := FALSE;
|
|
ImageShow.Visible := FALSE;
|
|
end else begin
|
|
ButtonOpen_Close.Caption := 'Free';
|
|
ButtonOpen_Close.OnClick := CloseClick;
|
|
ButtonSave.Enabled := TRUE;
|
|
ImageShow.SetSize(Bitmap.Width, Bitmap.Height);
|
|
ImageShow.Visible := TRUE;
|
|
end;
|
|
end;
|
|
|
|
procedure TImageCollectionEditor.OKClick(Self_: KOL.PObj);
|
|
begin
|
|
try
|
|
Comp.DataStream.Free;
|
|
finally
|
|
Comp.DataStream := nil;
|
|
end;
|
|
TKOLGRushImageCollectionImageType((@Comp.ImageType)^) := Collection.fImageType;
|
|
if Comp.ImageType <> None then begin
|
|
Comp.DataStream := TMemoryStream.Create;
|
|
Comp.DataStream.LoadFromStream(Collection.fDataStream);
|
|
Comp.DataStream.Position := 0;
|
|
end;
|
|
Form.Close;
|
|
end;
|
|
|
|
procedure TImageCollectionEditor.CancelClick(Self_: KOL.PObj);
|
|
begin
|
|
Form.Close;
|
|
end;
|
|
|
|
procedure TImageCollectionEditor.OpenClick(Self_: KOL.PObj);
|
|
var KOLStream: KOL.PStream;
|
|
begin
|
|
OSD.OpenDialog := TRUE;
|
|
if OSD.Execute then begin
|
|
Collection.fDataStream := TMemoryStream.Create;
|
|
Collection.fDataStream.LoadFromFile(OSD.FileName);
|
|
|
|
KOLStream := NewExMemoryStream(Collection.fDataStream.Memory, Collection.fDataStream.Size);
|
|
try
|
|
tinyLoadPNG(Bitmap, KOLStream);
|
|
except
|
|
ShowMessage('��������� ������ �� ����� ������� ������������ ���� ��� *.png'
|
|
+ '. ��������� �������� �� ���� ������ (homm86@mail.ru) � ����������'
|
|
+ ' ���������� ���� ���� ��� ������ ����� ���������.');
|
|
try
|
|
Bitmap.Free;
|
|
finally
|
|
Bitmap := nil;
|
|
end;
|
|
end;
|
|
KOLStream.Free;
|
|
if Bitmap <> nil then begin
|
|
Collection.fImageType := PNG;
|
|
end else begin // maybe JPG?
|
|
tinyLoadJPGGIFBMPStream(Bitmap, Collection.fDataStream);
|
|
if Bitmap <> nil then begin
|
|
Collection.fImageType := BMP_GIF_JPG;
|
|
end else begin // not suported
|
|
Collection.fImageType := None;
|
|
ShowMessage ('This file type not suported.');
|
|
try
|
|
Collection.fDataStream.Free;
|
|
finally
|
|
Collection.fDataStream := nil;
|
|
end;
|
|
try
|
|
Bitmap.Free;
|
|
finally
|
|
Bitmap := nil;
|
|
end;
|
|
end;
|
|
end;
|
|
SetControls;
|
|
end;
|
|
end;
|
|
|
|
procedure TImageCollectionEditor.CloseClick(Self_: KOL.PObj);
|
|
begin
|
|
ImageShow.Visible := FALSE;
|
|
ButtonOpen_Close.OnClick := OpenClick;
|
|
ButtonOpen_Close.Caption := 'Open';
|
|
ButtonSave.Enabled := FALSE;
|
|
Collection.fImageType := None;
|
|
try
|
|
Collection.fDataStream.Free;
|
|
finally
|
|
Collection.fDataStream := nil;
|
|
end;
|
|
try
|
|
Bitmap.Free;
|
|
finally
|
|
Bitmap := nil;
|
|
end;
|
|
end;
|
|
|
|
procedure TImageCollectionEditor.SaveClick(Self_: KOL.PObj);
|
|
begin
|
|
try
|
|
OSD.OpenDialog := FALSE;
|
|
if OSD.Execute then begin
|
|
Collection.fDataStream.SaveToFile(OSD.FileName);
|
|
end;
|
|
except
|
|
ShowMessage('�� ������� ��������� �������.');
|
|
end;
|
|
end;
|
|
|
|
procedure TImageCollectionEditor.DoClose ( Sender: PObj; var Accept: Boolean );
|
|
begin
|
|
Accept := TRUE;
|
|
try
|
|
Collection.fDataStream.Free;
|
|
finally
|
|
Collection.fDataStream := nil;
|
|
end;
|
|
try
|
|
Bitmap.Free;
|
|
finally
|
|
Bitmap := nil;
|
|
end;
|
|
EnableTaskWindows(WindowList);
|
|
SetActiveWindow(ActiveWindow);
|
|
TerminateExecution(KOL.Applet);
|
|
end;
|
|
|
|
procedure TImageCollectionEditor.CalcRects (Sender: PGRushControl; var Rects: TGRushRects);
|
|
begin
|
|
InflateRect(Rects.AlphaRect, -4, -3);
|
|
end;
|
|
|
|
procedure TImageCollectionEditor.ImageShowPaint ( Sender: PControl; DC: HDC );
|
|
begin
|
|
if Bitmap <> nil then begin
|
|
BitBlt(DC, 0, 0, Bitmap.Width, Bitmap.Height, Bitmap.Canvas.Handle, 0, 0, SRCCOPY);
|
|
end;
|
|
end;
|
|
|
|
end.
|