mirror of
http://gitlab.expertsoft.com.ua/git/expertcad
synced 2026-01-11 17:25:39 +02:00
470 lines
18 KiB
ObjectPascal
470 lines
18 KiB
ObjectPascal
unit U_MakeEditObjectIcons;
|
||
|
||
interface
|
||
|
||
uses
|
||
Windows, U_LNG, U_BaseConstants, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
||
Dialogs, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxEdit,
|
||
DB, cxDBData, cxGridLevel, cxClasses, cxControls, cxGridCustomView,
|
||
cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGrid,
|
||
StdCtrls, U_BaseCommon, XPMenu, ComCtrls, ToolWin, ActnList, ActnMan,
|
||
cxLookAndFeelPainters, cxButtons, cxEditRepositoryItems, ExtCtrls,
|
||
cxDataStorage, cxImage, cxSpinEdit, cxCheckBox, cxCurrencyEdit,
|
||
cxColorComboBox, cxDBLookupComboBox, cxTextEdit, RzPanel, cxContainer,
|
||
kbmMemTable, siComp, siLngLnk, cxLookAndFeels, Menus;
|
||
|
||
type
|
||
|
||
TIconParams = record
|
||
Image: TcxImage;
|
||
IconBlk: TStream;
|
||
IconBmp: TStream;
|
||
IsEmpty: Boolean;
|
||
end;
|
||
|
||
TF_MakeEditObjectIcons = class(TForm)
|
||
Panel_OKCancel: TRzPanel;
|
||
Button_OK: TcxButton;
|
||
Button_Cancel: TcxButton;
|
||
Panel_Main: TRzPanel;
|
||
Label_Name: TLabel;
|
||
Edit_Name: TcxTextEdit;
|
||
RzGroupBox1: TRzGroupBox;
|
||
Label_ProjBmp: TLabel;
|
||
Label_ActiveBmp: TLabel;
|
||
Image_ProjBmp: TcxImage;
|
||
Button_ProjBmp: TcxButton;
|
||
Image_ActiveBmp: TcxImage;
|
||
Button_ActiveBmp: TcxButton;
|
||
OpenDialog: TOpenDialog;
|
||
lng_Forms: TsiLangLinked;
|
||
btExchangeImg: TcxButton;
|
||
procedure Panel_OKCancelResize(Sender: TObject);
|
||
procedure Button_ProjBmpClick(Sender: TObject);
|
||
procedure Button_ActiveBmpClick(Sender: TObject);
|
||
procedure FormCreate(Sender: TObject);
|
||
procedure FormShow(Sender: TObject);
|
||
procedure btExchangeImgClick(Sender: TObject);
|
||
private
|
||
GForm: TForm;
|
||
|
||
FProjIconParams: TIconParams;
|
||
FActiveIconParams: TIconParams;
|
||
public
|
||
GFormMode: TFormMode;
|
||
GID: Integer;
|
||
|
||
constructor Create(AOwner: TComponent; AForm: TForm);
|
||
destructor Destroy; override;
|
||
|
||
function MakeEdit(AFormMode: TFormMode; AMemTable: TkbmMemTable;
|
||
ADefNewName: String = ''; ADefNewFileBmp: String = '';
|
||
ADefNewFileBlk: String = ''; ADefIconType: Integer = oitNone): Boolean;
|
||
function LoadPictureFromFile(var AIconParams, ASecondIconParams: TIconParams;
|
||
AFileIconBMP, AFileIconBLK: String): Boolean;
|
||
function LoadPictureFromFileOne(var AIconParams: TIconParams;
|
||
AFileIconBMP, AFileIconBLK: String): Boolean;
|
||
procedure LoadPictureFromOpenFileDialog(var AIconParams, ASecondIconParams: TIconParams);
|
||
end;
|
||
|
||
//var
|
||
//F_ComponentIcons: TF_ComponentIcons;
|
||
|
||
implementation
|
||
Uses Unit_DM_SCS, U_Main, U_CaseForm;
|
||
{$R *.dfm}
|
||
|
||
{ TF_ComponentIcons }
|
||
|
||
|
||
|
||
|
||
|
||
// #############################################################################
|
||
// #############################################################################
|
||
constructor TF_MakeEditObjectIcons.Create(AOwner: TComponent; AForm: TForm);
|
||
begin
|
||
GForm := AForm;
|
||
inherited Create(AOwner);
|
||
end;
|
||
|
||
destructor TF_MakeEditObjectIcons.Destroy;
|
||
begin
|
||
inherited; //
|
||
end;
|
||
|
||
procedure TF_MakeEditObjectIcons.Panel_OKCancelResize(Sender: TObject);
|
||
begin
|
||
SetMiddleControlChilds(TControl(Sender), TControl(Self));
|
||
end;
|
||
|
||
|
||
function TF_MakeEditObjectIcons.MakeEdit(AFormMode: TFormMode; AMemTable: TkbmMemTable;
|
||
ADefNewName: String = ''; ADefNewFileBmp: String = ''; ADefNewFileBlk: String = '';
|
||
ADefIconType: Integer = oitNone): Boolean;
|
||
var
|
||
ModRes: TModalResult;
|
||
BlkStreamSize: Integer;
|
||
BmpStreamSize: Integer;
|
||
|
||
MakeEdit: TMakeEdit;
|
||
ObjectIconID: Integer;
|
||
ObjectIconInfo: TObjectIconInfo;
|
||
FilePath, FileName, FileExt: string;
|
||
begin
|
||
Result := false;
|
||
MakeEdit := GetMakeEditByFormMode(AFormMode);
|
||
|
||
GID := -1;
|
||
ObjectIconID := 0;
|
||
try
|
||
with TF_Main(GForm).FNormBase.DM do
|
||
begin
|
||
GFormMode := AFormMode;
|
||
|
||
FProjIconParams.Image := Image_ProjBmp;
|
||
FProjIconParams.Image.Clear;
|
||
FProjIconParams.Image.Picture.Bitmap.FreeImage;
|
||
FProjIconParams.IconBlk := TMemoryStream.Create;
|
||
FProjIconParams.IconBlk.Position := 0;
|
||
FProjIconParams.IconBmp := TMemoryStream.Create;
|
||
FProjIconParams.IconBmp.Position := 0;
|
||
FProjIconParams.IsEmpty := true;
|
||
|
||
FActiveIconParams.Image := Image_ActiveBmp;
|
||
FActiveIconParams.Image.Clear;
|
||
FActiveIconParams.Image.Picture.Bitmap.FreeImage;
|
||
FActiveIconParams.IconBlk := TMemoryStream.Create;
|
||
FActiveIconParams.IconBlk.Position := 0;
|
||
FActiveIconParams.IconBmp := TMemoryStream.Create;
|
||
FActiveIconParams.IconBmp.Position := 0;
|
||
FActiveIconParams.IsEmpty := true;
|
||
|
||
|
||
try
|
||
if GFormMode = fmMake then
|
||
begin
|
||
Caption := cMakeEditObjectIcons_Msg1_1;
|
||
Edit_Name.Text := ADefNewName;
|
||
|
||
//if (ADefNewFileBmp <> '') and (ADefNewFileBlk <> '') then
|
||
// LoadPictureFromFile(FProjIconParams, FActiveIconParams, ADefNewFileBmp, ADefNewFileBlk);
|
||
end
|
||
else
|
||
begin
|
||
Caption := cMakeEditObjectIcons_Msg1_2;
|
||
|
||
if AMemTable <> nil then
|
||
begin
|
||
ObjectIconID := AMemTable.FieldByName(fnID).AsInteger;
|
||
Edit_Name.Text := AMemTable.FieldByName(fnName).AsString;
|
||
TBlobField(AMemTable.FieldByName(fnProjBlk)).SaveToStream(FProjIconParams.IconBlk);
|
||
TBlobField(AMemTable.FieldByName(fnProjBmp)).SaveToStream(FProjIconParams.IconBmp);
|
||
TBlobField(AMemTable.FieldByName(fnActiveBlk)).SaveToStream(FActiveIconParams.IconBlk);
|
||
TBlobField(AMemTable.FieldByName(fnActiveBmp)).SaveToStream(FActiveIconParams.IconBmp);
|
||
end
|
||
else
|
||
begin
|
||
ObjectIconID := DataSet_OBJECT_ICONS.FN(fnID).AsInteger;
|
||
Edit_Name.Text := DataSet_OBJECT_ICONS.FN(fnName).AsString;
|
||
TBlobField(DataSet_OBJECT_ICONS.FN(fnProjBlk)).SaveToStream(FProjIconParams.IconBlk);
|
||
TBlobField(DataSet_OBJECT_ICONS.FN(fnProjBmp)).SaveToStream(FProjIconParams.IconBmp);
|
||
TBlobField(DataSet_OBJECT_ICONS.FN(fnActiveBlk)).SaveToStream(FActiveIconParams.IconBlk);
|
||
TBlobField(DataSet_OBJECT_ICONS.FN(fnActiveBmp)).SaveToStream(FActiveIconParams.IconBmp);
|
||
end;
|
||
|
||
FProjIconParams.IconBlk.Position := 0;
|
||
FProjIconParams.IconBmp.Position := 0;
|
||
FActiveIconParams.IconBlk.Position := 0;
|
||
FActiveIconParams.IconBmp.Position := 0;
|
||
|
||
BlkStreamSize := FProjIconParams.IconBlk.Size;
|
||
BmpStreamSize := FProjIconParams.IconBmp.Size;
|
||
if (BlkStreamSize > 0) and (BmpStreamSize > 0) then
|
||
FProjIconParams.IsEmpty := false;
|
||
|
||
BlkStreamSize := FActiveIconParams.IconBlk.Size;
|
||
BmpStreamSize := FActiveIconParams.IconBmp.Size;
|
||
if (BlkStreamSize > 0) and (BmpStreamSize > 0) then
|
||
FActiveIconParams.IsEmpty := false;
|
||
|
||
Image_ProjBmp.Picture.Bitmap.LoadFromStream(FProjIconParams.IconBmp);
|
||
Image_ActiveBmp.Picture.Bitmap.LoadFromStream(FActiveIconParams.IconBmp);
|
||
end;
|
||
|
||
//*** <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||
if (ADefNewFileBmp <> '') and (ADefNewFileBlk <> '') and (ADefIconType <> oitNone) then
|
||
if FileExists(ADefNewFileBmp) and FileExists(ADefNewFileBlk) then
|
||
begin
|
||
if (ADefIconType = oitProjectible) or (ADefIconType = oitAll) then
|
||
begin
|
||
if (ADefIconType = oitProjectible) then
|
||
LoadPictureFromFile(FProjIconParams, FActiveIconParams, ADefNewFileBmp, ADefNewFileBlk)
|
||
else
|
||
begin
|
||
FilePath := ExtractFileDir(ADefNewFileBmp);
|
||
FileName := ExtractFileName(ADefNewFileBmp);
|
||
FileExt := ExtractFileExt(ADefNewFileBmp);
|
||
FileName := ReplaceStr(FileName, FileExt, '', False);
|
||
if FileExists(FilePath + '\' + FileName + '_active' + FileExt) then
|
||
begin
|
||
//LoadPictureFromFile(FProjIconParams, FActiveIconParams, ADefNewFileBmp, ADefNewFileBlk);
|
||
//LoadPictureFromFile(FActiveIconParams, FProjIconParams, FilePath + '\' + FileName + '_active' + FileExt,
|
||
// FilePath + '\' + FileName + '_active' + '.blk');
|
||
LoadPictureFromFileOne(FProjIconParams, ADefNewFileBmp, ADefNewFileBlk);
|
||
LoadPictureFromFileOne(FActiveIconParams, FilePath + '\' + FileName + '_active' + FileExt,
|
||
FilePath + '\' + FileName + '_active' + '.blk');
|
||
end
|
||
else
|
||
LoadPictureFromFile(FProjIconParams, FActiveIconParams, ADefNewFileBmp, ADefNewFileBlk)
|
||
end;
|
||
end
|
||
else
|
||
if ADefIconType = oitActive then
|
||
LoadPictureFromFile(FActiveIconParams, FProjIconParams, ADefNewFileBmp, ADefNewFileBlk);
|
||
end;
|
||
|
||
ModRes := ShowModal;
|
||
if ModRes = mrOk then
|
||
begin
|
||
FProjIconParams.IconBlk.Position := 0;
|
||
FProjIconParams.IconBmp.Position := 0;
|
||
FActiveIconParams.IconBlk.Position := 0;
|
||
FActiveIconParams.IconBmp.Position := 0;
|
||
|
||
if AMemTable <> nil then
|
||
begin
|
||
if GFormMode = fmMake then
|
||
AMemTable.Append;
|
||
AMemTable.Edit;
|
||
AMemTable.FieldByName(fnName).AsString := Edit_Name.Text;
|
||
TBlobField(AMemTable.FieldByName(fnProjBlk)).LoadFromStream(FProjIconParams.IconBlk);
|
||
TBlobField(AMemTable.FieldByName(fnProjBmp)).LoadFromStream(FProjIconParams.IconBmp);
|
||
TBlobField(AMemTable.FieldByName(fnActiveBlk)).LoadFromStream(FActiveIconParams.IconBlk);
|
||
TBlobField(AMemTable.FieldByName(fnActiveBmp)).LoadFromStream(FActiveIconParams.IconBmp);
|
||
AMemTable.FieldByName(fnIsModified).AsBoolean := true;
|
||
AMemTable.Post;
|
||
GID := AMemTable.FieldByName(fnID).AsInteger;
|
||
end
|
||
else
|
||
begin
|
||
ZeroMemory(@ObjectIconInfo, SizeOf(TObjectIconInfo));
|
||
ObjectIconInfo.ID := ObjectIconID;
|
||
ObjectIconInfo.Name := Edit_Name.Text;
|
||
ObjectIconInfo.ProjBlk := FProjIconParams.IconBlk;
|
||
ObjectIconInfo.ProjBmp := FProjIconParams.IconBmp;
|
||
ObjectIconInfo.ActiveBlk := FActiveIconParams.IconBlk;
|
||
ObjectIconInfo.ActiveBmp := FActiveIconParams.IconBmp;
|
||
SaveObjectIcon(MakeEdit, @ObjectIconInfo);
|
||
if MakeEdit = meMake then
|
||
GID := ObjectIconInfo.ID
|
||
else
|
||
if MakeEdit = meEdit then
|
||
DataSet_OBJECT_ICONS.FullRefresh;
|
||
|
||
|
||
{
|
||
if GFormMode = fmMake then
|
||
DataSet_OBJECT_ICONS.Append;
|
||
DataSet_OBJECT_ICONS.Edit;
|
||
DataSet_OBJECT_ICONS.FN(fnName).AsString := Edit_Name.Text;
|
||
TBlobField(DataSet_OBJECT_ICONS.FN(fnProjBlk)).LoadFromStream(FProjIconParams.IconBlk);
|
||
TBlobField(DataSet_OBJECT_ICONS.FN(fnProjBmp)).LoadFromStream(FProjIconParams.IconBmp);
|
||
TBlobField(DataSet_OBJECT_ICONS.FN(fnActiveBlk)).LoadFromStream(FActiveIconParams.IconBlk);
|
||
TBlobField(DataSet_OBJECT_ICONS.FN(fnActiveBmp)).LoadFromStream(FActiveIconParams.IconBmp);
|
||
DataSet_OBJECT_ICONS.Post;
|
||
GID := DataSet_OBJECT_ICONS.FN(fnID).AsInteger;}
|
||
end;
|
||
|
||
Result := true;
|
||
end;
|
||
finally
|
||
FProjIconParams.IconBlk.Free;
|
||
FProjIconParams.IconBmp.Free;
|
||
FActiveIconParams.IconBlk.Free;
|
||
FActiveIconParams.IconBmp.Free;
|
||
end;
|
||
end;
|
||
except
|
||
on E: Exception do AddExceptionToLog('TF_MakeEditObjectIcons.MakeEdit: '+E.Message);
|
||
end;
|
||
end;
|
||
|
||
function TF_MakeEditObjectIcons.LoadPictureFromFile(var AIconParams, ASecondIconParams: TIconParams;
|
||
AFileIconBMP, AFileIconBLK: String): Boolean;
|
||
var
|
||
FileStream: TStream;
|
||
begin
|
||
Result := false;
|
||
if FileExists(AFileIconBMP) and FileExists(AFileIconBLK) then
|
||
begin
|
||
Result := true;
|
||
FileStream := TFileStream.Create(AFileIconBLK, fmOpenRead);
|
||
try
|
||
FileStream.Position := 0;
|
||
AIconParams.IconBlk.Position := 0;
|
||
AIconParams.IconBlk.Size := 0;
|
||
AIconParams.IconBlk.CopyFrom(FileStream, FileStream.Size);
|
||
AIconParams.IconBlk.Position := 0;
|
||
finally
|
||
FileStream.Free;
|
||
end;
|
||
|
||
FileStream := TFileStream.Create(AFileIconBMP, fmOpenRead);
|
||
try
|
||
FileStream.Position := 0;
|
||
AIconParams.IconBmp.Position := 0;
|
||
AIconParams.IconBmp.Size := 0;
|
||
AIconParams.IconBmp.CopyFrom(FileStream, FileStream.Size);
|
||
AIconParams.IconBmp.Position := 0;
|
||
finally
|
||
FileStream.Free;
|
||
end;
|
||
|
||
AIconParams.Image.Clear;
|
||
AIconParams.Image.Picture.Bitmap.FreeImage;
|
||
AIconParams.Image.Picture.Bitmap.LoadFromStream(AIconParams.IconBmp);
|
||
AIconParams.IsEmpty := false;
|
||
|
||
if ASecondIconParams.IsEmpty then
|
||
begin
|
||
ASecondIconParams.Image.Picture.Bitmap.Assign(AIconParams.Image.Picture.Bitmap);
|
||
|
||
AIconParams.IconBlk.Position := 0;
|
||
ASecondIconParams.IconBlk.Position := 0;
|
||
ASecondIconParams.IconBlk.CopyFrom(AIconParams.IconBlk, AIconParams.IconBlk.Size);
|
||
ASecondIconParams.IconBlk.Position := 0;
|
||
|
||
AIconParams.IconBmp.Position := 0;
|
||
ASecondIconParams.IconBmp.Position := 0;
|
||
ASecondIconParams.IconBmp.CopyFrom(AIconParams.IconBmp, AIconParams.IconBmp.Size);
|
||
ASecondIconParams.IconBmp.Position := 0;
|
||
|
||
ASecondIconParams.IsEmpty := false;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
function TF_MakeEditObjectIcons.LoadPictureFromFileOne(var AIconParams: TIconParams;
|
||
AFileIconBMP, AFileIconBLK: String): Boolean;
|
||
var
|
||
FileStream: TStream;
|
||
begin
|
||
Result := false;
|
||
if FileExists(AFileIconBMP) and FileExists(AFileIconBLK) then
|
||
begin
|
||
Result := true;
|
||
FileStream := TFileStream.Create(AFileIconBLK, fmOpenRead);
|
||
try
|
||
FileStream.Position := 0;
|
||
AIconParams.IconBlk.Position := 0;
|
||
AIconParams.IconBlk.Size := 0;
|
||
AIconParams.IconBlk.CopyFrom(FileStream, FileStream.Size);
|
||
AIconParams.IconBlk.Position := 0;
|
||
finally
|
||
FileStream.Free;
|
||
end;
|
||
|
||
FileStream := TFileStream.Create(AFileIconBMP, fmOpenRead);
|
||
try
|
||
FileStream.Position := 0;
|
||
AIconParams.IconBmp.Position := 0;
|
||
AIconParams.IconBmp.Size := 0;
|
||
AIconParams.IconBmp.CopyFrom(FileStream, FileStream.Size);
|
||
AIconParams.IconBmp.Position := 0;
|
||
finally
|
||
FileStream.Free;
|
||
end;
|
||
|
||
AIconParams.Image.Clear;
|
||
AIconParams.Image.Picture.Bitmap.FreeImage;
|
||
AIconParams.Image.Picture.Bitmap.LoadFromStream(AIconParams.IconBmp);
|
||
AIconParams.IsEmpty := false;
|
||
end;
|
||
end;
|
||
|
||
|
||
procedure TF_MakeEditObjectIcons.LoadPictureFromOpenFileDialog(var AIconParams, ASecondIconParams: TIconParams);
|
||
const
|
||
extBLK = '.blk';
|
||
extBMP = '.bmp';
|
||
var FilePath: String;
|
||
FileName: String;
|
||
FileExt: String;
|
||
begin
|
||
try
|
||
if OpenDialog.Execute then
|
||
begin
|
||
FilePath := ExtractFilePath(OpenDialog.FileName);
|
||
FileName := ExtractFileName(OpenDialog.FileName);
|
||
FileExt := ExtractFileExt(OpenDialog.FileName);
|
||
if LowerCase(FileExt) = LowerCase(extBMP) then
|
||
begin
|
||
//StrLen := Length(FileName);
|
||
SetLength(FileName, Length(FileName) - Length(FileExt));
|
||
if FileExists(FilePath + FileName + extBLK) then
|
||
begin
|
||
LoadPictureFromFile(AIconParams, ASecondIconParams,
|
||
FilePath + FileName + extBMP,
|
||
FilePath + FileName + extBLK);
|
||
|
||
if Edit_Name.Text = '' then
|
||
Edit_Name.Text := ExtractFileNameOnly(OpenDialog.FileName);
|
||
end
|
||
else
|
||
ShowMessageByType(Self.Handle, smtDisplay, cMakeEditObjectIcons_Msg2_1+' "'+FileName + FileExt+'" '+cMakeEditObjectIcons_Msg2_2+' "'+FileName + extBLK+'".', Caption, MB_OK or MB_ICONINFORMATION);
|
||
end
|
||
else
|
||
ShowMessageByType(Self.Handle, smtDisplay, cMakeEditObjectIcons_Msg3, Caption, MB_OK or MB_ICONINFORMATION);
|
||
end;
|
||
except
|
||
on E: Exception do AddExceptionToLog('TF_MakeEditObjectIcons.LoadPictureFromFile: '+E.Message);
|
||
end;
|
||
end;
|
||
|
||
|
||
procedure TF_MakeEditObjectIcons.Button_ProjBmpClick(Sender: TObject);
|
||
begin
|
||
LoadPictureFromOpenFileDialog(FProjIconParams, FActiveIconParams);
|
||
end;
|
||
|
||
procedure TF_MakeEditObjectIcons.Button_ActiveBmpClick(Sender: TObject);
|
||
begin
|
||
LoadPictureFromOpenFileDialog(FActiveIconParams, FProjIconParams);
|
||
end;
|
||
|
||
procedure TF_MakeEditObjectIcons.FormCreate(Sender: TObject);
|
||
begin
|
||
OpenDialog.InitialDir := ExtractSaveDirSimple; //07.04.2009 ExtractFilePath(Application.ExeName);
|
||
end;
|
||
|
||
procedure TF_MakeEditObjectIcons.FormShow(Sender: TObject);
|
||
begin
|
||
if GFormMode = fmMake then
|
||
Edit_Name.SetFocus;
|
||
end;
|
||
|
||
procedure TF_MakeEditObjectIcons.btExchangeImgClick(Sender: TObject);
|
||
var
|
||
TmpBool: Boolean;
|
||
begin
|
||
ExchangeObjects(FActiveIconParams.IconBlk, FProjIconParams.IconBlk);
|
||
ExchangeObjects(FActiveIconParams.IconBmp, FProjIconParams.IconBmp);
|
||
|
||
TmpBool := FActiveIconParams.IsEmpty;
|
||
FActiveIconParams.IsEmpty := FProjIconParams.IsEmpty;
|
||
FProjIconParams.IsEmpty := TmpBool;
|
||
|
||
FActiveIconParams.Image.Clear;
|
||
FActiveIconParams.Image.Picture.Bitmap.FreeImage;
|
||
FActiveIconParams.IconBmp.Position := 0;
|
||
FActiveIconParams.Image.Picture.Bitmap.LoadFromStream(FActiveIconParams.IconBmp);
|
||
|
||
FProjIconParams.Image.Clear;
|
||
FProjIconParams.Image.Picture.Bitmap.FreeImage;
|
||
FProjIconParams.IconBmp.Position := 0;
|
||
FProjIconParams.Image.Picture.Bitmap.LoadFromStream(FProjIconParams.IconBmp);
|
||
end;
|
||
|
||
end.
|