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

207 lines
5.8 KiB
ObjectPascal

unit U_CanDelete;
interface
uses
Windows, U_LNG, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, cxLookAndFeelPainters, StdCtrls, cxButtons, ComCtrls, U_BaseCommon, U_BaseConstants,
RzBHints, ExtCtrls, siComp, siLngLnk, cxGraphics, cxLookAndFeels, Menus;
type TItemType = Integer;
type TCanDelItemData = Record
ID_Compon: Integer;
Complects: TStrings;
end;
PCanDelItemData = ^TCanDelItemData;
type TCanDelFormKind = (dfkCompon, dfkComponComplect);
type
TF_CanDelete = class(TForm)
Panel_ComponList: TPanel;
Label_Messg: TLabel;
Button_Close: TcxButton;
ListView_NotDel: TListView;
Button_Choice: TcxButton;
Button_Cancel: TcxButton;
lng_Forms: TsiLangLinked;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
procedure Button_CloseClick(Sender: TObject);
procedure ListView_NotDelMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure ListView_NotDelMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
procedure ListView_NotDelChange(Sender: TObject; Item: TListItem;
Change: TItemChange);
private
{ Private declarations }
GForm: TForm;
procedure WMMove(var Mes: TWMMove);
message WM_Move;
public
{ Public declarations }
GMode: TCanDelFormKind;
//GItemType: TItemType;
GPrevListItem: TListItem;
GAnswQuatDifferent: TRect;
GLastSelID: Integer;
procedure GotoOnTree;
procedure ShowComplects;
Constructor Create(AOwner: TComponent; AForm: TForm);
Destructor Destroy; override;
end;
{
var
F_CanDelete: TF_CanDelete; }
implementation
Uses U_Main, Unit_DM_SCS, U_AnswerToQuast;
{$R *.dfm}
// ##### Ïîêàçàòü êîìïëåêòóþùèå êîìïîíåíòû #####
procedure TF_CanDelete.ShowComplects;
var ListItem: TListItem;
Point : TPoint;
begin
GetCursorPos(Point);
Point := ListView_NotDel.ScreenToClient(Point);
ListItem := ListView_NotDel.GetItemAt(Point.X, Point.Y);
if GMode = dfkComponComplect then
begin
if (ListItem <> nil) {and (GPrevListItem <> ListItem)} {and (Button = mbRight)} then
begin
ListView_NotDel.Hint := cCanDelete_Msg1_1+' ' + #13 + ' "'+ ListItem.Caption +'":' + #13 +
PCanDelItemData(ListItem.Data).Complects.Text;
ListView_NotDel.ShowHint := true;
Application.ShowHint := true;
end
else
begin
ListView_NotDel.ShowHint := false;
Application.ShowHint := false;
end;
GPrevListItem := ListItem;
end;
end;
// ##### Ïðåõîä ïî Äåðåâó #####
procedure TF_CanDelete.GotoOnTree;
var //Item: TListItem;
Node: TTreeNode;
ID_Comp: Integer;
begin
if ListView_NotDel.Selected <> nil then
with (GForm as TF_Main) do
begin
//GItemType := TF_Main(GForm).DM.GItemType;
ID_Comp := 0;
case GMode of
dfkCompon : ID_Comp := Integer(ListView_NotDel.Selected.Data^);
dfkComponComplect: ID_Comp := PCanDelItemData(ListView_NotDel.Selected.Data).ID_Compon;
end;
{if (TF_Main(GForm).GDBMode = bkNormBase) or (GItemType = itComponent) then
Node := FindComponInTree(ID_Comp, true) // Âûéòè íà êîìïîíåíò
else if GItemType <> itComponent then
Node := FindComponInTree(Integer(ID_Comp), false); // Âûéòè íà ïàïêó }
Node := FindComponOrDirInTree(ID_Comp, true); // Âûéòè íà êîìïîíåíò
if Node <> nil then
Tree_catalog.Selected := Node;
GLastSelID := ID_Comp;
end;
end;
// ############################################################################
//
// ##### Ïîêàçàòü ôîðìó #####
procedure TF_CanDelete.FormShow(Sender: TObject);
begin
ListView_NotDel.SetFocus;
GLastSelID := 0;
end;
// ##### Èçìåíåíèå ïîçèöèè â Ëèñòå #####
procedure TF_CanDelete.ListView_NotDelChange(Sender: TObject;
Item: TListItem; Change: TItemChange);
begin
GotoOnTree;
end;
// ##### Çàêðûòü ôîðìó #####
procedure TF_CanDelete.FormClose(Sender: TObject;
var Action: TCloseAction);
var i: Integer;
ICount: Integer;
begin
ICount := ListView_NotDel.Items.Count;
if GMode = dfkCompon then
for i := 0 to ICount - 1 do
FreeMem(ListView_NotDel.Items[i].Data)
else
for i := 0 to ICount - 1 do
begin
FreeAndNil(PCanDelItemData(ListView_NotDel.Items[i].Data).Complects);
FreeMem(ListView_NotDel.Items[i].Data);
end;
ListView_NotDel.Items.Clear;
GMode := dfkCompon;
ShowComplects;
end;
// ##### Íàæàòèå íà êíîïêó "Çàêðûòü" #####
procedure TF_CanDelete.Button_CloseClick(Sender: TObject);
begin
Close;
end;
// ##### Íàæàòèå ïî êîìïîíåíòå â Ëèñòå #####
procedure TF_CanDelete.ListView_NotDelMouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ShowComplects;
end;
procedure TF_CanDelete.ListView_NotDelMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
ShowComplects;
end;
// ##### Ïåðåìåùåíèå ôîðìû #####
procedure TF_CanDelete.WMMove(var Mes: TWMMove);
begin
if TF_Main(GForm).F_AnswerToQuast.Visible then
begin
TF_Main(GForm).F_AnswerToQuast.Top := Top + GAnswQuatDifferent.Top;
TF_Main(GForm).F_AnswerToQuast.Left := Left + GAnswQuatDifferent.Left;
end;
end;
constructor TF_CanDelete.Create(AOwner: TComponent; AForm: TForm);
begin
GForm := AForm;
inherited Create(AOwner);
end;
destructor TF_CanDelete.Destroy;
begin
inherited;
end;
end.