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

📄 flatctrls.pas

📁 comerose_flatstyle_v4.42.9.0_d7.rar
💻 PAS
📖 第 1 页 / 共 5 页
字号:
     fLabel.FocusControl := self;
     fLabel.Font.Assign(Font);
  end;
  if (DefaultHasTicket)and(not Assigned(FTicket)) then
  begin
   FTicket := TFlatTicket.Create(self);
   FTicket.FreeNotification(Self);
   FTicket.AutoSize     := True;
   FTicket.Transparent  := True;
   FTicket.FocusControl := Self;
  end;
end;

constructor TDefineEdit.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  ControlStyle     := ControlStyle - [csFramed];
  ParentFont       := True;
  AutoSize         := False;
  Ctl3D            := False;
  BorderStyle      := bsNone;
  FFocusColor      := clWhite;
  FBorderColor     := DefaultBorderColor;
  FFlatColor       := DefaultFlatColor;
  FParentColor     := True; 
  FAlignment       := taLeftJustify;
  FTicketPosition  := poLeft;
  FTicketSpace     := 3;
  SetupInternalLabel;
end;

destructor TDefineEdit.Destroy;
begin
  if Assigned(fLabel) then
     fLabel.Free;
  if Assigned(FTicket) then
     FTicket.Free;
  inherited destroy;
end;

procedure TDefineEdit.RedrawBorder(const Clip: HRGN);
var
  Attrib:TBorderAttrib;
begin
  with Attrib do
  begin
   Ctrl        := self;
   FocusColor  := ColorFocused;
   BorderColor := ColorBorder;
   FlatColor   := ColorFlat;
   MouseState  := FMouseIn;
   FocusState  := Focused;
   DesignState := ComponentState;
   HasBars     := false;
  end;
  Color := DrawEditBorder(Attrib,Clip);
  if (not(csDesigning in ComponentState))and(Assigned(fLabel)) then
  begin
      if not Focused then
         fLabel.Visible := self.Text = ''
      else
         fLabel.Visible := False;
      if fLabel.Visible then
      begin
         fLabel.Font.Assign(self.Font);
         fLabel.Width   := self.Width;
         fLabel.Top     := (self.Height-fLabel.Height) div 2;
         fLabel.Left    := 0;
         fLabel.Caption := self.Hint;
      end;
  end;
end;

procedure TDefineEdit.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  with Params do begin
    Params.Style := Params.Style or ES_MULTILINE or Aligns[FAlignment];
  end;
end;

procedure TDefineEdit.KeyPress(var Key: Char);
begin
  inherited KeyPress(Key);
  if (Key = Char(VK_RETURN)) then
      Key := #0;
end;

procedure TDefineEdit.SetParentColor(Value: Boolean);
begin
  if Value <> FParentColor then
  begin
    FParentColor := Value;
    if FParentColor then
    begin
      if Parent <> nil then
         FFlatColor := TForm(Parent).Color;
      RedrawBorder(0);
    end;
  end;
end;     

procedure TDefineEdit.LabelMouseEnter(Sender: TObject);
begin
  if (not(csDesigning in ComponentState))and(Assigned(fLabel)) then begin
     fLabel.Visible := false;
     self.SetFocus;
  end;
end;

procedure TDefineEdit.SetTicketPosition(const Value: TTicketPosition);
begin
  if Assigned(FTicket) then
  begin
    FTicketPosition := Value;
    SetTicketPoint(Value,Self,Ticket,FTicketSpace);
  end;
end;

procedure TDefineEdit.SetTicketSpace(const Value: Integer);
begin
  if Assigned(FTicket) then
  begin
     FTicketSpace := Value;
     SetTicketPosition(FTicketPosition);
  end;
end;

procedure TDefineEdit.SetBounds(ALeft, ATop, AWidth, AHeight: Integer);
begin
  inherited SetBounds(ALeft, ATop, AWidth, AHeight);
  SetTicketPosition(FTicketPosition);
end;

procedure TDefineEdit.SetParent(AParent: TWinControl);
begin
  if Assigned(FTicket) then
  begin
     FTicket.Parent  := AParent;
     FTicket.Visible := Visible;
  end;
  inherited SetParent(AParent); 
end;

procedure TDefineEdit.CMBidimodechanged(var Message: TMessage);
begin
  inherited;
  if Assigned(FTicket) then FTicket.BiDiMode := BiDiMode;
end;

procedure TDefineEdit.CMVisiblechanged(var Message: TMessage);
begin
  inherited;
  if Assigned(FTicket) then FTicket.Visible := Visible;
end;

procedure TDefineEdit.SetName(const Value: TComponentName);
begin
  if Assigned(FTicket) then
  begin
   if (csDesigning in ComponentState) and ((FTicket.GetTextLen = 0) or
      (CompareText(FTicket.Caption, Name) = 0)) then
       FTicket.Caption := Value;
  end;
  inherited SetName(Value);
  if (csDesigning in ComponentState)and(Assigned(FTicket))and
    ((GetTextLen = 0)or(CompareText(Text, Name) = 0)) then
      Text := '';
end;

procedure TDefineEdit.Notification(AComponent: TComponent;
  Operation: TOperation);
begin
  inherited Notification(AComponent, Operation);
  if (AComponent = FTicket) and (Operation = opRemove) then
     FTicket := nil;
end;

procedure TDefineEdit.CMSysColorChange(var Message: TMessage);
begin
  if (Parent <> nil)and(FParentColor) then
      FFlatColor := TForm(Parent).Color;
  RedrawBorder(0);
end;

procedure TDefineEdit.CMParentColorChanged(var Message: TWMNoParams);
begin
  if (Parent <> nil)and(FParentColor) then
      FFlatColor := TForm(Parent).Color;
  RedrawBorder(0);
end;

procedure TDefineEdit.SetColors(Index: Integer; Value: TColor);
begin
  case Index of
    0: FFocusColor  := Value;
    1: FBorderColor := Value;
    2: begin
        FFlatColor   := Value;
        FParentColor := False;
       end;
  end;
  RedrawBorder(0);
end;

procedure TDefineEdit.CMMouseEnter(var Message: TMessage);
begin
  inherited;
  if (GetActiveWindow <> 0) then
  begin
    FMouseIn := True;
    RedrawBorder(0);
  end;
end;

procedure TDefineEdit.CMMouseLeave(var Message: TMessage);
begin
  inherited;
  FMouseIn := False;
  RedrawBorder(0);
end;

procedure TDefineEdit.NewAdjustHeight;
var
  DC: HDC;
  SaveFont: HFONT;
  Metrics: TTextMetric;
begin
  DC := GetDC(0);
  SaveFont := SelectObject(DC, Font.Handle);
  GetTextMetrics(DC, Metrics);
  SelectObject(DC, SaveFont);
  ReleaseDC(0, DC);
  Height := Metrics.tmHeight + 6;
end;

procedure TDefineEdit.Loaded;
begin
  inherited;
  if not(csDesigning in ComponentState) then
  begin
     NewAdjustHeight;
  end;
end;

procedure TDefineEdit.CMTextChanged(var Message: TMessage);
begin
  inherited;
  if not(csDesigning in ComponentState) and Assigned(fLabel) then
  begin
     if fLabel.Visible then
        fLabel.Visible := false;
     if (not fLabel.Visible) and (Text = '') then
        fLabel.Visible := True;
  end;
end;

procedure TDefineEdit.CMEnabledChanged(var Message: TMessage);
const
  EnableColors: array[Boolean] of TColor= (clBtnFace, clWindow);
begin
  inherited;
  Color := EnableColors[Enabled];
  if assigned(FTicket) then FTicket.Enabled := Enabled;
  if (not(csDesigning in ComponentState))and(assigned(fLabel)) then
     fLabel.Enabled  := Enabled;
  RedrawBorder(0);
end;

procedure TDefineEdit.CMFontChanged(var Message: TMessage);
begin
  inherited;
  if not((csDesigning in ComponentState) and (csLoading in ComponentState)) then
    NewAdjustHeight;
  if (not(csDesigning in ComponentState))and(assigned(fLabel)) then
    fLabel.Font.Assign(Font);
end;

procedure TDefineEdit.WMSetFocus(var Message: TWMSetFocus);
begin
  inherited;
  if not(csDesigning in ComponentState) then
  begin
    RedrawBorder(0);
    SelectAll;
  end;
end;

procedure TDefineEdit.WMKillFocus(var Message: TWMKillFocus);
begin
  inherited;
  if not(csDesigning in ComponentState) then
    RedrawBorder(0);
end;

procedure TDefineEdit.WMNCCalcSize(var Message: TWMNCCalcSize);
begin
  inherited;
  InflateRect(Message.CalcSize_Params^.rgrc[0], -3, -3);
end;

procedure TDefineEdit.WMNCPaint(var Message: TMessage);
begin
  inherited;
  RedrawBorder(HRGN(Message.WParam));
end;

procedure TDefineEdit.SetAlignment(const Value: TAlignment);
begin
  If FAlignment <> Value Then
  begin
    FAlignment := Value;
    RecreateWnd;
  end;
end;

{ TFlatInteger }

constructor TFlatInteger.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  ControlStyle := ControlStyle - [csSetCaption];
  FButton := TDefineSpin.Create(Self);
  FButton.Parent       := Self;
  FButton.Width        := 32;
  FButton.Height       := 10;
  FButton.Visible      := True;
  FButton.FocusControl := Self;
  FButton.OnUpClick    := UpClick;
  FButton.OnDownClick  := DownClick;
  Text                 := '0';
  FIncrement           := 1;
  FMaxValue            := 0;
  FMinValue            := 0;
  FEditorEnabled       := True;
end;

destructor TFlatInteger.Destroy;
begin
  FButton := nil;
  inherited Destroy;
end;

procedure TFlatInteger.UpClick (Sender: TObject);
begin
  if ReadOnly then
     MessageBeep(0)
  else
     Value := Value + FIncrement;
end;

procedure TFlatInteger.DownClick (Sender: TObject);
begin
  if ReadOnly then
     MessageBeep(0)
  else
     Value := Value - FIncrement;
end;

procedure TFlatInteger.KeyDown(var Key: Word; Shift: TShiftState);
begin
  case Key of
    VK_UP:   UpClick(Self);
    VK_DOWN: DownClick(Self);
  end;
  inherited KeyDown(Key, Shift);
end;

function TFlatInteger.IsValidChar(Key: Char): Boolean;
begin
  Result := (Key in ['0'..'9',#8,#13]);
  if not FEditorEnabled and Result then
    Result := False;
end;

procedure TFlatInteger.KeyPress(var Key: Char);
begin
  if not IsValidChar(Key) then begin
    Key := #0;
    MessageBeep(0)
  end;
  if Key <> #0 then
  inherited KeyPress(Key);
end;

procedure TFlatInteger.WMSize(var Message: TWMSize);
var
  MinHeight: Integer;
begin
  inherited;
  MinHeight := GetMinHeight;
  if Height < MinHeight then
     Height := MinHeight
  else
    if FButton <> nil then
    begin
      FButton.SetBounds(Width - FButton.Width - 5, 0, FButton.Width, Height - 6);
      SetEditRect(Handle, Clientwidth, ClientHeight, FButton.Width);
    end;
end;

function TFlatInteger.GetMinHeight: Integer;
var
  DC: HDC;
  SaveFont: HFont;
  SysMetrics, Metrics: TTextMetric;
begin
  DC := GetDC(0);
  GetTextMetrics(DC, SysMetrics);
  SaveFont := SelectObject(DC, Font.Handle);
  GetTextMetrics(DC, Metrics);
  SelectObject(DC, SaveFont);
  Result := Metrics.tmHeight + 7;
  ReleaseDC(0, DC);
end;

function TFlatInteger.CheckValue(NewValue: LongInt): LongInt;
begin
  Result := NewValue;
  if (FMaxValue <> FMinValue) then
  begin
    if NewValue < FMinValue then
       Result := FMinValue
    else

⌨️ 快捷键说明

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