📄 sctvopt.pas
字号:
{ get rid of vars that don't belong }
if fields.Count > 0 then
begin
for Spot := 0 to rvars.Count - 1 do
begin
rvar := TSctDBVar(rvars.Items[Spot]);
if (fields.IndexOf(rvar.DataField) = -1) And Not AceIsAncestor(rvar) then
begin
DeleteVar(rvar);
rvars.Items[Spot] := nil;
end;
end;
rvars.Pack;
end;
if DSG.CreateVariables then
begin
if fields.Count > rvars.Count then
begin
for Spot := 0 to fields.Count - 1 do
begin
AddDbVar(DSG, fields[Spot]);
end;
end;
end;
FillDsgVarList(Dsg, rvars);
for Spot := 0 to rvars.Count - 1 do
begin
rvar := TSctDBVar(rvars.Items[Spot]);
rvar.Autovar := DSG.CreateVariables;
rvar.updatelevel := DSG.UpdateLevel;
end;
PageManager.PageDesigner.Modified;
rvars.Free;
fields.Free;
end;
end;
{$endif}
procedure TSctDSVariableOptions.TotalVarListDragOver(Sender,
Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
Accept := (Source = clist) or (Source = ExprVarList) or (Source = DBVarList);
end;
procedure TSctDSVariableOptions.TotalVarListDragDrop(Sender,
Source: TObject; X, Y: Integer);
begin
AddTotal(TListBox(Source));
end;
procedure TSctDSVariableOptions.Button1Click(Sender: TObject);
begin
Close;
end;
procedure SelectAll(List: TListBox);
var
Spot: Integer;
begin
for Spot := 0 to List.Items.Count - 1 do List.Selected[Spot] := True;
end;
procedure TSctDSVariableOptions.ExprSelectAllClick(Sender: TObject);
begin
SelectAll(ExprVarList);
end;
procedure TSctDSVariableOptions.TotalSelectAllClick(Sender: TObject);
begin
SelectAll(TotalVarList);
end;
procedure TSctDSVariableOptions.flistSelectAllClick(Sender: TObject);
begin
SelectAll(flist);
end;
procedure TSctDSVariableOptions.SelectAll1Click(Sender: TObject);
begin
SelectAll(clist);
end;
procedure TSctDSVariableOptions.Delete1Click(Sender: TObject);
begin
SelectComponent(nil);
{$ifdef AceBDE}
CListDelete;
{$endif}
end;
procedure TSctDSVariableOptions.flistAddClick(Sender: TObject);
begin
{$ifdef AceBDE}
FListDefine;
{$endif}
end;
procedure TSctDSVariableOptions.TotalDeleteClick(Sender: TObject);
begin
DeleteETList(TotalVarList);
end;
procedure TSctDSVariableOptions.ExprDeleteClick(Sender: TObject);
begin
DeleteETList(ExprVarList);
end;
procedure TSctDSVariableOptions.TotalVarListClick(Sender: TObject);
var
TotalItem: TTotalItem;
begin
if TotalVarList.ItemIndex <> -1 then
begin
if TotalVarList.ItemIndex < TotalList.Count then
begin
TotalItem := TTotalItem(TotalList.Items[ TotalVarList.ItemIndex ]);
SelectComponent(GetVar(TotalItem.TotalName));
end;
end;
UnSelectStuff(Sender);
end;
procedure TSctDSVariableOptions.ExprVarListClick(Sender: TObject);
var
ExprItem: TExprItem;
begin
if ExprVarList.ItemIndex <> -1 then
begin
if ExprVarList.ItemIndex < ExprList.Count then
begin
ExprItem := TExprItem(ExprList.Items[ ExprVarList.ItemIndex ]);
SelectComponent(GetVar(ExprItem.ExprName));
end;
end;
UnSelectStuff(Sender);
end;
procedure TSctDSVariableOptions.clistClick(Sender: TObject);
var
DSG: TSctDataSourceGuide;
List: TStringList;
Spot: Integer;
begin
if clist.ItemIndex <> -1 then
begin
DSG := GetDataSourceGuide(GetFullDSName);
if DSG <> nil then
begin
List := TStringList.Create;
for Spot := 0 to clist.Items.Count - 1 do
begin
if clist.Selected[Spot] then List.Add(clist.Items[Spot])
end;
if List.Count > 0 then SelectComponent(GetDbVar(DSG, List[0]));
List.Free;
end;
end;
UnSelectStuff(Sender);
end;
procedure TSctDSVariableOptions.FormResize(Sender: TObject);
var
Buffer: Integer;
h, h1,h2,h3,h4, zoom: Integer;
begin
Buffer := 1;
h := ClientHeight;
zoom := Round(h* 0.7);
h1 := Round(h* 0.1);
h2 := h1;
h3 := h2;
h4 := h3;
if DataSourceZoomed then h1 := zoom
else if ExprZoomed then h2 := zoom
else if TotalZoomed then h3 := zoom
else if DBVarZoomed then h4 := zoom
else
begin
h1 := Round(h* 0.4);
h2 := Round(h* 0.2);
h3 := h2;
h4 := h3;
end;
DataSourcePanel.Height := h1;
DataSourcePanel.Width := Round(ClientWidth * 0.70);
DataSourcePanel.Left := 0;
DataSourcePanel.Top := 0;
ExprPanel.Top := DataSourcePanel.Height;
ExprPanel.Height := h2 - Buffer;
ExprPanel.Left := 0;
ExprPanel.Width := DataSourcePanel.Width;
TotalPanel.Top := DataSourcePanel.Height + ExprPanel.Height;
TotalPanel.Height := h3 - Buffer;
TotalPanel.Left := 0;
TotalPanel.Width := DataSourcePanel.Width;
DBVarPanel.Top := DataSourcePanel.Height + ExprPanel.Height + TotalPanel.Height;
DBVarPanel.Height := h4 - Buffer;
DBVarPanel.Left := 0;
DBVarPanel.Width := DataSourcePanel.Width;
DataSourceZoom.Left := DataSourcePanel.Width - 20;
ExprZoom.Left := DataSourceZoom.Left;
TotalZoom.Left := DataSourceZoom.Left;
DBVarZoom.Left := DataSourceZoom.Left;
ButtonPanel.Left := TotalPanel.Width;
ButtonPanel.Top := ClientHeight - ButtonPanel.Height;
ButtonPanel.Width := ClientWidth - DataSourcePanel.Width - Buffer;
h := h - ButtonPanel.Height;
zoom := Round(h * 0.9);
h1 := Round(h * 0.1);
h2 := h1;
if FieldZoomed then h1 := zoom
else if VarZoomed then h2 := zoom
else
begin
h1 := Round(h* 0.5);
h2 := h1;
end;
FieldsPanel.Height := h1 - Buffer;
FieldsPanel.Top := 0;
FieldsPanel.Left := DataSourcePanel.Width;
FieldsPanel.Width := ClientWidth - DataSourcePanel.Width - Buffer;
VarPanel.Height := h2 - Buffer;
VarPanel.Top := FieldsPanel.Height;
VarPanel.Left := DataSourcePanel.Width;
VarPanel.Width := ClientWidth - DataSourcePanel.Width - Buffer;
FieldZoom.Left := flist.Width - 20;
VarZoom.Left := FieldZoom.Left;
AutoLabel.Left := 5;
if (DsgList.Count > 0) then
begin
DataSourceLabel.Left := DataSourceList.ColWidths[0] + 5;
DSLevelLabel.Left := DataSourceLabel.Left + DataSourceList.ColWidths[1];
end else
begin
DataSourceLabel.Left := PixelsPerInch;
DSLevelLabel.Left := DataSourceLabel.Left + DataSourceList.Width + 20;
end;
end;
procedure TSctDSVariableOptions.clistDrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState);
{$ifdef AceBDE}
var
MyVar: TSctDbVar;
Text: String;
begin
with (Control as TListBox).Canvas do
begin
Text := TListBox(Control).Items[Index];
MyVar := GetDbVar( GetDataSourceGuide(GetFullDSName), Text);
if VarUsed(MyVar) then
begin
if (odSelected in State) then Brush.Color := clGreen
else Font.Color := clGreen;
Text := '> ' + Text;
end;
FillRect(Rect);
Textout(Rect.Left+4, Rect.Top, Text);
end;
{$else}
begin
{$endif}
end;
function TSctDSVariableOptions.VarUsed(MyVar: TSctVAr): Boolean;
var
pg: TSctGroupPage;
Spot: Integer;
lb: TSctLabel;
begin
Result := False;
if PageManager <> nil then
begin
if PageManager.Page <> nil then
begin
pg := TSctGroupPage(PageManager.Page);
Spot := 0;
if pg.Labels <> nil then
begin
while (Not Result) And (Spot < pg.Labels.Count) do
begin
lb := pg.Labels.Items[Spot];
if (lb is TSctVarLabel) And (TSctVarLabel(lb).Variable = MyVar) then Result := True
else if (lb is TSctCheckLabel) And (TSctCheckLabel(lb).Variable = MyVar) then Result := True
else if (lb is TSctBarCodeLabel) And (TSctBarCodeLabel(lb).Variable = MyVar) then Result := True
else if (lb is TSctImageLabel) And (TSctImageLabel(lb).Variable = MyVar) then Result := True
else if (lb is TSctTotalVarLabel) And (TSctTotalVarLabel(lb).TotalVariable = MyVar) then Result := True;
{$ifdef WIN32}
if (lb is TSctRichTextLabel) And (TSctRichTextLabel(lb).Variable = MyVar) then Result := True;
{$endif}
Inc(Spot);
end;
end;
if Not Result And (pg.TotalVars <> nil) then
begin
Spot := 0;
while (Not Result) And (Spot < pg.TotalVars.Count) do
begin
if TSctTotalVar(pg.TotalVars.Items[Spot]).Variable = MyVar then Result := True;
Inc(Spot);
end;
end;
if Not Result And (pg.Groups <> nil) then
begin
Spot := 0;
while (Not Result) And (Spot < pg.Groups.Count) do
begin
if TSctGroup(pg.Groups.Items[Spot]).Variable = MyVar then Result := True;
Inc(Spot);
end;
end;
end;
end;
end;
procedure TSctDSVariableOptions.DataSourceListDrawCell(Sender: TObject;
Col, Row: Longint; Rect: TRect; State: TGridDrawState);
{$ifdef AceBDE}
var
CheckBox: TRect;
DsgItem: TDsgItem;
begin
with DataSourceList.Canvas do
begin
if (DsgList.Count > 0) And (Row < DsgList.Count) then
begin
DsgItem := TDsgItem(DsgList.Items[Row]);
if gdSelected in State then Brush.Color := clNavy
else Brush.Color := clWhite;
if gdSelected in State then Font.Color := clWhite
else Font.Color := clBlack;
if (Col = 0) then
begin
FillRect(Rect);
CheckBox := Bounds(Rect.Left + 5, Rect.Top + 3, 12, 12);
Pen.Style := psSolid;
Pen.Width := 0;
if Not (gdSelected in State) then Pen.Color := clBlack
else Pen.Color := clWhite;
Rectangle(CheckBox.Left, CheckBox.Top, CheckBox.Right, CheckBox.Bottom);
DsgItem.CheckRect := CheckBox;
if DsgItem.CreateVariables then
begin
Pen.Width := 2;
MoveTo( CheckBox.left + 2, CheckBox.top + 2);
LineTo(CheckBox.left + 10, CheckBox.top + 10);
MoveTo(CheckBox.left + 10, CheckBox.top + 2);
LineTo(CheckBox.left + 2, CheckBox.top + 10);
end;
end else if (Col = 1) then
begin
FillRect(Rect);
TextRect(Rect,Rect.Left + 2, Rect.Top + 1, DsgItem.DataSourceName);
end else if (Col = 2) then
begin
FillRect(Rect);
TextRect(Rect,Rect.Left + 2, Rect.Top + 1, DsgItem.UpdateLevelName);
end;
end else
begin
FillRect(Rect);
end;
end;
{$else}
begin
{$endif}
end;
procedure TSctDSVariableOptions.DataSourceListClick(Sender: TObject);
{$ifdef AceBDE}
var
DSG: TSctDataSourceGuide;
begin
DSG := GetDataSourceGuide(GetFullDSName);
SelectComponent(DSG);
UpdateCFList;
UnSelectStuff(Sender);
{$else}
begin
{$endif}
end;
procedure TSctDSVariableOptions.DataSourcePanelResize(Sender: TObject);
begin
DataSourceList.Height := Round( DataSourcePanel.Height * 0.66)-DataSourceListPanel.Height;
DataSourceList.ColWidths[0] := 30;
DataSourceList.ColWidths[1] := DataSourceList.Width - 190;
DataSourceList.ColWidths[2] := 150;
end;
procedure TSctDSVariableOptions.SelectComponent(Comp: TComponent);
begin
if (Comp = nil) then Comp := TSctGroupPage(PageManager.Page);
{$ifdef WIN32}
PageManager.PageDesigner.SelectComponent(Comp);
{$else}
TWindowDesigner(PageManager.PageDesigner).LibForm.SetSelection(Comp.name);
{$endif}
end;
{ The return value on this function is to tell if the variables
where created automatically or manual. Meaning the dialog
was brought up and doesn't need to be displayed again. }
function TSctDSVariableOptions.UpdateVars: Boolean;
var
Spot: Integer;
Count: Integer;
pg: TSctGroupPage;
DSG: TSctDataSourceGuide;
vars: TList;
fields: TStringList;
begin
Result := True;
{$ifdef AceBDE}
if Not (dsoUpdatingVars in FDSOptionsState) then
begin
Include(FDSOptionsState, dsoUpdatingVars);
pg := GetGroupPage;
if pg <> nil then
begin
if pg.DataSourceList <> nil then
begin
vars := TList.Create;
fields := TStringList.Create;
Count := 0;
{ count of what will be added }
for Spot := 0 to pg.DataSourceList.Count - 1 do
begin
DSG := TSctDataSourceGuide(pg.DataSourceList.Items[Spot]);
if Dsg.CreateVariables then
begin
FillDsgFieldList(DSG, fields);
FillDsgVarList(DSG, vars);
Count := Count + (Fields.Count - vars.Count);
end;
end;
if Count > 99 then
begin
Result := False;
ShowMessage('There is ' + IntToStr(Count) +
' fields. You must manually create the db Variables when > 99.');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -