adbpanel.pas

来自「delphi编程控件」· PAS 代码 · 共 2,248 行 · 第 1/5 页

PAS
2,248 行
字号
  if ppvLabelLayout in FAssignedValues then
    Result := FLabelLayout
  else Result := DefaultLabelLayout;
end;

procedure TAutoPanelPage.SetCaption(Value : String);
begin
  if(FCaption <> Value) then begin
    FCaption := Value;
    Changed;
  end;
end;

procedure TAutoPanelPage.SetAlignment(Value : TAlignment);
begin
  if(FAlignment <> Value) then begin
    Include(FAssignedValues, ppvAlignment);
    FAlignment := Value;
    Changed;
  end;
end;

procedure TAutoPanelPage.SetColor(Value : TColor);
begin
  if(FColor <> Value) then begin
    Include(FAssignedValues, ppvColor);
    FColor := Value;
    Changed;
  end;
end;

procedure TAutoPanelPage.SetControlLayout(Value : TAutoControlLayout);
begin
  if(ControlLayout <> Value) then begin
    Include(FAssignedValues, ppvControlLayout);
    FControlLayout := Value;
    Changed;
  end;
end;

procedure TAutoPanelPage.SetLabelLayout(Value : TAutoLabelLayout);
begin
  if(LabelLayout <> Value) then begin
    Include(FAssignedValues, ppvLabelLayout);
    FLabelLayout := Value;
    Changed;
  end;
end;


procedure TAutoPanelPage.SetControls(Value : TAutoPanelControls);
begin
  FControls.Assign(Value);
end;

procedure TAutoPanelPage.Assign(Source: TPersistent);
Var
  APage : TAutoPanelPage;
  OldAssignFlag : Boolean;
begin
  if(Source is TAutoPanelPage) then begin
    APage := Source as TAutoPanelPage;
    OldAssignFlag := PanelLayout.FAssignFlag;
    PanelLayout.FAssignFlag := True;
    FAssignedValues := APage.FAssignedValues;
    FAlignment := APage.Alignment;
    FCaption := APage.Caption;
    FColor := APage.Color;
    FControlLayout := APage.ControlLayout;
    FLabelLayout := APage.LabelLayout;    
    Controls.Assign(APage.Controls);
    PanelLayout.FAssignFlag := OldAssignFlag;
    if Not PanelLayout.FAssignFlag then
      PanelLayout.UpdateLayout(False);
  end else inherited Assign(Source);
end;

function TAutoPanelPage.IsAlignmentStored : Boolean;
begin
  Result := (ppvAlignment in FAssignedValues) And (FAlignment <> DefaultAlignment);
end;

function TAutoPanelPage.IsColorStored : Boolean;
begin
  Result := (ppvColor in FAssignedValues) And (FColor <> DefaultColor);
end;

function TAutoPanelPage.IsControlLayoutStored : Boolean;
begin
  Result := (ppvControlLayout in FAssignedValues) And (FControlLayout <> DefaultControlLayout);
end;

function TAutoPanelPage.IsLabelLayoutStored : Boolean;
begin
  Result := (ppvLabelLayout in FAssignedValues) And (FLabelLayout <> DefaultLabelLayout);
end;

procedure TAutoPanelPage.Changed;
begin
  //TODO
end;

procedure TAutoPanelPage.RestoreDefaults;
begin
  FAssignedValues := [];
  FAlignment := DefaultAlignment;  
  FColor := DefaultColor;
  Changed;
end;

function TAutoPanelPage.DefaultAlignment : TAlignment;
begin
  Result := taLeftJustify;
end;

function TAutoPanelPage.DefaultColor : TColor;
begin
  Result := clBtnFace;
end;

function TAutoPanelPage.DefaultControlLayout : TAutoControlLayout;
begin
  Result := PanelLayout.ControlLayout;
end;

function TAutoPanelPage.DefaultLabelLayout : TAutoLabelLayout;
begin
  Result := PanelLayout.LabelLayout;
end;

{TAutoPanelPages}
constructor TAutoPanelPages.Create(APanelLayout : TAutoPanelLayout);
begin
  inherited Create(TAutoPanelPage);
  FPanelLayout := APanelLayout;
  Add;
end;

destructor TAutoPanelPages.Destroy;
begin
  inherited Destroy;
end;

{$IFDEF DELPHI4}
function  TAutoPanelPages.GetOwner: TPersistent;
begin
  Result := PanelLayout;
end;
{$ENDIF}

function TAutoPanelPages.Add : TAutoPanelPage;
begin
  Result := TAutoPanelPage(inherited Add);
  PanelLayout.UpdateLayout(False);
end;

procedure TAutoPanelPages.Assign(Source: TPersistent);
Var
  APages : TAutoPanelPages;
  APage : TAutoPanelPage;
  i : Integer;
  OldAssignFlag : Boolean;
begin
  if(Source is TAutoPanelPages) then begin
    OldAssignFlag := PanelLayout.FAssignFlag;
    PanelLayout.FAssignFlag := True;
    APages := Source as TAutoPanelPages;
    Clear;
    for i := 0 to APages.Count - 1 do begin
      APage := Add;
      APage.Assign(APages[i]);
    end;
    PanelLayout.UpdateCustomizingFields;
    PanelLayout.FAssignFlag := OldAssignFlag;
    if Not PanelLayout.FAssignFlag then
      PanelLayout.UpdateLayout(False);
  end else inherited Assign(Source);
end;

function TAutoPanelPages.GetItem(Index : Integer) : TAutoPanelPage;
begin
  Result := TAutoPanelPage(inherited Items[Index]);
end;

function TAutoPanelPages.GetPanelOwner : TComponent;
begin
  Result := FPanelLayout.FOwner;
end;


procedure TAutoPanelPages.SetItem(Index : Integer; Value : TAutoPanelPage);
begin
  Items[Index].Assign(Value);
end;

{TAutoPanelField}
constructor TAutoPanelField.Create(Collection : TCollection);
begin
  inherited Create(Collection);

  FCaption := LoadStr(ACDB_PANELNEWFIELD);
  FControl := Nil;
  FCustomized := True;
  FFont := TFont.Create;
  FFont.Assign(DefaultFont);
  FFont.OnChange := FontChanged;
  RestoreDefaults;  
end;

destructor TAutoPanelField.Destroy;
begin
  if (FControl <> Nil) And (PanelLayout.Owner <> Nil)
  And Not (PanelLayout.IsDestroying)
  And Not (csDestroying in PanelLayout.Owner.ComponentState) then begin
    FControl.FPanelField := Nil;
    FControl.Free;
  end;
    
  FFont.Free;
  inherited Destroy;
end;

procedure TAutoPanelField.Assign(Source : TPersistent);
Var
  AField : TAutoPanelField;
  OldAssignFlag : Boolean;
begin
  if(Source is TAutoPanelField) then begin
    OldAssignFlag := PanelLayout.FAssignFlag;
    PanelLayout.FAssignFlag := True;
    AField := Source as TAutoPanelField;
    FField := AField.FField;
    FFieldName := AField.FFieldName;
    FColor := AField.FColor;
    AssignPanelFont(FFont, AField.FFont);
    FAlignment := AField.FAlignment;
    FReadonly := AField.FReadonly;
    FCaption := AField.FCaption;
    FAssignedValues := AField.FAssignedValues;
    FCustomized := AField.FCustomized;
    PanelLayout.FAssignFlag := OldAssignFlag;
    if Not PanelLayout.FAssignFlag then
      PanelLayout.UpdateLayout(False);
  end else inherited Assign(Source);
end;

procedure TAutoPanelField.FontChanged(Sender : TObject);
begin
  if(FControl <> Nil) then begin
    Include(FAssignedValues, pfvFont);
    PanelLayout.UpdateLayout(False);
  end;
end;

function  TAutoPanelField.DefaultAlignment : TAlignment;
begin
//  if Assigned(Field) then
//    Result := FField.Alignment
//  else
  Result := taLeftJustify;
end;

function  TAutoPanelField.DefaultCaption : String;
begin
  if Assigned(Field) then
    Result := FField.DisplayLabel
  else Result := FCaption;
end;

function  TAutoPanelField.DefaultColor : TColor;
begin
  Result := clBlack;
end;

function  TAutoPanelField.DefaultFont : TFont;
begin
  Result := PanelLayout.Font;
end;

function  TAutoPanelField.DefaultReadOnly : Boolean;
begin
  if Assigned(Field) then
    Result := FField.ReadOnly
  else Result := False;
end;

procedure TAutoPanelField.RestoreDefaults;
var
  FontAssigned: Boolean;
begin
  FontAssigned := pfvFont in FAssignedValues;
  FAssignedValues := [];
  RefreshDefaultFont;
  FAlignment := DefaultAlignment;
  FColor := DefaultColor;
  Changed(FontAssigned);
end;

function  TAutoPanelField.GetPanelLayout : TAutoPanelLayout;
begin
  Result := TAutoPanelFields(Collection).PanelLayout;
end;

procedure TAutoPanelField.RefreshDefaultFont;
begin
  if (pfvFont in FAssignedValues) then exit;
  AssignPanelFont(FFont, DefaultFont);
end;

function  TAutoPanelField.GetAlignment : TAlignment;
begin
  if pfvAlignment in FAssignedValues then
    Result := FAlignment
  else Result := DefaultAlignment;
end;

function  TAutoPanelField.GetCaption : String;
begin
  if pfvCaption in FAssignedValues then
    Result := FCaption
  else Result := DefaultCaption;
end;

function  TAutoPanelField.GetColor : TColor;
begin
  if pfvColor in FAssignedValues then
    Result := FColor
  else Result := DefaultColor;
end;

function  TAutoPanelField.GetField : TField;
begin
  if (((FField = Nil) And (Length(FFieldName) > 0))
  Or ((FField <> Nil) And (FField.FieldName <> FFieldName)))
  And Assigned(PanelLayout.FDataLink.DataSet) then
  with PanelLayout.FDatalink.Dataset do
    if Active Or (Not DefaultFields) then
      SetField(FindField(FieldName))
    else SetField(Nil);
  Result := FField;
end;

function  TAutoPanelField.GetFont : TFont;
begin
  if pfvFont in FAssignedValues then
    Result := FFont
  else Result := DefaultFont;
end;

function  TAutoPanelField.GetReadOnly : Boolean;
begin
  if pfvReadOnly in FAssignedValues then
    Result := FReadOnly
  else Result := DefaultReadOnly;
end;

function TAutoPanelField.GetDBDefControl : TAutoDBDefControl;
begin
  Result := adefctrl.GetDBDefControl(PanelLayout.Repository, Field);
end;

function  TAutoPanelField.IsAlignmentStored : Boolean;
begin
  Result := (pfvAlignment in FAssignedValues) And (FAlignment <> DefaultAlignment);
end;

function  TAutoPanelField.IsCaptionStored : Boolean;
begin
  Result := (pfvCaption in FAssignedValues) And (FCaption <> DefaultCaption);
end;

function  TAutoPanelField.IsColorStored : Boolean;
begin
  Result := (pfvColor in FAssignedValues) And (FColor <> DefaultColor);
end;

function  TAutoPanelField.IsFontStored : Boolean;
begin
  Result := (pfvFont in FAssignedValues) And (FFont <> DefaultFont);
end;

function  TAutoPanelField.IsReadOnlyStored : Boolean;
begin
  Result := (pfvReadOnly in FAssignedValues) And (FReadOnly <> DefaultReadOnly);
end;

procedure TAutoPanelField.SetAlignment(Value : TAlignment);
begin
  if (pfvAlignment in FAssignedValues) And (Value = FAlignment) then exit;
  FAlignment := Value;
  Include(FAssignedValues, pfvAlignment);
  Changed(False);
end;

procedure TAutoPanelField.SetCaption(Value : String);
begin
  if (pfvCaption in FAssignedValues) And (Value = FCaption) then exit;
  FCaption := Value;
  Include(FAssignedValues, pfvCaption);
  Changed(False);
end;

procedure TAutoPanelField.SetColor(Value : TColor);
begin
  if (pfvColor in FAssignedValues) And (Value = FColor) then exit;
  FColor := Value;
  Include(FAssignedValues, pfvColor);
  Changed(False);
end;

procedure TAutoPanelField.SetField(Value : TField);
begin
  if FField = Value then exit;
  FField := Value;
  if Assigned(Value) then begin
    FFieldName := Value.FieldName;
    FCaption := Value.DisplayLabel;    
  end;
  Changed(False);
end;

procedure TAutoPanelField.SetFieldName(const Value : String);
Var
  AField: TField;
begin
  AField := nil;
  if Assigned(PanelLayout.FDataLink.DataSet) And (Length(Value) > 0)
  And Not (csLoading in PanelLayout.FOwner.ComponentState) then
   AField := PanelLayout.FDataLink.DataSet.FindField(Value);
  FFieldName := Value;
  SetField(AField);
  Changed(False);
end;

procedure TAutoPanelField.SetFont(Value : TFont);
begin
  FFont.Assign(Value);
  Changed(False);
end;

procedure TAutoPanelField.SetReadOnly(Value : Boolean);
begin
  if (pfvReadOnly in FAssignedValues) And (Value = FReadOnly) then exit;
  FReadOnly := Value;
  Include(FAssignedValues, pfvReadOnly);
  Changed(False);
end;

{TAutoPanelFields}
constructor TAutoPanelFields.Create(APanelLayout : TAutoPanelLayout);

⌨️ 快捷键说明

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