⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sctvopt.pas

📁 suite component ace report
💻 PAS
📖 第 1 页 / 共 5 页
字号:
    { 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 + -