📄 be_controls.pas
字号:
end;
procedure TbeFillColorBox.Change;
begin
inherited;
if (FEditor <> nil) and (FEditor.FocusedBlock <> nil) then
begin
FEditor.FocusedBlock.Fill.Color := ColorValue;
FEditor.FocusedBlock.Repaint;
end;
end;
procedure TbeFillColorBox.DoChangeFocus(Sender: TObject);
begin
inherited;
if (FEditor <> nil) and (FEditor.FocusedBlock <> nil) then
begin
ColorValue := FEditor.FocusedBlock.Fill.Color;
end;
end;
procedure TbeFillColorBox.RebuildList;
const
ColorCount = 7;
HueCount = 10;
var
r, g, b: integer;
h, l: integer;
C: TColor;
begin
inherited;
Items.Clear;
{ Gray }
for r := 0 to ColorCount do
Items.Add(IntToStr(RGB(Round((r / ColorCount) * $FF), Round((r / ColorCount) * $FF), Round((r / ColorCount) * $FF))));
{ HSL ----}
for h := 0 to HueCount do // hue
for l := 0 to ColorCount do // lum
begin
Items.Add(IntToStr(HSLtoRGB(h / (HueCount + 1), 0.5, (l + 1) / (ColorCount + 2))));
end;
end;
procedure TbeFillColorBox.DrawItem(Index: Integer; Rect: TRect;
State: TOwnerDrawState);
var
G: TGPGraphics;
P: TGPPen;
begin
with Canvas do
begin
if odFocused in State then
begin
Brush.Color := clHighlight;
FillRect(Rect);
Brush.Color := clWhite;
end
else
begin
Brush.Color := Color;
FillRect(Rect);
Brush.Color := clBlack;
end;
Brush.Color := StringToColor(Items[Index]);
InflateRect(Rect, -2, -2);
FillRect(Rect);
if odFocused in State then
DrawRect(Canvas, Rect, clHighlightText)
else
DrawRect(Canvas, Rect, clWindowText)
end;
end;
function TbeFillColorBox.GetColor: ColorType;
begin
if ItemIndex >= 0 then
Result := $FF000000 or FromRGB(ColorToRGB(StringToColor(Items[ItemIndex])))
else
Result := $FF000000;
end;
function TbeFillColorBox.GetRandomColor: ColorType;
begin
Result := $FF000000 or FromRGB(ColorToRGB(StringToColor(Items[random(16)])))
end;
procedure TbeFillColorBox.SetColor(const Value: ColorType);
begin
ItemIndex := Items.IndexOf(ColorToString(ToRGB(Value) and not $FF000000));
end;
{ TbeFillAlphaBox =========================================================}
constructor TbeFillAlphaBox.Create(AOwner: TComponent);
begin
inherited;
end;
destructor TbeFillAlphaBox.Destroy;
begin
inherited;
end;
procedure TbeFillAlphaBox.Change;
begin
inherited;
if (FEditor <> nil) and (FEditor.FocusedBlock <> nil) then
begin
FEditor.FocusedBlock.Fill.Color := (FEditor.FocusedBlock.Fill.Color and not $FF000000) or (Alpha shl 24);
FEditor.FocusedBlock.Repaint;
end;
end;
procedure TbeFillAlphaBox.RebuildList;
begin
inherited;
Items.Add('100');
Items.Add('90');
Items.Add('80');
Items.Add('70');
Items.Add('60');
Items.Add('50');
Items.Add('40');
Items.Add('30');
Items.Add('20');
Items.Add('10');
Items.Add('0');
end;
procedure TbeFillAlphaBox.DrawItem(Index: Integer; Rect: TRect;
State: TOwnerDrawState);
var
G: TGPGraphics;
P: TGPPen;
B: TGPBrush;
R: TRect;
begin
with Canvas do
begin
if odFocused in State then
begin
Brush.Color := clHighlight;
FillRect(Rect);
Brush.Color := clWhite;
end
else
begin
Brush.Color := Color;
FillRect(Rect);
Brush.Color := clBlack;
end;
{ Draw Fill alhpa selection }
G := TGPGraphics.Create(Canvas.Handle, 0, 0);
try
G.SetPageUnit(UnitPixel);
P := TGPPen.Create(aclBlack, 1);
B := TGPSolidBrush.Create($0 or (Round((StrToInt(Items[Index]) / 100) * $FF) shl 24));
R := Rect;
InflateRect(R, -2, -2);
R.Right := R.Left + 30;
with R do
begin
G.FillRectangle(B, Left, Top, Right - Left, Bottom - Top);
G.DrawRectangle(P, Left, Top, Right - Left, Bottom - Top);
end;
P.Free;
if (odSelected in State) or (odFocused in State) then
Canvas.Font.Color := clHighlightText
else
Canvas.Font.Color := clWindowText;
InflateRect(Rect, -4, -2);
Rect.Left := 40;
DrawText(Canvas, Items[Index] + '%', Rect, DT_SINGLELINE or DT_VCENTER);
finally
G.Free;
end;
end;
end;
function TbeFillAlphaBox.GetAlpha: byte;
begin
if ItemIndex >= 0 then
Result := Round((StrToInt(Items[ItemIndex]) / 100) * $FF)
else
Result := $FF;
end;
procedure TbeFillAlphaBox.SetAlpha(const Value: byte);
begin
ItemIndex := Round((($FF - Value) / $FF) * 10);
end;
{ TbeFillStyleBox =========================================================}
constructor TbeFillStyleBox.Create(AOwner: TComponent);
begin
inherited;
end;
destructor TbeFillStyleBox.Destroy;
begin
inherited;
end;
procedure TbeFillStyleBox.Change;
begin
inherited;
if (FEditor <> nil) and (FEditor.FocusedBlock <> nil) then
begin
FEditor.FocusedBlock.Fill.Style := GetStyle;
FEditor.FocusedBlock.Fill.Pattern := GetPattern;
FEditor.FocusedBlock.Fill.GradientAngle := GetGradientAngle;
FEditor.FocusedBlock.Repaint;
end;
end;
procedure TbeFillStyleBox.DoChangeFocus(Sender: TObject);
begin
inherited;
if (FEditor <> nil) and (FEditor.FocusedBlock <> nil) then
begin
GradientAngle := FEditor.FocusedBlock.Fill.GradientAngle;
Pattern := FEditor.FocusedBlock.Fill.Pattern;
Style := FEditor.FocusedBlock.Fill.Style;
end;
end;
procedure TbeFillStyleBox.RebuildList;
begin
inherited;
Items.Add(' None');
Items.Add(' Solid');
Items.Add(' FillPatternHorizontal, // = 0,');
Items.Add(' FillPatternVertical, // = 1,');
Items.Add(' FillPatternForwardDiagonal, ');// = 2,
Items.Add(' FillPatternBackwardDiagonal, ');// = 3,
Items.Add(' FillPatternCross, ');// = 4,
Items.Add(' FillPatternDiagonalCross, ');// = 5,
Items.Add(' FillPattern05Percent, ');// = 6,
Items.Add(' FillPattern10Percent, ');// = 7,
Items.Add(' FillPattern20Percent, ');// = 8,
Items.Add(' FillPattern25Percent, ');// = 9,
Items.Add('FillPattern30Percent, ');// = 10,
Items.Add('FillPattern40Percent, ');// = 11,
Items.Add('FillPattern50Percent, ');// = 12,
Items.Add('FillPattern60Percent, ');// = 13,
Items.Add('FillPattern70Percent, ');// = 14,
Items.Add('FillPattern75Percent, ');// = 15,
Items.Add('FillPattern80Percent, ');// = 16,
Items.Add('FillPattern90Percent, ');// = 17,
Items.Add('FillPatternLightDownwardDiagonal, ');// = 18,
Items.Add('FillPatternLightUpwardDiagonal, ');// = 19,
Items.Add('FillPatternDarkDownwardDiagonal, ');// = 20,
Items.Add('FillPatternDarkUpwardDiagonal, ');// = 21,
Items.Add('FillPatternWideDownwardDiagonal, ');// = 22,
Items.Add('FillPatternWideUpwardDiagonal, ');// = 23,
Items.Add('FillPatternLightVertical, ');// = 24,
Items.Add('FillPatternLightHorizontal, ');// = 25,
Items.Add('FillPatternNarrowVertical, ');// = 26,
Items.Add('FillPatternNarrowHorizontal, ');// = 27,
Items.Add('FillPatternDarkVertical, ');// = 28,
Items.Add('FillPatternDarkHorizontal, ');// = 29,
Items.Add('FillPatternDashedDownwardDiagonal, ');// = 30,
Items.Add('FillPatternDashedUpwardDiagonal, ');// = 31,
Items.Add('FillPatternDashedHorizontal, ');// = 32,
Items.Add('FillPatternDashedVertical, ');// = 33,
Items.Add('FillPatternSmallConfetti, ');// = 34,
Items.Add('FillPatternLargeConfetti, ');// = 35,
Items.Add('FillPatternZigZag, ');// = 36,
Items.Add('FillPatternWave, ');// = 37,
Items.Add('FillPatternDiagonalBrick, ');// = 38,
Items.Add('FillPatternHorizontalBrick, ');// = 39,
Items.Add('FillPatternWeave, ');// = 40,
Items.Add('FillPatternPlaid, ');// = 41,
Items.Add('FillPatternDivot, ');// = 42,
Items.Add('FillPatternDottedGrid, ');// = 43,
Items.Add('FillPatternDottedDiamond, ');// = 44,
Items.Add('FillPatternShingle, ');// = 45,
Items.Add('FillPatternTrellis, ');// = 46,
Items.Add('FillPatternSphere, ');// = 47,
Items.Add('FillPatternSmallGrid, ');// = 48,
Items.Add('FillPatternSmallCheckerBoard, ');// = 49,
Items.Add('FillPatternLargeCheckerBoard, ');// = 50,
Items.Add('FillPatternOutlinedDiamond, ');// = 51,
Items.Add('FillPatternSolidDiamond ');// = 52,
Items.Add('FillLinearGradientHorz');
Items.Add('FillLinearGradientVert');
Items.Add('FillLinearGradient45');
Items.Add('FillLinearGradient225');
end;
procedure TbeFillStyleBox.DrawItem(Index: Integer; Rect: TRect;
State: TOwnerDrawState);
var
G: TGPGraphics;
B: TGPBrush;
begin
with Canvas do
begin
if odFocused in State then
begin
Brush.Color := clHighlight;
FillRect(Rect);
Brush.Color := clWhite;
end
else
begin
Brush.Color := Color;
FillRect(Rect);
Brush.Color := clBlack;
end;
end;
G := TGPGraphics.Create(Canvas.Handle, 0, 0);
try
if odFocused in State then
begin
case Index of
0: B := TGPSolidBrush.Create(0);
1: B := TGPSolidBrush.Create(aclWhite);
2..54: B := TGPHatchBrush.Create(THatchStyle(Index - 1), aclBlack, aclWhite);
55: B := TGPLinearGradientBrush.Create(MakeRect(Rect.Left, Rect.Top, Rect.Right - Rect.Left, Rect.Bottom - Rect.Top),
aclBlack, aclWhite, 0);
56: B := TGPLinearGradientBrush.Create(MakeRect(Rect.Left, Rect.Top, Rect.Right - Rect.Left, Rect.Bottom - Rect.Top),
aclBlack, aclWhite, 90);
57: B := TGPLinearGradientBrush.Create(MakeRect(Rect.Left, Rect.Top, Rect.Right - Rect.Left, Rect.Bottom - Rect.Top),
aclBlack, aclWhite, 45);
58: B := TGPLinearGradientBrush.Create(MakeRect(Rect.Left, Rect.Top, Rect.Right - Rect.Left, Rect.Bottom - Rect.Top),
aclBlack, aclWhite, 135);
else
end;
end
else
begin
case Index of
0: B := TGPSolidBrush.Create(0);
1: B := TGPSolidBrush.Create(aclBlack);
2..54: B := TGPHatchBrush.Create(THatchStyle(Index - 1), aclWhite, aclBlack);
55: B := TGPLinearGradientBrush.Create(MakeRect(Rect.Left, Rect.Top, Rect.Right - Rect.Left, Rect.Bottom - Rect.Top),
aclBlack, aclWhite, 0);
56: B := TGPLinearGradientBrush.Create(MakeRect(Rect.Left, Rect.Top, Rect.Right - Rect.Left, Rect.Bottom - Rect.Top),
aclBlack, aclWhite, 90);
57: B := TGPLinearGradientBrush.Create(MakeRect(Rect.Left, Rect.Top, Rect.Right - Rect.Left, Rect.Bottom - Rect.Top),
aclBlack, aclWhite, 45);
58: B := TGPLinearGradientBrush.Create(MakeRect(Rect.Left, Rect.Top, Rect.Right - Rect.Left, Rect.Bottom - Rect.Top),
aclBlack, aclWhite, 135);
else
B := TGPSolidBrush.Create(aclBlack);
end;
end;
G.FillRectangle(B, Rect.Left + 2, Rect.Top + 2, Rect.Right - Rect.Left - 4, Rect.Bottom - Rect.Top - 4);
B.Free;
finally
G.Free;
end;
end;
function TbeFillStyleBox.GetStyle: FillStyleType;
begin
case ItemIndex of
0: Result := FillNone;
1: Result := FillSolid;
2..54: Result := FillPattern;
55: Result := FillLinearGradient;
56: Result := FillLinearGradient;
57: Result := FillLinearGradient;
58: Result := FillLinearGradient;
else
Result := FillSolid;
end;
end;
procedure TbeFillStyleBox.SetStyle(const Value: FillStyleType);
begin
case Value of
FillNone: ItemIndex := 0;
FillSolid: ItemIndex := 1;
FillPattern: ItemIndex := 1 + Integer(Pattern);
FillLinearGradient: ItemIndex := 55;
end;
end;
function TbeFillStyleBox.GetPattern: FillPatternType;
begin
if (ItemIndex >= 2) and (ItemIndex <= 54) then
Result := FillPatternType(ItemIndex - 1)
else
Result := FillPatternHorizontal;
end;
procedure TbeFillStyleBox.SetPattern(const Value: FillPatternType);
begin
ItemIndex := Integer(Value) + 1;
end;
function TbeFillStyleBox.GetGradientAngle: single;
begin
case ItemIndex of
55: Result := 0;
56: Result := 90;
57: Result := 45;
58: Result := 135;
else
Result := 0;
end;
end;
procedure TbeFillStyleBox.SetGradientAngle(const Value: single);
begin
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -