RTFormwork/项目代码/RTBasicsV1/T03贸易布匹检验/DbPanel/JkPanel.pas
“ddf” 61630656e9 1
2024-07-07 09:35:27 +08:00

1124 lines
37 KiB
ObjectPascal

unit JkPanel;
interface
uses
Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,
ExtCtrls,dbctrls,stdctrls,db,ADODB,ComCtrls,Variants,Gauges,
SqlExpr,Grids,DBGrids,MovePanel,JKFootpanel,Buttons,dsr;
type
TEditorstyle = (TsMemo,Tscombox,Tsedit);
type
TJkPanel = class(TPanel)
private
{ Private declarations }
This_Jth :string; //机台编号
This_TaskOrder :string; //任务序次
FEditorstyle:Teditorstyle;
FLeft :Integer;
FTop :Integer;
maxTextLen :Integer;
maxLabelLen :Integer;
maxDgheight :Integer;
maxFootHeight :integer;
FTitleVisible :Boolean;
FEditorVisible :Boolean;
FDataReadOnly :Boolean;
FPageCount :Integer;
FPass_Grid :TDBGrid;
FP_Move :TMovePanel;
FP_Parent :TPanel;
ColorLabels :array of TLabel;
Co_Shapes :array of TShape;
Co_DllBtn :array of TSpeedButton;
Co_Panels :array of TPanel;
FPageControl: TPageControl; {分页控件}
FTabSheets :array of TTabSheet;
ScrollBoxs :array of TScrollBox; {滚动控件}
Splitters :array of TSplitter; {分割控件}
FootPanels :array of TJKFootpanel; {Foot页显示控件}
FLineHeight :Integer;
//数据数组控件,动态生成
MemoEditors :array of TMemo;
comEditors :array of TCombobox;
edEditors :array of Tedit;
DGLists :array of TDbGrid;
AdoLists :array of TadoDataset;
DsLists :array of TDataSource;
DGGlides :array of TDbGrid;
AdoGlides :TadoDataset;
DsGlides :TDataSource;
ProgressEditor :array of Tedit;
Labels :array of TLabel; //字段标题,动态生成
ProgressBars :array of TGauge;
Shapes :array of TShape;
FDataSource :TDataSource; // 数据源
FDataField_A :String; // DataField
FDataField_B :String; // DataField
FDataField_C :String; // DataField
FDataField_ColA :String; // DataField
FDataField_ColB :String; // DataField
Fcnnstr :String;
FPageSql :string;
FListSql :String;
FFootSql :string;
FGlideSql :String;
FCheJianFieldName :String;
FColumns :Integer; //显示列数
tmpado :TadoDataset;
tmpDs :TDataSource;
TmpDgListIdx,TmpDgListCol:integer;
procedure FreeEditors; //释放数据输入控件的内存
procedure AKeyDown(Sender:TObject; var Key :Word; Shift:TShiftState);
procedure AKeyPress(Sender:TObject; var Key :Char);
procedure AProgressEditorChange(Sender :TObject);
//procedure inti_Grid(sender :TObject);
procedure LabelsClick(Sender: TObject);
procedure Co_DllBtnClick(Sender: TObject);
procedure AdolistsAfterScroll(DataSet: TDataSet);
procedure DGListsCellClick(Column: TColumn);
procedure DGListsDrawColumnCell(Sender: TObject;
const Rect: TRect;DataCol: Integer;
Column: TColumn;State: TGridDrawState);
procedure refreshFootpanel(Tag :integer);
procedure DGGlideDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
procedure FP_MovePanelDblClick(Sender: TObject);
procedure FootPanelDblclick(Sender: TObject);
//function comEditor(Index :Integer):TComboBox;
//function edEditor(Index :Integer):Tedit;
//function MemoEditor(Index :Integer) :TMemo;
protected
{ Protected declarations }
public
constructor Create(AOwner:TComponent); override;
// destructor Destroy; override;
procedure Setedit(Value :TEditorstyle);
procedure CreateEditors(var DS :TDataSource; cnnstr :String;
Const Defaultsheet :String = ''); //创建各字段的数据输入控件
procedure ClearHits(ItemIndex :Integer);
procedure AddHits(ItemIndex:Integer; Hits :array of string);
{ Public declarations }
published
property LimitLeft :Integer read FLeft write FLeft default 10;
property LimitTop :Integer read FTop write FTop default 10;
property Editorstyle :TEditorstyle read FEditorstyle write Setedit default TsMemo;
property EditorWidth :Integer read maxTextLen write maxTextLen default 100;
property TitleWidth :Integer read maxLabelLen write maxLabelLen default 100;
property DgHeight :Integer read maxDgheight write maxDgheight default 300;
property FootHeight :Integer read maxFootHeight write maxFootHeight default 200;
property TitleVisible :Boolean read FTitleVisible write FTitleVisible default True;
property EditorVisible :Boolean read FEditorVisible write FEditorVisible default True;
property DataReadOnly :Boolean read FDataReadOnly write FDataReadOnly; //default True;
property LineHeight :Integer read FLineHeight write FLineHeight default 15;
property DataSource :TDataSource read FDataSource write FDataSource; //数据源
property DataField_ColA :String read FDataField_A write FDataField_ColA;
property DataField_ColB :String read FDataField_B write FDataField_ColB;
property DataField_Editor :String read FDataField_A write FDataField_A;
property DataField_Title :String read FDataField_B write FDataField_B;
property DataField_Progress :String read FDataField_C write FDataField_C;
property Data_PageSql :String read FPageSql write FPageSql;
property Data_DgListSql :String read FListSql write FListSql;
property Data_FootSql :String read FFootSql write FFootSql;
property Data_GlideSql :String read FGlideSql write FGlideSql;
property Data_CheJianField :String read FCheJianFieldName write FCheJianFieldName;
property Columns :Integer read FColumns write FColumns default 4;//表列数
{ Published declarations }
end;
procedure Register;
implementation
constructor TJkPanel.Create(AOwner :TComponent);
begin
Inherited Create(AOWner);
FLeft := 20;
FTop := 20;
maxTextLen := 250;
maxLabelLen := 250;
maxDgheight := 200;
maxFootHeight := 150;
FLineHeight := 15;
FTitleVisible := True;
FDataReadOnly := True;
end;
procedure TJkPanel.Setedit(Value :TEditorstyle);
begin
if FEditorstyle <> Value then
begin
FEditorstyle := Value;
Invalidate;
end;
end;
{ 为第I字段增加提示信息的方法}
procedure TJkPanel.AddHits(ItemIndex :Integer; Hits :array of string);
var
m,n,i :Integer;
begin
if FEditorstyle = Tscombox then
begin
n := Length(comEditors);
m := Length(Hits);
if ItemIndex< n then
for i:= 0 to m - 1 do
comEditors[ItemIndex].Items.Add(Hits[i]);
end
else if FEditorstyle = Tsedit then
begin
n := Length(edEditors);
m := Length(Hits);
if ItemIndex< n then
for i:=0 to m-1 do
edEditors[ItemIndex].Hint:= Hits[i];
end
else if FEditorstyle = TsMemo then
begin
n := Length(memoEditors);
m := Length(Hits);
if ItemIndex< n then
for i:=0 to m-1 do
memoEditors[ItemIndex].Hint:= Hits[i];
end;
end;
procedure TJkPanel.AKeyDown(Sender :TObject; var Key :Word; Shift :TShiftState);
begin
//
end;
procedure TJkPanel.AProgressEditorChange(Sender :TObject);
begin
//
end;
procedure TJkPanel.AKeyPress(Sender :TObject; var Key :Char);
begin
if (Sender is TComboBox) or (Sender is Tedit) or (Sender is TMemo) then
if Key=#13 then
(Owner as TForm).Perform(WM_NEXTDLGCTL, 0, 0);
end;
procedure TJkPanel.ClearHits(ItemIndex :Integer);
var
n :Integer;
begin
if FEditorstyle = Tscombox then
begin
n := Length(comEditors);
if ItemIndex< n then comEditors[ItemIndex].Items.Clear;
end
else if FEditorstyle = Tsedit then
begin
n := Length(edEditors);
if ItemIndex< n then edEditors[ItemIndex].Hint:='';;
end
else if FEditorstyle = TsMemo then
begin
n := Length(MemoEditors);
if ItemIndex< n then MemoEditors[ItemIndex].Hint:='';;
end;
end;
{ 创建各字段的数据输入控件的方法}
procedure TJkPanel.CreateEditors(var DS :TDataSource; cnnstr :String; Const Defaultsheet :String = '');
var
Tmp_CheJian,Tmp_Parm :String;
i,j,n,k,This_Index,TextHeight :Integer;
tmp_col0,Tmp_Row0,Tmp_Row1 :Integer;
XXX :TStringList;
kkk,RRR :array of integer;
DefaultIndex :Integer; //默认车间
begin
if (Data_CheJianField = '') then exit;
{ 释放全部控件内存}
FreeEditors;
if DS = nil then exit;
if DataSource = nil then FDataSource := Ds;
if not DataSource.DataSet.Active then exit;
if (DataSource.DataSet is TAdoDataSet) = False then exit;
TmpDgListIdx := -1;
FPageCount := 0;
DefaultIndex := 0;
n := DataSource.DataSet.RecordCount;
if n <= 0 then exit;
DataSource.DataSet.DisableControls;
if TitleWidth < maxTextLen then
maxTextLen := TitleWidth;
{ 计算最大的标题长度及显示长度}
DataSource.DataSet.First;
{ 计算高度}
TextHeight := Canvas.TextHeight(DataSource.DataSet.Fields[0].DisplayLabel) + LineHeight; //10;
{ 分配内存}
SetLength(AdoLists,n);
SetLength(DsLists,n);
SetLength(DGLists,n);
SetLength(Labels,n);
SetLength(ColorLabels,n);
SetLength(ProgressEditor,n);
SetLength(Shapes,n);
{ 创建数据感知控件 AdoGlides、DsGlides}
AdoGlides := TadoDataset.Create(owner);
DsGlides := TDatasource.Create(owner);
DsGlides.DataSet := AdoGlides;
if Columns = 0 then Columns := 6;
try
tmpado := TadoDataset.Create(Owner);
tmpDs := TDatasource.Create(Owner);
tmpDs.DataSet := tmpado;
with tmpado do
begin
Active := False;
Fcnnstr := cnnstr;
tmpado.ConnectionString := Fcnnstr;
tmpado.CommandText := Data_PageSql;
Active := True;
FPageCount := RecordCount;
if FPageCount = 0 then exit;
setlength(kkk,FPageCount);
for i := 0 to high(kkk) do
kkk[i] := -1;
SetLength(RRR,FPageCount);
for i := 0 to high(RRR) do
RRR[i] := 0;
first;
// 创建PageControl
FPageControl := TPageControl.Create(Owner);
FPageControl.Parent := Self;
FPageControl.Font.Name := '宋体';
FPageControl.Font.Size := 9;
FPageControl.Align := alClient;
FPageControl.Visible := False;
{ 分配载体内存}
setlength(FTabSheets,FPageCount+1);
setlength(ScrollBoxs,FPageCount+1);
setlength(FootPanels,FPageCount+1);
setlength(Splitters,FPageCount+1);
setlength(Co_Shapes,FPageCount+1);
setlength(Co_DllBtn,FPageCount+1);
setlength(Co_Panels,FPageCount+1);
SetLength(DGGlides,FPageCount+1);
XXX := TStringList.Create();
for j := 0 to FPageCount do
begin
{ FPageControl分页}
FTabSheets[j] := TTabSheet.Create(Owner);
FTabSheets[j].Parent := FPageControl;
FTabSheets[j].ParentFont := True;
FTabSheets[j].PageControl := FPageControl;
FTabSheets[j].Visible := True;
FTabSheets[j].PageIndex := j;
if j < FPageCount then
begin
Tmp_CheJian := trim(fieldByName(Data_CheJianField).AsString);
if Defaultsheet <> '' then //指定默认车间
begin
if Tmp_CheJian = Defaultsheet then
DefaultIndex := j;
end;
FTabSheets[j].Caption := '车间:' + Tmp_CheJian;
FTabSheets[j].Hint := Tmp_CheJian;
XXX.Append(Tmp_CheJian);
end
else
begin
Tmp_CheJian := '';
FTabSheets[j].Caption := '未指定车间';
FTabSheets[j].Hint := Tmp_CheJian;
XXX.Append('未指定车间');
end;
FTabSheets[j].ShowHint := False;
FTabSheets[j].Visible := True;
FTabSheets[j].Align := alClient;
//创建Foot页显示控件
FootPanels[j] := TJKFootpanel.Create(Owner);
with FootPanels[j] do
begin
Visible := True;
Parent := FTabSheets[j];
// BevelInner := bvLowered;
//BevelOuter := bvRaised;
Left := 0;
Width := 1;
Align := alRight;
Hint := FTabSheets[j].Hint;
ShowHint := False;
onDblclick := FootPanelDblclick;
LimitLeft := 8;
Ctl3D := False;
end;
//创建颜色块显示控件载体
Co_Panels[j] := Tpanel.Create(Owner);
with Co_Panels[j] do
begin
Visible := True;
Parent := FootPanels[j];
BevelInner := bvLowered;
BevelOuter := bvRaised;
height := 40;
Co_Panels[j].BorderWidth := 2;
Align := alTop;
end;
//创建颜色块显示控件
Co_Shapes[j] := TShape.Create(Owner);
with Co_Shapes[j] do
begin
Visible := True;
Parent := Co_Panels[j];
Width := FootHeight;
Align := alClient;
end;
//创建按钮控件
Co_DllBtn[j] := TSpeedButton.Create(Owner);
with Co_DllBtn[j] do
begin
Visible := True;
Parent := FootPanels[j];
height := 25;
Tag := j;
Font.name := '宋体';
Font.Size := 9;
Align := alTop;
Font.Color := ClBlue;
//Flat := true;
caption := '流程处理';
OnClick := Co_DllBtnClick;
end;
{ 创建DbGrid控件 DGGlides}
DGGlides[j]:= TDBGrid.Create(owner);
with DGGlides[j] do
begin
Visible := True;
Parent := FootPanels[j];
height := 110;
Align := alTop;
Tag := j;
Font.name := '宋体';
Font.Size := 9;
ReadOnly := True;
Options := [dgEditing,dgMultiSelect]; //,dgRowLines,dgColumnResize,
FixedColor := clSkyBlue;
OnDrawColumnCell := DGGlideDrawColumnCell;
end;
//创建分割控件
Splitters[j] := TSplitter.Create(Owner);
with Splitters[j] do
begin
Visible := True;
Parent := FTabSheets[j];
Width := 4;
Align := alRight;
end;
//创建滚动盒
ScrollBoxs[j] := TScrollBox.Create(Owner);
with ScrollBoxs[j] do
begin
Visible := True;
Parent := FTabSheets[j];
Color := RGB(100,100,100);//clTeal;
Align := alClient;
Hint := FTabSheets[j].Hint;
ShowHint := False;
end;
next;
end;
end;
if FEditorstyle = Tscombox then
SetLength(comEditors,n)
else if FEditorstyle = Tsedit then
SetLength(edEditors,n)
else
SetLength(MemoEditors,n);
{ 创建编辑}
for i := 0 to n - 1 do
begin
if DataSource.DataSet.Fieldbyname(Data_CheJianField).AsVariant = null then
This_Index := FPageCount
else
This_Index := XXX.IndexOf(trim(DataSource.DataSet.Fieldbyname(Data_CheJianField).Asstring));
if kkk[This_Index] >= Columns -1 then
begin
kkk[This_Index] := 0;
RRR[This_Index] := RRR[This_Index] +1;
end
else
kkk[This_Index] := kkk[This_Index] + 1;
tmp_col0 := kkk[This_Index];
tmp_Row0 := RRR[This_Index];
{ 创建数据感知控件 AdoLists、DsLists}
AdoLists[i] := TadoDataset.Create(owner);
AdoLists[i].Tag := i;
AdoLists[i].AfterScroll:= AdolistsAfterScroll;
DsLists[i] := TDatasource.Create(owner);
DsLists[i].DataSet := AdoLists[i];
DsLists[i].Tag := i;
//DsLists[i].OnDataChange := DsListsDataChange;
{ 创建标题}
Labels[i] := TLabel.Create(owner);
Labels[i].visible := FTitleVisible;
Labels[i].Parent := (ScrollBoxs[This_Index] as TScrollBox);
Labels[i].Font.Name := '宋体';
Labels[i].Font.Size := 9;
Labels[i].Font.Color := ClBlue;
Labels[i].OnClick := LabelsClick;
Labels[i].Tag := i;
//Labels[i].Font.Style := [FsBold];
Labels[i].Transparent := True;
//机台名称
if DataSource.DataSet.Fieldbyname(DataField_Title).AsVariant <> null then
Labels[i].caption := DataSource.DataSet.Fieldbyname(DataField_Title).AsString
else
Labels[i].caption := '';
Tmp_CheJian := trim((ScrollBoxs[This_Index] as TScrollBox).Hint);
//机台编号
if DataSource.DataSet.Fieldbyname(DataField_ColA).AsVariant <> null then
Labels[i].Hint := trim(DataSource.DataSet.Fieldbyname(DataField_ColA).AsString)
else
Labels[i].Hint := '';
Labels[i].ShowHint := False;
if FEditorstyle = TsMemo then
begin
Labels[i].Top := FTop + tmp_Row0 * (TextHeight*3+DgHeight+5) + 2;
Labels[i].Left := FLeft + (TitleWidth + 20) * tmp_Col0 + 5;
Labels[i].Width := TitleWidth;
end
else
begin
Labels[i].Top := FTop + tmp_Row0 * (TextHeight*2+DgHeight+5) + 2;
Labels[i].Left := FLeft + (TitleWidth + 12) * tmp_Col0;
Labels[i].Width := TitleWidth;
end;
{ 创建信息显示数据对象}
if FEditorstyle = Tscombox then
begin
comEditors[i] := TComboBox.Create(Owner);
comEditors[i].Parent := ScrollBoxs[This_Index]; //Self;
comEditors[i].Left := Labels[i].Left; //+ Labels[i].Width;
comEditors[i].Width := maxTextLen;
if FTitleVisible then
comEditors[i].Top := Labels[i].Top+14
else
comEditors[i].Top := Labels[i].Top;
if DataSource.DataSet.Fieldbyname(DataField_Editor).AsVariant <> null then
comEditors[i].Text := DataSource.DataSet.Fieldbyname(DataField_Editor).AsString;
comEditors[i].OnKeyPress := OnKeyPress;
comEditors[i].OnKeyDown := OnKeyDown;
comEditors[i].Visible := EditorVisible;
comEditors[i].Tag := i;
DGLists[i] := TDbGrid.Create(Owner);
DGLists[i].Parent := ScrollBoxs[This_Index];
DGLists[i].Font.name := '宋体';
DGLists[i].Font.Size := 9;
DGLists[i].ReadOnly := True;
DGLists[i].FixedColor := clSkyBlue;
DGLists[i].Left := comEditors[i].Left;
DGLists[i].Width := comEditors[i].Width;
DGLists[i].Height := DgHeight;
DGLists[i].Options := [dgRowSelect];
if EditorVisible then
DGLists[i].Top := comEditors[i].Top+comEditors[i].height+2
else
DGLists[i].Top := comEditors[i].Top+2;
DGLists[i].Hint := trim(Labels[i].caption);
DGLists[i].ShowHint := False;
DGLists[i].OnDrawColumnCell := DGListsDrawColumnCell;
DGLists[i].OnCellClick := DGListsCellClick;
DGLists[i].Tag := i;
ColorLabels[i] := TLabel.Create(Owner);
ColorLabels[i].Parent := ScrollBoxs[This_Index];
ColorLabels[i].AutoSize := true;
ColorLabels[i].Font.name := '宋体';
ColorLabels[i].Font.Size := 9;
ColorLabels[i].Top := Labels[i].top;
ColorLabels[i].Left := Labels[i].Left + round(Labels[i].Width/2)+20;
ColorLabels[i].Width := round(Labels[i].Width/2)-20;
ColorLabels[i].BringToFront;
ColorLabels[i].Tag := i;
ColorLabels[i].Font.Color := ClWhite;
ColorLabels[i].Color := RGB(100,100,100);
ColorLabels[i].Caption := '待机中';
end
else if FEditorstyle = Tsedit then
begin
edEditors[i] := Tedit.Create(Owner);
edEditors[i].Parent := ScrollBoxs[This_Index];
edEditors[i].Left := Labels[i].Left; //+ Labels[i].Width;
edEditors[i].Width := maxTextLen;
if FTitleVisible then
edEditors[i].Top := Labels[i].Top+14
else
edEditors[i].Top := Labels[i].Top;
edEditors[i].ReadOnly := DataReadOnly;
if DataSource.DataSet.Fieldbyname(DataField_Editor).AsVariant <> null then
edEditors[i].Text := DataSource.DataSet.Fieldbyname(DataField_Editor).AsString;
edEditors[i].OnKeyPress := OnKeyPress;
edEditors[i].OnKeyDown := OnKeyDown;
edEditors[i].Visible := EditorVisible;
DGLists[i] := TDbGrid.Create(Owner);
DGLists[i].Parent := ScrollBoxs[This_Index];
DGLists[i].Font.name := '宋体';
DGLists[i].Font.Size := 9;
DGLists[i].ReadOnly := True;
DGLists[i].Options := [dgRowSelect];
DGLists[i].FixedColor := clSkyBlue;
DGLists[i].Left := edEditors[i].Left;
DGLists[i].Width := edEditors[i].Width;
DGLists[i].Height := DgHeight;
DGLists[i].Tag := i;
if EditorVisible then
DGLists[i].Top := edEditors[i].Top+edEditors[i].height+2
else
DGLists[i].Top := edEditors[i].Top+2;
DGLists[i].Hint := trim(Labels[i].caption);
DGLists[i].ShowHint := False;
DGLists[i].OnDrawColumnCell := DGListsDrawColumnCell;
DGLists[i].OnCellClick := DGListsCellClick;
DGLists[i].Tag := i;
ColorLabels[i] := TLabel.Create(Owner);
ColorLabels[i].Parent := ScrollBoxs[This_Index];
ColorLabels[i].AutoSize := False;
ColorLabels[i].Font.name := '宋体';
ColorLabels[i].Font.Size := 9;
ColorLabels[i].Top := Labels[i].top;
ColorLabels[i].Left := Labels[i].Left + round(Labels[i].Width/2)+20;
ColorLabels[i].Width := round(Labels[i].Width/2)-20;
ColorLabels[i].BringToFront;
ColorLabels[i].Tag := i;
ColorLabels[i].Font.Color := ClWhite;
ColorLabels[i].Color := RGB(100,100,100);
ColorLabels[i].Caption := '待机中';
end
else
begin
MemoEditors[i] := Tmemo.Create(Owner);
MemoEditors[i].Parent := ScrollBoxs[This_Index];
MemoEditors[i].Left := Labels[i].Left;
MemoEditors[i].Width := maxTextLen;
if FTitleVisible then
MemoEditors[i].Top := Labels[i].Top+14
else
MemoEditors[i].Top := Labels[i].Top;
MemoEditors[i].Height := 60;
MemoEditors[i].ReadOnly := DataReadOnly;
if DataSource.DataSet.Fieldbyname(DataField_Editor).AsVariant <> null then
MemoEditors[i].Lines.Add(DataSource.DataSet.Fieldbyname(DataField_Editor).AsString);
MemoEditors[i].OnKeyPress := OnKeyPress;
MemoEditors[i].OnKeyDown := OnKeyDown;
MemoEditors[i].Visible := EditorVisible;
MemoEditors[i].Tag := i;
DGLists[i] := TDbGrid.Create(Owner);
DGLists[i].Parent := ScrollBoxs[This_Index];
DGLists[i].Font.name := '宋体';
DGLists[i].Font.Size := 9;
DGLists[i].ReadOnly := True;
DGLists[i].FixedColor := clSkyBlue;
DGLists[i].Left := MemoEditors[i].Left;
DGLists[i].Width := MemoEditors[i].Width;
DGLists[i].Height := DgHeight;
DGLists[i].Options := [dgRowSelect];
if EditorVisible then
DGLists[i].Top := MemoEditors[i].Top+MemoEditors[i].height+2
else
DGLists[i].Top := MemoEditors[i].Top+2;
DGLists[i].Hint := trim(Labels[i].caption);
DGLists[i].ShowHint := False;
DGLists[i].OnDrawColumnCell := DGListsDrawColumnCell;
DGLists[i].OnCellClick := DGListsCellClick;
DGLists[i].Tag := i;
ColorLabels[i] := TLabel.Create(Owner);
ColorLabels[i].Parent := ScrollBoxs[This_Index];
ColorLabels[i].AutoSize := False;
ColorLabels[i].Font.name := '宋体';
ColorLabels[i].Font.Size := 9;
ColorLabels[i].Left := DGLists[i].Left + DGLists[i].Width +1;
ColorLabels[i].Height := DGLists[i].Height + MemoEditors[i].Height;
ColorLabels[i].Top := DGLists[i].Top;
ColorLabels[i].Tag := i;
ColorLabels[i].Font.Color := ClWhite;
ColorLabels[i].Color := RGB(100,100,100);
ColorLabels[i].Caption := '待机中';
end;
Tmp_Parm := trim(DataSource.DataSet.Fieldbyname(DataField_Editor).Value);
with AdoLists[i] do
begin
DisableConTrols;
Active := False;
ConnectionString := Fcnnstr; //数据库连接串
CursorType := ctStatic;
LockType := ltReadOnly;
CommandText := Data_DgListSql;
Parameters.ParamValues['ListParm'] := Tmp_Parm;
Active := True;
{
tmpSql := 'select a.AutoID,case a.MachMiss when ''0000000000'' then '
+ 'convert(varchar(20),f.GlideName) else convert(varchar(20),d.ShortName) end'
+ ' as ShortName,rtrim(b.MP_Crock) as MP_Crock,'
+ 'convert(varchar(20),c.ChnName) as ChnName,a.MachLen,'
+ 'convert(varchar(20),f.GlideName) as GlideName,'
+ 'a.MachMiss,a.TaskOrder,a.Status,'
+ 'c.RedCode,c.GreenCode,c.BlueCode'
+ ' from MD_Dev_Mission a '+#10#13
+ ' left join MD_PlanCrock b on b.mp_autocrk = left(a.MachMiss,10)'
+ ' left join Mc_color c on c.ColorId = b.MP_Color '
+ ' left join Mc_Glide f on f.GlideNo = a.MachGlide'+#10#13
+ ' left join BC_Customer d on d.customno = b.MP_Customno'+#10#13
+ ' where a.Status <> ''6'''
+ ' and a.Machine =:ListParm'+#10#13
+ ' order by a.Machine,a.TaskOrder';
}
for k := 0 to Fields.Count -1 do
Fields[k].Visible := False;
Fieldbyname('ShortName').Visible := True; //加工单位
Fieldbyname('MP_Crock').Visible := True; //助记缸号
Fieldbyname('ChnName').Visible := True; //颜色
Fieldbyname('MachLen').Visible := True; //单缸重量
Fieldbyname('GlideName').Visible := True; //工序
DGLists[i].DataSource := DsLists[i];
EnableConTrols;
DGLists[i].Columns[0].width := 50;
DGLists[i].Columns[1].width := 30;
DGLists[i].Columns[2].width := 55;
DGLists[i].Columns[3].width := 45;
DGLists[i].Columns[4].width := 50;
//DGLists[i].Columns[0].Alignment := TaCenter;
//DGLists[i].Columns[1].Alignment := TaCenter;
//DGLists[i].Columns[2].Alignment := TaCenter;
//DGLists[i].Columns[3].Alignment := TaCenter;
//DGLists[i].Columns[4].Alignment := TaCenter;
First;
end;
Shapes[i] := TShape.Create(Owner);
Shapes[i].Parent := ScrollBoxs[This_Index];
Shapes[i].Left := Labels[i].Left - 5;
Shapes[i].top := Labels[i].Top - 5;
if FEditorstyle = TsMemo then
begin
Shapes[i].height := ColorLabels[i].height + Labels[i].height +20 +10;
Shapes[i].Width := (ColorLabels[i].left - Labels[i].left) + ColorLabels[i].Width + 10;
end
else
begin
Shapes[i].height := (DGLists[i].Top + DGLists[i].Height - Labels[i].Top)+ 10;
Shapes[i].Width := Labels[i].Width +10;
end;
Shapes[i].Brush.Color := clSkyBlue;
Shapes[i].Visible := True;
Shapes[i].SendToBack;
Shapes[i].Tag := i;
if not DataSource.DataSet.Eof then
DataSource.DataSet.next;
end;
DataSource.DataSet.EnableControls;
tmpado.Close;
XXX.Free;
if FPageControl.PageCount > 0 then
begin
FPageControl.ActivePageIndex := FPageControl.PageCount-1;
FPageControl.ActivePageIndex := DefaultIndex;
end;
Finally
FPageControl.Visible := True;
end;
end;
procedure TJkPanel.Co_DllBtnClick(Sender: TObject);
var
this_Gh :String;
k :Integer;
begin
if not CanLCCL then //判断是否有权操作此项功能
begin
application.messagebox('对不起,目前您还没有被授权操作此项功能。','信息提示',mb_ok or MB_ICONInformation);
Exit;
end;
k := (sender as TSpeedButton).Tag;
if not FootPanels[k].DataSource.dataset.active then exit;
if Co_DllBtn[k].Caption = '流程处理' then
begin
if FootPanels[k].DataSource.dataset.FieldValues['缸号'] = null then exit;
this_Gh := FootPanels[k].DataSource.dataset.fieldbyname('缸号').AsString;
//执行流程处理
DoAbnormalC(TmpHandle,cnn_Base,V_UserId,V_User,this_Gh);
end
else
begin
//执行洗缸领料
if This_Jth <> '' then
DoRinseprt(TmpHandle,cnn_Base,V_UserId,V_User,This_Jth,This_TaskOrder);
end;
end;
procedure TJkPanel.DGListsDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var
Redcode,GreenCode,BlueCode,TmpStatus :Integer;
begin
with (Sender as TdbGrid) do
begin
if DataSource = nil then exit;
if not DataSource.DataSet.Active then exit;
Redcode := (DataSource.DataSet as TAdoDataset).fieldByName('Redcode').AsInteger;
Greencode := (DataSource.DataSet as TAdoDataset).fieldByName('Greencode').AsInteger;
Bluecode := (DataSource.DataSet as TAdoDataset).fieldByName('Bluecode').AsInteger;
TmpStatus := (DataSource.DataSet as TAdoDataset).fieldByName('Status').AsInteger;
if gdFocused in State then
begin
Canvas.Brush.Color := clblack;
Canvas.Font.Color := Clred;
end
else if TmpStatus = 5 then
begin
Canvas.Font.Color := clBlue;
Canvas.Brush.Color := clWhite;
Canvas.Font.Style := [fsBold]; //fsItalic
ColorLabels[(Sender as TDbGrid).Tag].Color := RGB(Redcode,Greencode,Bluecode);
if (Redcode <=10) or (Bluecode <=10) or (Greencode <=10) then
ColorLabels[(Sender as TDbGrid).Tag].Font.Color := ClWhite
else
ColorLabels[(Sender as TDbGrid).Tag].Font.Color := ClBlack;
ColorLabels[(Sender as TDbGrid).Tag].Caption := '生产中';
end
else if (Redcode <=100) or (Greencode <=100) then
begin
Canvas.Font.Color := ClWhite;
Canvas.Brush.Color := RGB(Redcode,Greencode,Bluecode);
end
else
begin
Canvas.Font.Color := ClBlack;
Canvas.Brush.Color := RGB(Redcode,Greencode,Bluecode);
end;
DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
end;
procedure TJkPanel.DGGlideDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
with (Sender as TDbGrid) do
begin
if DataSource = nil then exit;
if not DataSource.DataSet.Active then exit;
if gdFocused in State then exit;
if (Sender as TDbGrid).SelectedRows.CurrentRowSelected then
begin
Canvas.Brush.Color := clHighlight;
Canvas.Font.Color := ClWhite;
end
else if DataSource.DataSet.RecNo mod 2 = 0 then
begin
Canvas.Brush.Color := $00DEDEDE;
Canvas.Font.Color := ClBlack;
end
else
begin
Canvas.Brush.Color := clwhite;
Canvas.Font.Color := ClBlack;
end;
DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
end;
procedure TJkPanel.refreshFootpanel(Tag :integer);
var
i,Listindex,PageIndex :integer;
R,G,B :Integer;
tmpCarN0 :String;
TmpMachMiss :String; //单缸号
begin
try
PageIndex := FPageControl.ActivePageIndex;
Listindex := Tag;
if AdoLists[Listindex].RecordCount = 0 then
begin
FootPanels[PageIndex].DataSource := Nil;
exit;
end;
//获取机台号
This_Jth := Labels[Listindex].Hint;
//获取任务序次
This_TaskOrder := trim(AdoLists[Listindex].FieldByName('TaskOrder').AsString);
TmpMachMiss := trim(AdoLists[Listindex].FieldByName('MachMiss').AsString);
if TmpMachMiss = '0000000000' then
Co_DllBtn[PageIndex].Caption := '洗缸领料'
else
Co_DllBtn[PageIndex].Caption := '流程处理';
with tmpado do
begin
DisableConTrols;
Active := False;
ConnectionString := Fcnnstr;
CursorType := ctStatic;
LockType := ltReadOnly;
CommandText := Data_FootSql;
Parameters.ParamValues['FootParm'] := AdoLists[Listindex].Fields[0].Value;
Active := True;
for i := 0 to fieldCount -1 do
tmpado.Fields[i].Alignment := taLeftJustify;
tmpDs.dataset := tmpado;
EnableConTrols;
end;
with adoGlides do
begin
DisableConTrols;
Active := False;
ConnectionString := Fcnnstr;
CursorType := ctStatic;
LockType := ltReadOnly;
CommandText := Data_GlideSql;
if AdoLists[Listindex].Fieldbyname('MachMiss').AsString <> null then
begin
tmpCarN0 := trim(AdoLists[Listindex].Fieldbyname('MachMiss').AsString);
tmpCarN0 := Copy(tmpCarN0,1,10);
end
else
tmpCarN0 := '////';
Parameters.ParamValues['PCarNo'] := tmpCarN0;
Active := True;
First;
EnableConTrols;
end;
DGGlides[PageIndex].DataSource := DsGlides;
DGGlides[PageIndex].Columns[0].Width := 74;
DGGlides[PageIndex].Columns[1].Width := 40;
FootPanels[PageIndex].Width := 140;
FootPanels[PageIndex].Columns := 1;
FootPanels[PageIndex].DataSource := tmpDs;
FootPanels[PageIndex].CreateEditors(tmpDs,1);
R := 255; G:= 255; B := 255;
R := AdoLists[Listindex].Fieldbyname('RedCode').AsInteger;
G := AdoLists[Listindex].Fieldbyname('GreenCode').AsInteger;
B := AdoLists[Listindex].Fieldbyname('BlueCode').AsInteger;
Co_Shapes[PageIndex].Brush.Color := RGB(R,G,B);
except
//
end;
end;
procedure TJkPanel.DGListsCellClick(Column: TColumn);
var
tmpIdx,TmpCol,TmpTag :Integer;
begin
if not Column.Grid.DataSource.DataSet.Active then exit;
if Column.Grid.DataSource.DataSet.RecordCount = 0 then exit;
if Column.Grid.DataSource.DataSet.RecNo = 1 then
begin
tmpIdx := (Column.Grid as TCustomDbGrid).ComponentIndex;
TmpCol := Column.Index;
if TmpDgListIdx = -1 then
begin
TmpDgListIdx := tmpIdx;
TmpDgListCol := TmpCol;
refreshFootpanel((Column.Grid as TCustomDbGrid).DataSource.DataSet.Tag);
end
else
begin
if TmpDgListIdx <> tmpIdx then
refreshFootpanel((Column.Grid as TCustomDbGrid).DataSource.DataSet.Tag);
TmpDgListIdx := tmpIdx;
TmpDgListCol := TmpCol;
end;
(Column.Grid as TCustomDbGrid).SetFocus;
end
end;
procedure TJkPanel.AdolistsAfterScroll(DataSet: TDataSet);
begin
//刷新 Footpanel
refreshFootpanel(DataSet.tag);
end;
//响应Labels[i]的Click事件
procedure TJkPanel.LabelsClick(Sender: TObject);
begin
//
end;
{
procedure TJkPanel.LabelsClick(Sender: TObject);
var
i :integer;
Tmp_CheJian,Tmp_JiTai :String;
begin
try
if FP_Parent = nil then inti_Grid(Sender);
if FP_Parent = nil then exit;
Tmp_JiTai := trim((Sender as Tlabel).Caption);
Tmp_CheJian := trim(((Sender as Tlabel).Parent as TScrollBox).Hint);
if tmpado.Active then
begin
if tmpado.FieldValues['机台'] <> null then
if tmpado.FieldByName('机台').AsString = Tmp_JiTai then
exit;
end;
screen.Cursor := crSQLWait;
//FP_Parent.Visible := False;
//FP_Parent.Left := FPageControl.Left + (Sender as Tlabel).Left + (Sender as Tlabel).Width + 28;
//FP_Parent.Top := FPageControl.Top + (Sender as Tlabel).top + (Sender as Tlabel).Height +4;
FP_Move.Caption := trim((Sender as Tlabel).Hint) + '明细列表';
with tmpado do
begin
DisableConTrols;
Active := False;
ConnectionString := Fcnnstr;
tmpado.CursorType := ctStatic;
tmpado.LockType := ltReadOnly;
CommandText := 'Exec '+Data_BerthListSql+' '''+Tmp_CheJian+''','''+Tmp_JiTai+'''';
Active := True;
First;
EnableConTrols;
for i := 0 to Fields.Count -1 do
begin
Fields[i].Alignment := taCenter;
if i = 0 then
fields[i].DisplayWidth := 20
else
fields[i].DisplayWidth := 8;
Fpass_Grid.Columns[i].Title.Alignment := taCenter;
Fpass_Grid.Columns[i].Title.Font.Style:= [];
end;
end;
screen.Cursor := crDefault;
FP_Parent.Visible := True;
except
screen.Cursor := crDefault;
end;
end;
}
procedure TJkPanel.FootPanelDblclick(Sender: TObject);
begin
if sender is TScrollBox then
(sender as TScrollBox).Parent.width := 1;
end;
procedure TJkPanel.FP_MovePanelDblClick(Sender: TObject);
begin
FP_Parent.Visible := False;
end;
//Register控件
procedure Register;
begin
RegisterComponents('Data Controls', [TJkPanel]);
end;
// 内存的释放是要有顺序的!必须以创建的相反的顺序进行!尤其是当组件之间有父子关系时
procedure TJkPanel.FreeEditors;
begin
if FPageControl <> nil then
begin
if FP_Parent <> nil then
begin
try
FPass_Grid.Free;
FP_Move.Free;
FP_Parent.Free;
except
//
end;
end;
DGGlides := nil;
DsGlides := nil;
AdoGlides := nil;
DsGlides.Free;
AdoGlides.Free;
DGLists := nil;
DsLists := nil;
AdoLists := nil;
FPass_Grid := nil;
FP_Move := nil;
FP_Parent := nil;
Shapes := nil;
ProgressBars := nil;
comEditors := nil;
edEditors := nil;
MemoEditors := nil;
ScrollBoxs := nil;
Splitters := nil;
Co_Shapes:= nil;
Co_DllBtn := Nil;
Co_Panels:= nil;
FootPanels := nil;
tmpDs.Free;
tmpado.Free;
FPageControl.Free;
end;
end;
end.