diff options
Diffstat (limited to 'gui/db/fpgui_db.pas')
-rw-r--r-- | gui/db/fpgui_db.pas | 143 |
1 files changed, 138 insertions, 5 deletions
diff --git a/gui/db/fpgui_db.pas b/gui/db/fpgui_db.pas index c67bc3a2..0f4f03f9 100644 --- a/gui/db/fpgui_db.pas +++ b/gui/db/fpgui_db.pas @@ -30,29 +30,37 @@ uses type + { TFieldDataLink } + TFieldDataLink = class(TDataLink) private FWidget: TFWidget; FField: TField; - FFieldName: String; + FFieldName: string; FOnDataChange: TNotifyEvent; - procedure SetFieldName(const AFieldName: String); + function GetCanModify: Boolean; + procedure SetFieldName(const AFieldName: string); procedure UpdateField; protected procedure ActiveChanged; override; procedure RecordChanged(AField: TField); override; public constructor Create(AWidget: TFWidget); + property CanModify: Boolean read GetCanModify; property Field: TField read FField; - property FieldName: String read FFieldName write SetFieldName; + property FieldName: string read FFieldName write SetFieldName; + property Widget: TFWidget read FWidget write FWidget; property OnDataChange: TNotifyEvent read FOnDataChange write FOnDataChange; end; + { TDBText } + TDBText = class(TFCustomLabel) private FDataLink: TFieldDataLink; function GetDataField: String; + function GetField: TField; procedure SetDataField(const ADataField: String); function GetDataSource: TDataSource; procedure SetDataSource(ADataSource: TDataSource); @@ -60,6 +68,7 @@ type public constructor Create(AOwner: TComponent); override; destructor Destroy; override; + property Field: TField read GetField; published property Alignment default taLeftJustify; property CanExpandWidth; @@ -71,6 +80,37 @@ type end; + { TDBEdit } + + TDBEdit = class(TFCustomEdit) + private + FDataLink: TFieldDataLink; + function GetDataField: string; + function GetDataSource: TDataSource; + function GetField: TField; + function GetReadOnly: Boolean; + procedure SetDataField(const ADataField: string); + procedure SetDataSource(const ADataSource: TDataSource); + procedure DataChange(Sender: TObject); + procedure SetReadOnly(const AValue: Boolean); + protected + procedure EvKeyPressed(Key: Word; Shift: TShiftState); override; + procedure EvKeyChar(KeyChar: Char); override; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + property Field: TField read GetField; + published + property BorderStyle; + property CanExpandWidth; + property DataField: string read GetDataField write SetDataField; + property DataSource: TDataSource read GetDataSource write SetDataSource; + property Enabled; + property FontColor; + property Text; + property ReadOnly: Boolean read GetReadOnly write SetReadOnly default False; + end; + implementation @@ -94,7 +134,7 @@ begin OnDataChange(Self); end; -procedure TFieldDataLink.SetFieldName(const AFieldName: String); +procedure TFieldDataLink.SetFieldName(const AFieldName: string); begin if AFieldName <> FieldName then begin @@ -103,6 +143,11 @@ begin end; end; +function TFieldDataLink.GetCanModify: Boolean; +begin + Result := not ReadOnly and (Field <> nil) and Field.CanModify; +end; + procedure TFieldDataLink.UpdateField; begin {$IFDEF DEBUG} WriteLn('## UpdateField. DataSet: ', DataSource.DataSet.ClassName); {$ENDIF} @@ -132,6 +177,11 @@ begin Result := FDataLink.FieldName; end; +function TDBText.GetField: TField; +begin + Result := FDataLink.Field; +end; + procedure TDBText.SetDataField(const ADataField: String); begin FDataLink.FieldName := ADataField; @@ -149,7 +199,7 @@ end; procedure TDBText.DataChange(Sender: TObject); begin - {$IFDEF DEBUG} Write('TDBText.DataChange'); {$ENDIF} + {$IFDEF DEBUG} Write(Classname + '.DataChange'); {$ENDIF} if Assigned(FDataLink.Field) then begin Text := FDataLink.Field.DisplayText; @@ -162,5 +212,88 @@ begin end; end; + +{ TDBEdit } + +function TDBEdit.GetDataField: string; +begin + Result := FDataLink.FieldName; +end; + +function TDBEdit.GetDataSource: TDataSource; +begin + Result := FDataLink.DataSource; +end; + +function TDBEdit.GetField: TField; +begin + Result := FDataLink.Field; +end; + +function TDBEdit.GetReadOnly: Boolean; +begin + Result := inherited ReadOnly; +// Result := FDataLink.ReadOnly; { will add this in later } +end; + +procedure TDBEdit.SetDataField(const ADataField: string); +begin + FDataLink.FieldName := ADataField; +end; + +procedure TDBEdit.SetDataSource(const ADataSource: TDataSource); +begin + FDataLink.DataSource := ADataSource; +end; + +procedure TDBEdit.DataChange(Sender: TObject); +begin + {$IFDEF DEBUG} Write(Classname + '.DataChange'); {$ENDIF} + if Assigned(FDataLink.Field) then + begin + Text := FDataLink.Field.DisplayText; + {$IFDEF DEBUG} WriteLn(' new text: "', Text, '"'); {$ENDIF} + end + else + begin + Text := ''; + {$IFDEF DEBUG} WriteLn('DataLink has no data'); {$ENDIF} + end; +end; + +procedure TDBEdit.SetReadOnly(const AValue: Boolean); +begin + inherited ReadOnly := AValue; +// FDataLink.ReadOnly := AValue; { will add this in later } +end; + +procedure TDBEdit.EvKeyPressed(Key: Word; Shift: TShiftState); +begin +// if ReadOnly then +// Exit; //==> + inherited EvKeyPressed(Key, Shift); +end; + +procedure TDBEdit.EvKeyChar(KeyChar: Char); +begin + if ReadOnly then + Exit; //==> + inherited EvKeyChar(KeyChar); +end; + +constructor TDBEdit.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + inherited ReadOnly := True; + FDataLink := TFieldDataLink.Create(Self); + FDataLink.OnDataChange := @DataChange; +end; + +destructor TDBEdit.Destroy; +begin + FDataLink.Free; + inherited Destroy; +end; + end. |