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

📄 wwdbedit.pas

📁 胜天进销存源码,国产优秀的进销存
💻 PAS
📖 第 1 页 / 共 5 页
字号:
  end
  else Result:= True;
end;

procedure TwwDBCustomEdit.Reset;
begin
  if FDataLink.Field<>Nil then begin
     FDataLink.Reset;
  end
  else
     Text:= StartValue;
  SelectAll;
  SetModified(False);
  DoRefreshValidationDisplay;
end;

procedure TwwDBCustomEdit.SetFocused(Value: Boolean);
begin
  if FFocused <> Value then
  begin
    FFocused := Value;
    if (GetEffectiveAlignment <> taLeftJustify) and not IsMasked then Invalidate;
    if FDataLink.Field<>Nil then begin
       FDataLink.Reset;
    end
    else if Focused then
       StartValue:= Text;  { For unbound case }
  end;
end;

procedure TwwDBCustomEdit.Change;
begin
  if not (csLoading in ComponentState) then
  begin
    if (DataLink<>Nil) and (DataLink.Field=Nil) then SetModified(True);  {1/21/97 - Only set if unbound }
    if SetModifiedInChangeEvent then Modified:= True;

    // 1/13/03 - Recognize text assignments and go into edit mode
    if (DataLink<>Nil) and (FDataLink.Field<>nil) and
       (DataSource.state in [dsEdit, dsInsert]) then
    begin
        SetModified(True);
    end
  end;
  inherited Change;
end;

function TwwDBCustomEdit.GetDataSource: TDataSource;
begin
  if (FDataLink<>Nil) and (FDataLink.DataSource is TDataSource) then begin
     Result := FDataLink.DataSource as TDataSource
  end
  else Result:= Nil;
end;

procedure TwwDBCustomEdit.SetDataSource(Value: TDataSource);
begin
  if (Value<>FDataLink.DataSource) and (Value<>nil) then
     inherited ReadOnly:= True; { 7/8/98 - Uncomment with further testing or IP 5}
  FDataLink.DataSource := Value;
end;

function TwwDBCustomEdit.GetDataField: string;
begin
  Result := FDataLink.FieldName;
end;

procedure TwwDBCustomEdit.SetDataField(const Value: string);
begin
  if not (csDesigning in ComponentState) then
    ResetMaxLength(Self);
  FDataLink.FieldName := Value;
end;

function TwwDBCustomEdit.GetReadOnly: Boolean;
begin
  Result := FDataLink.ReadOnly;
end;

procedure TwwDBCustomEdit.SetReadOnly(Value: Boolean);
begin
  FDataLink.ReadOnly := Value;
  if ((Value=False) or (FDataLink.DataSet=nil)) and not (csLoading in ComponentState) then
     inherited ReadOnly := Value;
end;

function TwwDBCustomEdit.GetField: TField;
begin
  Result := FDataLink.Field;
end;

procedure TwwDBCustomEdit.DataChange(Sender: TObject);
begin
  if FDataLink.Field <> nil then
  begin
    if FAlignment <> FDataLink.Field.Alignment then
    begin
      EditText := '';  {forces update}
      FAlignment := FDataLink.Field.Alignment;
    end;
    if not HavePictureMask then EditMask:= FDataLink.Field.EditMask;

    { 12/24/97 - Retrieve maxlength from field }
    if not (csDesigning in ComponentState) then
    begin
      if (FDataLink.Field.DataType in [ftString,ftWideString]) and (MaxLength = 0) then
        MaxLength := FDataLink.Field.Size;
    end;

    if (FFocused or isMemoField) and FDataLink.CanModify then
    begin
      {$ifdef win32}
      if isMemoField then  { 12/20/96 - Retrieve memo field contents }
         Text := FDataLink.Field.asString
      else
      {$endif}
         Text := FDataLink.Field.Text
    end
    else begin
      if isMemoField then { 1/10/2000 Readonly memo fields not displaying }
         Text := FDataLink.Field.asString
      else EditText := FDataLink.Field.DisplayText;
    end
  end else
  begin
    FAlignment := taLeftJustify;
    EditMask := '';
    if csDesigning in ComponentState then
      EditText := Name else
      EditText := '';
  end;

end;

procedure TwwDBCustomEdit.EditingChange(Sender: TObject);
begin
  inherited ReadOnly := not FDataLink.Editing;
end;

procedure TwwDBCustomEdit.UpdateData(Sender: TObject);
var FOnInvalidValue: TwwInvalidValueEvent;
    NewDate, NewTime: TDateTime;
    TempEpochYear: integer;
    FloatValue: Extended;
begin
  if inherited ReadOnly then exit;

  { 9/14/99 - Don't refer to ValidateWithMask flag here as that flag
    should only be used when positing.  Also use check Text value intead
    of internally stored value. }
  if (regexmask.mask<>'') then
  begin
     if not RegexMatch(regexmask.mask, not regexmask.CaseSensitive, Text) then
     begin
       ValidationErrorUsingMask(regexMask.ErrorMessage);
       //ValidationErrorUsingMask(FDatalink.Field)
     end;
  end
  else if (FwwPicture.PictureMask<>'') then
  begin

    if not isValidPictureValue(Text) then begin
       DoRefreshValidationDisplay(false);
//       DoOnCheckValue(false);
       FOnInvalidValue := wwGetOnInvalidValue(FDataLink.DataSet);
       if Assigned(FOnInvalidValue) then
       begin
          FOnInvalidValue(FDataLink.DataSet, FDataLink.Field)
       end
       else ValidationErrorUsingMask('')
//       else ValidationErrorUsingMask(FDatalink.Field)
    end
    else
       DoRefreshValidationDisplay(true);//      DoOnCheckValue(true);
  end
  else begin
     if not JustHaveLiteralTemplate then ValidateEdit;
  end;

  if modified then begin
     if isMemoField then
        FDataLink.Field.asString := GetStoredText  { 12/20/96 - Save to memo field }
     else if FDataLink.editing or wwisNonPhysicalField(FDataLink.Field) then {7/4/97}
     begin
        if GetStoredText='' then
           FDataLink.Field.Text:= GetStoredText
        else if (FDataLink.Field is TDateTimeField) and
                 wwStrToDate(GetStoredText) then { 9/2/98 - Call wwStrToDate instead }
        begin
           { 12/16/98 -
             Uses 1950 as Epoch Date for 2 digt years, Only for Delphi 4 so-as to
             preserve backward package compatibility.  }
           {$ifdef wwDelphi4Up}
           if FEpochYear=0 then TempEpochYear:= 1950
           else TempEpochYear:= EpochYear;
           if wwScanDateEpoch(GetStoredText, NewDate, TempEpochYear) then
           {$else}
           if wwScanDate(GetStoredText, NewDate) then
           {$endif}
           begin
              NewTime:= Frac(StrToDateTime(GetStoredText));
              TDateTimeField(FDataLink.Field).asDateTime:= NewDate + NewTime;
           end
        end
        else begin
           if JustHaveLiteralTemplate then
             FDataLink.Field.Clear //Text := ''
           else if (FDataLink.Field is TNumericField) and (GetDisplayFormat<>'') then
//           (TNumericField(FDataLink.Field).DisplayFormat<>'') then
           begin
              if wwStrToFloat2(Text, FloatValue, GetDisplayFormat) then
              begin
                 if (FDataLink.Field is TFloatField) or
                   {$ifdef wwDelphi6Up}
                   (FDataLink.Field is TFmtBCDField) or
                   {$endif}
                    (FDataLink.Field is TBCDField) then
                    FDataLink.Field.asFloat:= FloatValue
                 else begin
                    FDataLink.Field.asInteger:= Round(FloatValue)
                 end
              end
           end
           else
             FDataLink.Field.Text := GetStoredText;  {3/12/97- Only update if edit mode}
        end
     end
  end
end;

Function TwwDBCustomEdit.GetStoredText: string;
begin
   result:= Text;
end;

{ Return displaytext for field - Used by TwwDBGrid}
Function TwwDBCustomEdit.GetFieldMapText(StoreValue: string; var res: string): boolean;
begin
   result:= False;
end;

procedure TwwDBCustomEdit.WMPaste(var Message: TMessage);
var prevText: string;
    prevSelStart: integer;
    sClpBrd:       String;
    iPos:          Integer;
    ClipBoardTextAdjusted: boolean;
begin
  PrevText:= Text;
  PrevSelStart:= selStart;   { 11/26/96 - save previous selStart for use later }
  if (DataSource=nil) then begin  {9/11/96 }
     if not ReadOnly then ReadOnly:= False
     else exit;
  end;

  if PreventEdit then exit;

  // 2003-03-25 -
  // When carriage return is present in the clipboard with borderstyle=bsnone, the control cannot
  // paste.  So we instead paste up to the first carriage return.  If WordWrap is enabled
  // it will work so don't do workaround code in this case
  ClipboardTextAdjusted:= False;
  if (BorderStyle = bsNone) and (not WordWrap) and (PasswordChar = #0) then
  begin
    Clipboard.Open;
    try
      sClpBrd := Clipboard.AsText;
      iPos := Pos(#13, Clipboard.AsText);
      if iPos > 0 then
      begin
        Clipboard.AsText := Copy(Clipboard.AsText, 1, iPos-1);
        ClipboardTextAdjusted:= True;
      end;
    finally
      Clipboard.Close;
    end
  end;

  EnableEdit;
  inherited;
  SetModified(True);

  // 2003-03-25
  if ClipBoardTextAdjusted then
    if Clipboard.AsText <> sClpBrd then Clipboard.AsText := sClpBrd;

  { 9/11/96 }
  ApplyMask;
  { Incorrect Kludge - Override Delphi strange behavior of not moving selStart if previous selStart=0}
  if (selStart=0) then selStart:= prevSelStart + length(Text) - length(PrevText);

  DoRefreshValidationDisplay;
end;

{ 5/18/00 - Need to save changes in undo mode }
procedure TWWDBCustomEdit.WMUndo(var Message: TMessage);
begin
  if PreventEdit then exit;
  EnableEdit;
  inherited;
  SetModified(True);
end;

procedure TwwDBCustomEdit.WMCut(var Message: TMessage);
begin
  if PreventEdit then exit;
  EnableEdit;
  inherited;
  SetModified(True);
  DoRefreshValidationDisplay;
end;

procedure TwwDBCustomEdit.CMEnter(var Message: TCMEnter);
var exStyle, origStyle: longint;
//    r: TRect;
begin
  SetEditRect;
  SetFocused(True);
  if AutoSelect and not (csLButtonDown in ControlState) then
  begin
     SelectAll;
  end;
  inherited;
  if not Editable then Invalidate;
  if IsTransparentEffective then begin
     Frame.CreateTransparent:= False;
     OrigStyle:= Windows.GetWindowLong(handle, GWL_EXSTYLE);
     exStyle:= OrigStyle and not WS_EX_TRANSPARENT;
     Windows.SetWindowLong(handle, GWL_EXSTYLE, exStyle);
     invalidate;
  end;
  if Frame.enabled then invalidate; { See if this causes any flicker }
end;

procedure TwwDBCustomEdit.UpdateRecord;
var lastModified: boolean;
begin
  lastModified:= modified;
  try
    FDataLink.UpdateRecord;
  except
    SelectAll;
    SetFocus;
    modified:= lastModified;
    raise;
  end;
end;

procedure TwwDBCustomEdit.SetUnboundValue(Value: Double);
begin
  if (FDataLink.Field =nil) and (GetDisplayFormat<>'') then
  begin
     Text := FormatFloat(GetDisplayFormat, Value);
  end;
end;

function TwwDBCustomEdit.GetUnboundValue: Double;
var FloatValue: Extended;
begin
  result:= 0;
  if (FDataLink.Field =nil) and (GetDisplayFormat<>'') then
  begin
      if wwStrToFloat2(Text, FloatValue, GetDisplayFormat) then
      begin
         result:= FloatValue;
      end
  end;
end;

procedure TwwDBCustomEdit.CMExit(var Message: TCMExit);
var
  FloatValue: Extended;
begin
  UpdateRecord;
  DoExit;
  if not DoExitPictureError then begin
     SetFocused(False);  { Only call SetFocused(False) if no validation error }
     SetCursor(0);
  end;

  // 5/7/03
  if (FDataLink.Field =nil) and (GetDisplayFormat<>'') then
  begin
      if wwStrToFloat2(Text, FloatValue, GetDisplayFormat) then
      begin
         Text := FormatFloat(GetDisplayFormat, FloatValue);
      end
  end;

  if not Editable then Invalidate;
  if IsTransparentEffective then begin
     Frame.CreateTransparent:= True;
     RecreateWnd;
  end;

  if Frame.enabled then begin
     invalidate; { See if this causes any flicker }
     wwInvalidateTransparentArea(self, 

⌨️ 快捷键说明

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