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

207 lines
6.3 KiB
ObjectPascal
Raw Blame History

unit U_ItemsSelector;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, RzButton, RzPanel, ExtCtrls, Buttons, RzLstBox,
RzSplit,
U_BaseCommon, U_ResourceReport, ImgList, RzRadChk, siComp, siLngLnk;
type
TF_ItemsSelector = class(TForm)
RzPanel1: TRzPanel;
gbOkCancel: TRzGroupBox;
btOk: TRzBitBtn;
btCancel: TRzBitBtn;
RzSplitter1: TRzSplitter;
RzPanel2: TRzPanel;
RzPanel3: TRzPanel;
RzPanel4: TRzPanel;
RzPanel5: TRzPanel;
RzPanel6: TRzPanel;
lbAccessibleFields: TRzListBox;
Label1: TLabel;
Label2: TLabel;
btAddItem: TSpeedButton;
btRemoveItem: TSpeedButton;
lbSelectedFields: TRzListBox;
RzPanel7: TRzPanel;
btMoveUp: TSpeedButton;
btMoveDown: TSpeedButton;
ImageList1: TImageList;
RzPanel8: TRzPanel;
cbDescending: TRzCheckBox;
cbCaseSensitive: TRzCheckBox;
lng_Forms: TsiLangLinked;
procedure gbOkCancelResize(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure btAddItemClick(Sender: TObject);
procedure btRemoveItemClick(Sender: TObject);
procedure lbAccessibleFieldsDblClick(Sender: TObject);
procedure lbSelectedFieldsDblClick(Sender: TObject);
procedure btMoveUpClick(Sender: TObject);
procedure btMoveDownClick(Sender: TObject);
private
GForm: TForm;
procedure ChangeItemPosition(AListBox: TRzListBox; APosOffset: Integer);
procedure MoveItemToOtherListBox(ASrcLB, ATrgLB: TRzListBox);
procedure SetControls;
public
Constructor Create(AOwner: TComponent; AForm: TForm);
Destructor Destroy; override;
function SelectReportSortFields(AReportSortInfo: TReportSortInfo): Boolean;
end;
//var
// Form1: TForm1;
implementation
uses Unit_DM_SCS;
{$R *.dfm}
constructor TF_ItemsSelector.Create(AOwner: TComponent; AForm: TForm);
begin
GForm := AForm;
inherited Create(AOwner);
end;
destructor TF_ItemsSelector.Destroy;
begin
inherited;
end;
procedure TF_ItemsSelector.gbOkCancelResize(Sender: TObject);
begin
SetMiddleControlChilds(TControl(Sender), TControl(Self));
end;
procedure TF_ItemsSelector.FormShow(Sender: TObject);
begin
gbOkCancelResize(gbOkCancel);
end;
procedure TF_ItemsSelector.ChangeItemPosition(AListBox: TRzListBox; APosOffset: Integer);
var
ItemIndexNewPos: Integer;
begin
ItemIndexNewPos := AListBox.ItemIndex + APosOffset;
if (ItemIndexNewPos >= 0) and (ItemIndexNewPos <= (AListBox.Items.Count - 1)) then
begin
AListBox.Items.Move(AListBox.ItemIndex, ItemIndexNewPos);
AListBox.ItemIndex := ItemIndexNewPos;
SetControls;
end;
end;
procedure TF_ItemsSelector.MoveItemToOtherListBox(ASrcLB, ATrgLB: TRzListBox);
var
StrObject: TObject;
begin
if ASrcLB.ItemIndex <> -1 then
begin
StrObject := ASrcLB.Items.Objects[ASrcLB.ItemIndex];
ATrgLB.Items.AddObject(ASrcLB.Items.Strings[ASrcLB.ItemIndex], StrObject);
ASrcLB.Items.Delete(ASrcLB.ItemIndex);
ATrgLB.ItemIndex := ATrgLB.Items.IndexOfObject(StrObject);
SetControls;
end;
end;
procedure TF_ItemsSelector.SetControls;
begin
//btAddItem.Enabled := (lbAccessibleFields.Items.Count > 0) and (lbAccessibleFields.ItemIndex <> -1);
//btRemoveItem.Enabled := (lbSelectedFields.Items.Count > 0) and (lbSelectedFields.ItemIndex <> -1);
//btMoveUp.Enabled := (lbSelectedFields.ItemIndex > 0);
//btMoveDown.Enabled := (lbSelectedFields.ItemIndex < (lbSelectedFields.Items.Count - 1));
end;
function TF_ItemsSelector.SelectReportSortFields(
AReportSortInfo: TReportSortInfo): Boolean;
var
i: Integer;
FieldCaption: String;
begin
Result := false;
try
try
cbCaseSensitive.Checked := (AReportSortInfo.CaseSensitive = biTrue);
cbDescending.Checked := (AReportSortInfo.Descending = biTrue);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
for i := 0 to AReportSortInfo.AllFieldNames.Count - 1 do
if AReportSortInfo.UsedFieldNames.IndexOf(AReportSortInfo.AllFieldNames[i]) = -1 then
begin
FieldCaption := AReportSortInfo.GetFieldCaption(AReportSortInfo.AllFieldNames[i]);
AddGUIDIDToStrings(FieldCaption, AReportSortInfo.AllFieldNames[i], 0, lbAccessibleFields.Items);
end;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
for i := 0 to AReportSortInfo.UsedFieldNames.Count - 1 do
if AReportSortInfo.AllFieldNames.IndexOf(AReportSortInfo.UsedFieldNames[i]) <> -1 then
begin
FieldCaption := AReportSortInfo.GetFieldCaption(AReportSortInfo.UsedFieldNames[i]);
AddGUIDIDToStrings(FieldCaption, AReportSortInfo.UsedFieldNames[i], 0, lbSelectedFields.Items);
end;
lbAccessibleFields.Sorted := true;
lbSelectedFields.Sorted := false;
if ShowModal = mrOk then
begin
AReportSortInfo.CaseSensitive := BoolToInt(cbCaseSensitive.Checked);
AReportSortInfo.Descending := BoolToInt(cbDescending.Checked);
AReportSortInfo.UsedFieldNames.Clear;
for i := 0 to lbSelectedFields.Items.Count - 1 do
AReportSortInfo.UsedFieldNames.Add(GetGUIDFromStrings(lbSelectedFields.Items, i));
Result := true;
end;
finally
RemoveGUIDIDFromStrings(lbAccessibleFields.Items);
lbAccessibleFields.Items.Clear;
RemoveGUIDIDFromStrings(lbSelectedFields.Items);
lbSelectedFields.Items.Clear;
end;
except
on E: Exception do AddExceptionToLogEx('TF_ItemsSelector.SelectReportSortFields', E.Message);
end;
end;
procedure TF_ItemsSelector.btAddItemClick(Sender: TObject);
begin
MoveItemToOtherListBox(lbAccessibleFields, lbSelectedFields);
end;
procedure TF_ItemsSelector.btRemoveItemClick(Sender: TObject);
begin
MoveItemToOtherListBox(lbSelectedFields, lbAccessibleFields);
end;
procedure TF_ItemsSelector.lbAccessibleFieldsDblClick(Sender: TObject);
begin
btAddItem.Click;
end;
procedure TF_ItemsSelector.lbSelectedFieldsDblClick(Sender: TObject);
begin
btRemoveItem.Click;
end;
procedure TF_ItemsSelector.btMoveUpClick(Sender: TObject);
begin
ChangeItemPosition(lbSelectedFields, -1);
end;
procedure TF_ItemsSelector.btMoveDownClick(Sender: TObject);
begin
ChangeItemPosition(lbSelectedFields, 1);
end;
end.