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

📄 jvdbactions.pas

📁 East make Tray Icon in delphi
💻 PAS
📖 第 1 页 / 共 5 页
字号:
  Dialog := TJvDynControlDataSourceEditDialog.Create;
  try
    AOptions.SetOptionsToDialog(Dialog);
    if Dialog.DynControlEngineDB.SupportsDataComponent(ADataComponent) then
      Dialog.DataComponent := ADataComponent
    else
      Dialog.DataComponent := GetDataSource(ADataComponent);
    Dialog.ShowDialog;
  finally
    Dialog.Free;
  end;
end;

//=== { TJvDatabaseActionDBGridEngine } ======================================

function TJvDatabaseActionDBGridEngine.GetDataSource(ADataComponent: TComponent): TDataSource;
begin
  if Assigned(ADataComponent) and (ADataComponent is TCustomDBGrid) then
    Result := TCustomDBGrid(ADataComponent).DataSource
  else
    Result := nil;
end;

type
  TAccessCustomDBGrid = class(TCustomDBGrid);
  TAccessCustomControl = class(TCustomControl);

procedure TJvDatabaseActionDBGridEngine.OnCreateDataControls(ADynControlEngineDB: TJvDynControlEngineDB;
  AParentControl: TWinControl; AFieldCreateOptions: TJvCreateDBFieldsOnControlOptions);
var
  I: Integer;
  ds: TDataSource;
  Field: TField;
  LabelControl: TControl;
  Control: TWinControl;
  Column: TColumn;
begin
  if Assigned(FCurrentDataComponent) and (FCurrentDataComponent is TCustomDBGrid) then
  begin
    ds := GetDataSource(FCurrentDataComponent);
    with AFieldCreateOptions do
      for I := 0 to TAccessCustomDBGrid(FCurrentDataComponent).ColCount - 2 do
      begin
        Column := TAccessCustomDBGrid(FCurrentDataComponent).Columns[I];
        if Column.Visible or ShowInvisibleFields then
        begin
          Field := Column.Field;
          Control := ADynControlEngineDB.CreateDBFieldControl(Field, AParentControl, AParentControl, '', ds);
          if FieldDefaultWidth > 0 then
            Control.Width := FieldDefaultWidth
          else
          begin
            if Field.Size > 0 then
              Control.Width :=
                TAccessCustomControl(AParentControl).Canvas.TextWidth(' ') * Field.Size;
            if (FieldMaxWidth > 0) and (Control.Width > FieldMaxWidth) then
              Control.Width := FieldMaxWidth
            else
            if (FieldMinWidth > 0) and (Control.Width < FieldMinWidth) then
              Control.Width := FieldMinWidth;
          end;
          LabelControl := ADynControlEngineDB.DynControlEngine.CreateLabelControlPanel(AParentControl, AParentControl,
            '', '&' + Column.Title.Caption, Control, True, 0);
          if FieldWidthStep > 0 then
            if (LabelControl.Width mod FieldWidthStep) <> 0 then
              LabelControl.Width := ((LabelControl.Width div FieldWidthStep) + 1) * FieldWidthStep;
        end;
      end;
  end;
end;

function TJvDatabaseActionDBGridEngine.Supports(ADataComponent: TComponent): Boolean;
begin
  Result := Assigned(ADataComponent) and (ADataComponent is TCustomDBGrid);
end;

procedure TJvDatabaseActionDBGridEngine.ShowSingleRecordWindow(AOptions: TJvShowSingleRecordWindowOptions;
  ADataComponent: TComponent);
var
  Dialog: TJvDynControlDataSourceEditDialog;
begin
  Dialog := TJvDynControlDataSourceEditDialog.Create;
  try
    AOptions.SetOptionsToDialog(Dialog);
    FCurrentDataComponent := ADataComponent;
    if Dialog.DynControlEngineDB.SupportsDataComponent(ADataComponent) then
      Dialog.DataComponent := ADataComponent
    else
      Dialog.DataComponent := GetDataSource(ADataComponent);
    Dialog.OnCreateDataControlsEvent := OnCreateDataControls;
    Dialog.ShowDialog;
  finally
    Dialog.Free;
  end;
end;

//=== { TJvDatabaseActionDevExpCxGridEngine } ================================

{$IFDEF USE_3RDPARTY_DEVEXPRESS_CXGRID}

function TJvDatabaseActionDevExpCxGridEngine.GetGridView(ADataComponent: TComponent): TcxCustomGridTableView;
begin
  if Assigned(ADataComponent) then
    if ADataComponent is TcxGrid then
      if TcxGrid(ADataComponent).FocusedView is TcxCustomGridTableView then
        Result := TcxCustomGridTableView(TcxGrid(ADataComponent).FocusedView)
      else
        Result := nil
    else
    if ADataComponent is TcxCustomGridTableView then
      Result := TcxCustomGridTableView(ADataComponent)
    else
      Result := nil
  else
    Result := nil;
end;

function TJvDatabaseActionDevExpCxGridEngine.GetDataSource(ADataComponent: TComponent): TDataSource;
begin
  if Assigned(ADataComponent) then
    if ADataComponent is TcxGrid then
      if (TcxGrid(ADataComponent).FocusedView is TcxCustomGridTableView) and
        (TcxCustomGridTableView(TcxGrid(ADataComponent).FocusedView).DataController is TcxGridDBDataController) then
        Result := TcxGridDBDataController(TcxCustomGridTableView(
          TcxGrid(ADataComponent).FocusedView).DataController).DataSource
      else
        Result := nil
    else
    if ADataComponent is TcxCustomGridTableView then
      if TcxCustomGridTableView(ADataComponent).DataController is TcxGridDBDataController then
        Result := TcxGridDBDataController(TcxCustomGridTableView(ADataComponent).DataController).DataSource
      else
        Result := nil
    else
      Result := inherited GetDataSource(ADataComponent)
  else
    Result := nil;
end;

function TJvDatabaseActionDevExpCxGridEngine.Supports(ADataComponent: TComponent): Boolean;
begin
  Result := Assigned(GetGridView(ADataComponent));
end;

function TJvDatabaseActionDevExpCxGridEngine.Bof(ADataComponent: TComponent): Boolean;
var
  View: TcxCustomGridTableView;
begin
  View := GetGridView(ADataComponent);
  if Assigned(View) then
    Result := View.DataController.FocusedRowIndex = 0
  else
    Result := inherited Bof(ADataComponent);
end;

function TJvDatabaseActionDevExpCxGridEngine.RecNo(ADataComponent: TComponent): Integer;
var
  View: TcxCustomGridTableView;
begin
  View := GetGridView(ADataComponent);
  if Assigned(View) then
    Result := View.DataController.FocusedRowIndex+1
  else
    Result := inherited RecNo(ADataComponent);
end;

function TJvDatabaseActionDevExpCxGridEngine.RecordCount(ADataComponent: TComponent): Integer;
var
  View: TcxCustomGridTableView;
begin
  View := GetGridView(ADataComponent);
  if Assigned(View) then
    Result := View.DataController.RecordCount
  else
    Result := inherited RecordCount(ADataComponent);
end;


function TJvDatabaseActionDevExpCxGridEngine.CanInsert(ADataComponent: TComponent): Boolean;
var
  View: TcxCustomGridTableView;
begin
  View := GetGridView(ADataComponent);
  if Assigned(View) then
    Result := View.OptionsData.Inserting and inherited CanInsert(ADataComponent)
  else
    Result := inherited CanInsert(ADataComponent);
end;

function TJvDatabaseActionDevExpCxGridEngine.CanUpdate(ADataComponent: TComponent): Boolean;
var
  View: TcxCustomGridTableView;
begin
  View := GetGridView(ADataComponent);
  if Assigned(View) then
    Result := View.OptionsData.Editing and inherited CanUpdate(ADataComponent)
  else
    Result := inherited CanUpdate(ADataComponent);
end;

function TJvDatabaseActionDevExpCxGridEngine.CanDelete(ADataComponent: TComponent): Boolean;
var
  View: TcxCustomGridTableView;
begin
  View := GetGridView(ADataComponent);
  if Assigned(View) then
    Result := View.OptionsData.Deleting and inherited CanDelete(ADataComponent)
  else
    Result := inherited CanDelete(ADataComponent);
end;

procedure TJvDatabaseActionDevExpCxGridEngine.First(ADataComponent: TComponent);
var
  View: TcxCustomGridTableView;
begin
  View := GetGridView(ADataComponent);
  if Assigned(View) then
    View.DataController.GotoFirst;
end;

procedure TJvDatabaseActionDevExpCxGridEngine.Last(ADataComponent: TComponent);
var
  View: TcxCustomGridTableView;
begin
  View := GetGridView(ADataComponent);
  if Assigned(View) then
    View.DataController.GotoLast;
end;

procedure TJvDatabaseActionDevExpCxGridEngine.MoveBy(ADataComponent: TComponent; Distance: Integer);
var
  View: TcxCustomGridTableView;
begin
  View := GetGridView(ADataComponent);
  if Assigned(View) then
    View.DataController.MoveBy(Distance)
end;

{$ENDIF USE_3RDPARTY_DEVEXPRESS_CXGRID}

//=== { TJvDatabaseBaseAction } ==============================================

constructor TJvDatabaseBaseAction.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  if Assigned(AOwner) and (AOwner is TJvDatabaseActionList) then
    DataComponent := TJvDatabaseActionList(AOwner).DataComponent;
end;

function TJvDatabaseBaseAction.GetDataSet: TDataSet;
begin
  if Assigned(DataEngine) then
    Result := DataEngine.GetDataSet(DataComponent)
  else
    Result := nil;
end;

function TJvDatabaseBaseAction.GetDataSource: TDataSource;
begin
  if Assigned(DataEngine) then
    Result := DataEngine.GetDataSource(DataComponent)
  else
    Result := nil;
end;

procedure TJvDatabaseBaseAction.SetDataComponent(Value: TComponent);
begin
  FDataComponent := Value;
  if FDataComponent <> nil then
    FDataComponent.FreeNotification(Self);
  if Assigned(IntRegisteredActionEngineList) then
    FDataEngine := IntRegisteredActionEngineList.GetEngine(FDataComponent)
  else
    FDataEngine := nil;
end;

procedure TJvDatabaseBaseAction.SetEnabled(Value: Boolean);
begin
  if Enabled <> Value then
    Enabled := Value;
end;

function TJvDatabaseBaseAction.EngineIsActive: Boolean;
begin
  if Assigned(DataEngine) then
    Result := DataEngine.IsActive(DataComponent)
  else
    Result := False;
end;

function TJvDatabaseBaseAction.EngineHasData: Boolean;
begin
  if Assigned(DataEngine) then
    Result := DataEngine.HasData(DataComponent)
  else
    Result := False;
end;

function TJvDatabaseBaseAction.EngineFieldCount: Integer;
begin
  if Assigned(DataEngine) then
    Result := DataEngine.FieldCount(DataComponent)
  else
    Result := -1;
end;

function TJvDatabaseBaseAction.EngineRecordCount: Integer;
begin
  if Assigned(DataEngine) then
    Result := DataEngine.RecordCount(DataComponent)
  else
    Result := -1;
end;

function TJvDatabaseBaseAction.EngineRecNo: Integer;
begin
  if Assigned(DataEngine) then
    Result := DataEngine.RecNo(DataComponent)
  else
    Result := -1;
end;

function TJvDatabaseBaseAction.EngineCanInsert: Boolean;
begin
  if Assigned(DataEngine) then
    Result := DataEngine.CanInsert(DataComponent)
  else
    Result := False;
end;

function TJvDatabaseBaseAction.EngineCanUpdate: Boolean;
begin
  if Assigned(DataEngine) then
    Result := DataEngine.CanUpdate(DataComponent)
  else
    Result := False;
end;

function TJvDatabaseBaseAction.EngineCanDelete: Boolean;
begin
  if Assigned(DataEngine) then
    Result := DataEngine.CanDelete(DataComponent)
  else
    Result := False;
end;

function TJvDatabaseBaseAction.EngineEof: Boolean;
begin
  if Assigned(DataEngine) then
    Result := DataEngine.Eof(DataComponent)
  else
    Result := False;
end;

function TJvDatabaseBaseAction.EngineBof: Boolean;
begin
  if Assigned(DataEngine) then
    Result := DataEngine.Bof(DataComponent)
  else
    Result := False;
end;

function TJvDatabaseBaseAction.EngineControlsDisabled: Boolean;
begin
  if Assigned(DataEngine) then
    Result := DataEngine.ControlsDisabled(DataComponent)
  else
    Result := False;
end;

function TJvDatabaseBaseAction.EngineEditModeActive: Boolean;
begin
  if Assigned(DataEngine) then
    Result := DataEngine.EditModeActive(DataComponent)
  else
    Result := False;
end;

function TJvDatabaseBaseAction.HandlesTarget(Target: TObject): Boolean;
begin
  //  Result := inherited HandlesTarget(Target);
  Result := Assigned(DataEngine);
end;

procedure TJvDatabaseBaseAction.UpdateTarget(Target: TObject);
begin
  if Assigned(DataSet) and not EngineControlsDisabled then
    SetEnabled(True)
  else
    SetEnabled(False);
end;

procedure TJvDatabaseBaseAction.ExecuteTarget(Target: TObject);
begin
  if Assigned(FOnExecute) then
    FOnExecute(Self, DataEngine, DataComponent)
  else
  if Assigned(FOnExecuteDataSource) then
    FOnExecuteDataSource(Self, DataSource)
  else
    inherited ExecuteTarget(Target);
end;

procedure TJvDatabaseBaseAction.Notification(AComponent: TComponent; Operation: TOperation);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -