📄 advofficetabset.pas
字号:
endb := startb + Round(rstepb * i);
stepw := Round(i * rstepw);
Pen.Color := endr + (endg shl 8) + (endb shl 16);
Brush.Color := Pen.Color;
if Direction then
Rectangle(R.Left + stepw, R.Top, R.Left + stepw + Round(rstepw) + 1, R.Bottom)
else
Rectangle(R.Left, R.Top + stepw, R.Right, R.Top + stepw + Round(rstepw) + 1);
end;
end;
end;
//------------------------------------------------------------------------------
function BlendColor(Col1,Col2:TColor; BlendFactor:Integer): TColor;
var
r1,g1,b1: Integer;
r2,g2,b2: Integer;
begin
if BlendFactor >= 100 then
begin
Result := Col1;
Exit;
end;
if BlendFactor <= 0 then
begin
Result := Col2;
Exit;
end;
Col1 := Longint(ColorToRGB(Col1));
r1 := GetRValue(Col1);
g1 := GetGValue(Col1);
b1 := GetBValue(Col1);
Col2 := Longint(ColorToRGB(Col2));
r2 := GetRValue(Col2);
g2 := GetGValue(Col2);
b2 := GetBValue(Col2);
r1 := Round( BlendFactor/100 * r1 + (1 - BlendFactor/100) * r2);
g1 := Round( BlendFactor/100 * g1 + (1 - BlendFactor/100) * g2);
b1 := Round( BlendFactor/100 * b1 + (1 - BlendFactor/100) * b2);
Result := RGB(r1,g1,b1);
end;
//------------------------------------------------------------------------------
procedure DrawRoundRect(graphics: TGPGraphics; Pen: TGPPen; X,Y,Width,Height,Radius: integer);
var
path:TGPGraphicsPath;
begin
path := TGPGraphicsPath.Create;
path.AddLine(X + radius, Y, X + width - (radius*2), Y);
path.AddArc(X + width - (radius*2), Y, radius*2, radius*2, 270, 90);
path.AddLine(X + width, Y + radius, X + width, Y + height - (radius*2));
path.AddArc(X + width - (radius*2), Y + height - (radius*2), radius*2, radius*2,0,90);
path.AddLine(X + width - (radius*2), Y + height, X + radius, Y + height);
path.AddArc(X, Y + height - (radius*2), radius*2, radius*2, 90, 90);
path.AddLine(X, Y + height - (radius*2), X, Y + radius);
path.AddArc(X, Y, radius*2, radius*2, 180, 90);
path.CloseFigure;
graphics.DrawPath(pen, path);
path.Free;
end;
//------------------------------------------------------------------------------
procedure DrawRect(graphics: TGPGraphics; Pen: TGPPen; X,Y,Width,Height: integer);
var
path:TGPGraphicsPath;
begin
path := TGPGraphicsPath.Create;
path.AddLine(X, Y, X + width, Y);
path.AddLine(X + width, Y, X + width, Y + height);
path.AddLine(X + width, Y + height, X, Y + height);
path.AddLine(X, Y + height, X, Y);
path.CloseFigure;
graphics.DrawPath(pen, path);
path.Free;
end;
//------------------------------------------------------------------------------
function DrawVistaText(Canvas: TCanvas; Alignment: TAlignment; r: TRect; Caption:Widestring; AFont: TFont; Enabled: Boolean; RealDraw: Boolean; AntiAlias: TAntiAlias; Direction: TTabPosition): TRect;
var
graphics : TGPGraphics;
w,h: Integer;
fontFamily: TGPFontFamily;
font: TGPFont;
rectf: TGPRectF;
stringFormat: TGPStringFormat;
solidBrush: TGPSolidBrush;
x1,y1,x2,y2: single;
fs: integer;
sizerect: TGPRectF;
szRect: TRect;
DTFLAG: DWORD;
begin
if (Caption <> '') then
begin
graphics := TGPGraphics.Create(Canvas.Handle);
fontFamily:= TGPFontFamily.Create(AFont.Name);
fs := 0;
font := TGPFont.Create(fontFamily, AFont.Size , fs, UnitPoint);
graphics.SetSmoothingMode(SmoothingModeAntiAlias);
w := R.Right - R.Left;
h := R.Bottom - R.Top;
x1 := r.Left;
y1 := r.Top;
x2 := w;
y2 := h;
rectf := MakeRect(x1,y1,x2,y2);
stringFormat := nil;
if RealDraw then
begin
case (Direction) of
tpTop, tpBottom: stringFormat := TGPStringFormat.Create;
tpLeft:
begin
stringFormat := TGPStringFormat.Create; //($00000002);
end;
tpRight: stringFormat := TGPStringFormat.Create($00000002);
end;
end
else
stringFormat := TGPStringFormat.Create;
if Enabled then
solidBrush := TGPSolidBrush.Create(ColorToARGB(AFont.Color))
else
solidBrush := TGPSolidBrush.Create(ColorToARGB(clGray));
case Alignment of
taLeftJustify: stringFormat.SetAlignment(StringAlignmentNear);
taCenter:
begin
// Center-justify each line of text.
stringFormat.SetAlignment(StringAlignmentCenter);
end;
taRightJustify: stringFormat.SetAlignment(StringAlignmentFar);
end;
// Center the block of text (top to bottom) in the rectangle.
stringFormat.SetLineAlignment(StringAlignmentCenter);
stringFormat.SetHotkeyPrefix(HotkeyPrefixShow);
//graphics.SetTextRenderingHint(TextRenderingHintClearTypeGridFit);
//graphics.MeasureString(Caption, Length(Caption), font, rectf, stringFormat, sizerect);
case AntiAlias of
aaClearType:graphics.SetTextRenderingHint(TextRenderingHintClearTypeGridFit);
aaAntiAlias:graphics.SetTextRenderingHint(TextRenderingHintAntiAlias);
end;
if AntiAlias = aaNone then
begin
szRect.Left := round(rectf.X);
szRect.Top := round(rectf.Y);
szRect.Right := szRect.Left + 2;
szRect.Bottom := DrawText(Canvas.Handle,PChar(Caption),Length(Caption), szrect, DT_CALCRECT or DT_LEFT or DT_WORDBREAK);
sizeRect.X := szRect.Left;
sizeRect.Y := szRect.Top;
sizeRect.Width := szRect.Right - szRect.Left;
sizeRect.Height := szRect.Bottom - szRect.Top;
end
else
graphics.MeasureString(Caption, Length(Caption), font, rectf, stringFormat, sizerect);
Result := Rect(round(sizerect.X), Round(sizerect.Y), Round(sizerect.X + sizerect.Width), Round(sizerect.Y + sizerect.Height));
rectf := MakeRect(x1,y1,x2,y2);
if RealDraw then
begin
//graphics.DrawString(Caption, Length(Caption), font, rectf, stringFormat, solidBrush);
if AntiAlias = aaNone then
begin
szRect.Left := round(rectf.X);
szRect.Top := round(rectf.Y);
szRect.Right := szRect.Left + round(rectf.Width);
szRect.Bottom := szRect.Top + round(rectf.Height);
Canvas.Brush.Style := bsClear;
DTFLAG := DT_LEFT;
case Alignment of
taRightJustify: DTFLAG := DT_RIGHT;
taCenter: DTFLAG := DT_CENTER;
end;
DrawText(Canvas.Handle,PChar(Caption),Length(Caption), szrect, DTFLAG or DT_VCENTER or DT_SINGLELINE)
end
else
graphics.DrawString(Caption, Length(Caption), font, rectf, stringFormat, solidBrush);
end;
stringformat.Free;
solidBrush.Free;
font.Free;
fontfamily.Free;
graphics.Free;
end;
end;
//------------------------------------------------------------------------------
procedure DrawVistaGradient(Canvas: TCanvas; r: TRect; CFU, CTU, CFB, CTB, PC: TColor;
GradientU,GradientB: TGDIPGradient; Caption:Widestring; AFont: TFont;
Images: TImageList; ImageIndex: integer; EnabledImage: Boolean; Layout: TButtonLayout;
DropDownButton: Boolean; DrawDwLine: Boolean; Enabled: Boolean; Focus: Boolean; DropDownPos: TDropDownPosition;
Picture: TGDIPPicture; AntiAlias: TAntiAlias; RoundEdges: Boolean; Direction: TTabPosition); overload;
var
graphics : TGPGraphics;
path: TGPGraphicsPath;
pthGrBrush: TGPPathGradientBrush;
linGrBrush: TGPLinearGradientBrush;
gppen : tgppen;
count: Integer;
w,h,h2,w2: Integer;
colors : array[0..0] of TGPColor;
fontFamily: TGPFontFamily;
font: TGPFont;
rectf: TGPRectF;
stringFormat: TGPStringFormat;
solidBrush: TGPSolidBrush;
x1,y1,x2,y2: single;
fs: integer;
sizerect: TGPRectF;
ImgX, ImgY, ImgW, ImgH: Integer;
BtnR, DwR: TRect;
AP: TPoint;
szRect: TRect;
procedure DrawArrow(ArP: TPoint; ArClr: TColor);
begin
Canvas.Pen.Color := ArClr;
Canvas.MoveTo(ArP.X, ArP.Y);
Canvas.LineTo(ArP.X + 5, ArP.Y);
Canvas.MoveTo(ArP.X + 1, ArP.Y + 1);
Canvas.LineTo(ArP.X + 4, ArP.Y + 1);
Canvas.Pixels[ArP.X + 2, ArP.Y + 2] := ArClr;
end;
begin
BtnR := R;
if DropDownPos = dpRight then
begin
DwR := Rect(BtnR.Right - DropDownSectWidth, BtnR.Top, BtnR.Right, BtnR.Bottom);
if DropDownButton then
BtnR.Right := DwR.Left;
end
else // DropDownPos = doBottom
begin
DwR := Rect(BtnR.Left, BtnR.Bottom - DropDownSectWidth, BtnR.Right, BtnR.Bottom);
if DropDownButton then
BtnR.Bottom := DwR.Top;
end;
w := r.Right - r.Left;
h := r.Bottom - r.Top;
h2 := h div 2;
w2 := w div 2;
graphics := TGPGraphics.Create(Canvas.Handle);
case (Direction) of
tpTop:
begin
// down ellips brush
Canvas.Brush.Color := cfb;
Canvas.FillRect(rect(r.Left , r.top + h2, r.Right , r.Bottom ));
// Create a path that consists of a single ellipse.
path := TGPGraphicsPath.Create;
// path.AddRectangle(MakeRect(r.Left, r.Top + (h div 2), w , h));
path.AddEllipse(r.Left, r.Top + h2, w , h);
pthGrBrush := nil;
linGrBrush := nil;
case GradientB of
ggRadial: pthGrBrush := TGPPathGradientBrush.Create(path);
ggVertical: linGrBrush := TGPLinearGradientBrush.Create(MakeRect(r.Left,r.Top + h2,w,h2),ColorToARGB(CFB),ColorToARGB(CTB), LinearGradientModeVertical);
ggDiagonalForward: linGrBrush := TGPLinearGradientBrush.Create(MakeRect(r.Left,r.Top + h2,w,h2),ColorToARGB(CFB),ColorToARGB(CTB), LinearGradientModeForwardDiagonal);
ggDiagonalBackward: linGrBrush := TGPLinearGradientBrush.Create(MakeRect(r.Left,r.Top + h2,w,h2),ColorToARGB(CFB),ColorToARGB(CTB), LinearGradientModeBackwardDiagonal);
end;
if GradientB = ggRadial then
begin
pthGrBrush.SetCenterPoint(MakePoint(r.Left + w2, r.Bottom));
// Set the color at the center point to blue.
pthGrBrush.SetCenterColor(ColorToARGB(CTB));
colors[0] := ColorToARGB(CFB);
count := 1;
pthGrBrush.SetSurroundColors(@colors, count);
graphics.FillRectangle(pthGrBrush, r.Left + 1,r.Top + h2, w - 1, h2+1);
pthGrBrush.Free;
end
else
begin
graphics.FillRectangle(linGrBrush, r.Left + 1,r.Top + h2 + 1, w - 1, h2 + 1);
linGrBrush.Free;
end;
path.Free;
Canvas.Brush.Color := cfu;
//Canvas.FillRect(rect(r.Left + 1, r.Top + 2, r.Right - 1, r.top + h2));
Canvas.FillRect(rect(r.Left , r.Top , r.Right , r.top + h2));
// Create a path that consists of a single ellipse.
path := TGPGraphicsPath.Create;
path.AddEllipse(r.Left, r.Top - h2 , w , h);
case GradientU of
ggRadial: pthGrBrush := TGPPathGradientBrush.Create(path); // FF: Gradient fix here replace h by h2
ggVertical: linGrBrush := TGPLinearGradientBrush.Create(MakeRect(r.Left,r.Top,w,h2+1),ColorToARGB(CFU),ColorToARGB(CTU), LinearGradientModeVertical);
ggDiagonalForward: linGrBrush := TGPLinearGradientBrush.Create(MakeRect(r.Left,r.Top,w,h),ColorToARGB(CFU),ColorToARGB(CTU), LinearGradientModeForwardDiagonal);
ggDiagonalBackward: linGrBrush := TGPLinearGradientBrush.Create(MakeRect(r.Left,r.Top,w,h),ColorToARGB(CFU),ColorToARGB(CTU), LinearGradientModeBackwardDiagonal);
end;
if GradientU = ggRadial then
begin
pthGrBrush.SetCenterPoint(MakePoint(r.Left + w2, r.top));
// Set the color at the center point to blue.
pthGrBrush.SetCenterColor(ColorToARGB(CTU));
colors[0] := ColorToARGB(CFU);
count := 1;
pthGrBrush.SetSurroundColors(@colors, count);
graphics.FillRectangle(pthGrBrush, r.Left + 1,r.Top + 1, w - 1, h - h2 - 1);
pthGrBrush.Free;
end
else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -