expertcad/SRC/SCSNormBase/U_MakeEditObjectIcons.pas
2025-05-12 10:07:51 +03:00

470 lines
18 KiB
ObjectPascal
Raw Permalink Blame History

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.