📄 sgraphutils.pas
字号:
inc(aRect.Bottom, y);
inc(aRect.Left, WidthOf(aRect) - WidthOf(R));
end
else if Flags or DT_LEFT = Flags then begin
y := (HeightOf(R) - HeightOf(aRect)) div 2;
dec(aRect.Top, y);
inc(aRect.Bottom, y);
inc(aRect.Right, WidthOf(R) - WidthOf(aRect));
end;
R := aRect;
InflateRect(aRect, 1, 1);
end;
if Text <> ''then
if Enabled then begin
DrawText(DC, Text, Length(Text), R, Flags);
end
else begin
Rd := Rect(R.Left + 1, R.Top + 1, R.Right + 1, R.Bottom + 1);
DrawText(DC, Text, Length(Text), Rd, Flags);
DrawText(DC, Text, Length(Text), R, Flags);
end;
end;
function acDrawText(hDC: HDC; const Text: ACString; var lpRect: TRect; uFormat: Cardinal): Integer;
begin
{$IFDEF TNTUNICODE}
Result := Tnt_DrawTextW(hDC, PACChar(Text), Length(Text), lpRect, uFormat);
{$else}
Result := DrawText(hDC, PACChar(Text), Length(Text), lpRect, uFormat);
{$ENDIF}
end;
function acTextWidth(Canvas: TCanvas; const Text: ACString): Integer;
begin
{$IFDEF TNTUNICODE}
Result := WideCanvasTextExtent(Canvas, Text).cx;
{$ELSE}
Result := Canvas.TextExtent(Text).cx;
{$ENDIF}
end;
function acTextHeight(Canvas: TCanvas; const Text: ACString): Integer;
begin
{$IFDEF TNTUNICODE}
Result := WideCanvasTextExtent(Canvas, Text).cy;
{$ELSE}
Result := Canvas.TextExtent(Text).cy;
{$ENDIF}
end;
function acTextExtent(Canvas: TCanvas; const Text: ACString): TSize;
begin
{$IFDEF TNTUNICODE}
Result := WideCanvasTextExtent(Canvas, Text);
{$ELSE}
Result := Canvas.TextExtent(Text);
{$ENDIF}
end;
procedure acTextRect(Canvas : TCanvas; const Rect: TRect; X, Y: Integer; const Text: ACString);
begin
{$IFDEF TNTUNICODE}
WideCanvasTextRect(Canvas, Rect, X,Y, Text);
{$ELSE}
Canvas.TextRect(Rect, X,Y, Text);
{$ENDIF}
end;
procedure acWriteTextEx(Canvas: TCanvas; Text: PacChar; Enabled: boolean; var aRect : TRect; Flags: Cardinal; SkinData : TsCommonData; Hot : boolean; SkinManager : TObject = nil);
begin
{$IFDEF TNTUNICODE}
WriteTextExW(Canvas, Text, Enabled, aRect, Flags, SkinData, Hot);
{$ELSE}
WriteTextEx(Canvas, Text, Enabled, aRect, Flags, SkinData, Hot);
{$ENDIF}
end;
procedure acWriteTextEx(Canvas: TCanvas; Text: PacChar; Enabled: boolean; var aRect : TRect; Flags: Cardinal; SkinIndex : integer; Hot : boolean; SkinManager : TObject = nil);
begin
{$IFDEF TNTUNICODE}
WriteTextExW(Canvas, Text, Enabled, aRect, Flags, SkinIndex, Hot);
{$ELSE}
WriteTextEx(Canvas, Text, Enabled, aRect, Flags, SkinIndex, Hot);
{$ENDIF}
end;
procedure acWriteText(Canvas: TCanvas; Text: PacChar; Enabled: boolean; var aRect : TRect; Flags: Cardinal);
begin
{$IFDEF TNTUNICODE}
DrawTextW(Canvas.Handle, Text, Length(Text), aRect, Flags);
{$ELSE}
DrawText(Canvas.Handle, Text, Length(Text), aRect, Flags);
{$ENDIF}
end;
{$IFNDEF ACHINTS}
procedure WriteTextEx(Canvas: TCanvas; Text: PChar; Enabled: boolean; var aRect : TRect; Flags: Cardinal; SkinIndex : integer; Hot : boolean; SkinManager : TObject = nil);
var
R, Rd: TRect;
nLength: Integer;
begin
nLength := StrLen(Text);
if SkinManager = nil then SkinManager := DefaultManager;
if not Assigned(DefaultManager) or not TsSkinManager(SkinManager).IsValidSkinIndex(SkinIndex) then Exit;
with TsSkinManager(SkinManager) do begin {SeeLater}
Canvas.Brush.Style := bsClear;
R := aRect;
if Text <> '' then
if Enabled then begin
if IsValidSkinIndex(SkinIndex) then begin
// Left
if Hot then Canvas.Font.Color := gd[SkinIndex].HotFontColor[2] else Canvas.Font.Color := gd[SkinIndex].FontColor[2];
if Canvas.Font.Color <> -1 then begin
Rd := Rect(R.Left - 1, R.Top, R.Right - 1, R.Bottom);
DrawText(Canvas.Handle, Text, nLength, Rd, Flags);
end;
// Top
if Hot then Canvas.Font.Color := gd[SkinIndex].HotFontColor[3] else Canvas.Font.Color := gd[SkinIndex].FontColor[3];
if Canvas.Font.Color <> -1 then begin
Rd := Rect(R.Left, R.Top - 1, R.Right, R.Bottom - 1);
DrawText(Canvas.Handle, Text, nLength, Rd, Flags);
end;
// Right
if Hot then Canvas.Font.Color := gd[SkinIndex].HotFontColor[4] else Canvas.Font.Color := gd[SkinIndex].FontColor[4];
if Canvas.Font.Color <> -1 then begin
Rd := Rect(R.Left + 1, R.Top, R.Right + 1, R.Bottom);
DrawText(Canvas.Handle, Text, nLength, Rd, Flags);
end;
// Bottom
if Hot then Canvas.Font.Color := gd[SkinIndex].HotFontColor[5] else Canvas.Font.Color := gd[SkinIndex].FontColor[5];
if Canvas.Font.Color <> -1 then begin
Rd := Rect(R.Left, R.Top + 1, R.Right, R.Bottom + 1);
DrawText(Canvas.Handle, Text, nLength, Rd, Flags);
end;
// Center
if Hot then Canvas.Font.Color := gd[SkinIndex].HotFontColor[1] else Canvas.Font.Color := gd[SkinIndex].FontColor[1];
DrawText(Canvas.Handle, Text, nLength, R, Flags);
end
else DrawText(Canvas.Handle, Text, nLength, R, Flags);
end
else begin
Rd := R;
Canvas.Font.Color := MixColors(gd[SkinIndex].FontColor[1], gd[SkinIndex].Color, DefDisabledBlend);
DrawText(Canvas.Handle, Text, nLength, Rd, Flags);
end;
end
end;
{$ENDIF}
procedure WriteTextEx(Canvas: TCanvas; Text: PChar; Enabled: boolean; var aRect : TRect; Flags: Cardinal; SkinData : TsCommonData; Hot : boolean); overload;
var
R, Rd: TRect;
// x, y : integer;
// ts: TSize;
SavedDC : hdc;
nLength: Integer;
begin
nLength := StrLen(Text);
R := aRect;
if Assigned(SkinData.FOwnerControl) then Canvas.Font.Assign(TsHackedControl(SkinData.FOwnerControl).Font);
if Hot and (SkinData.SkinSection = s_WebBtn)
then Canvas.Font.Style := Canvas.Font.Style + [fsUnderline];
SavedDC := SaveDC(Canvas.Handle);
try
IntersectClipRect(Canvas.Handle, aRect.Left, aRect.Top, aRect.Right, aRect.Bottom); // v4.40
{!!!
if (Flags or DT_WORDBREAK <> Flags) and (Flags or DT_END_ELLIPSIS <> Flags) then begin // If no multiline
GetTextExtentPoint32(Canvas.Handle, Text, nLength, ts);
R.Right := R.Left + ts.cx;
R.Bottom := R.Top + ts.cy;
if Flags or DT_CENTER = Flags then begin
y := (HeightOf(R) - HeightOf(aRect)) div 2;
x := (WidthOf(R) - WidthOf(aRect)) div 2;
InflateRect(aRect, x, y);
end
else if Flags or DT_RIGHT = Flags then begin
y := (HeightOf(R) - HeightOf(aRect)) div 2;
dec(aRect.Top, y);
inc(aRect.Bottom, y);
inc(aRect.Left, WidthOf(aRect) - WidthOf(R));
end
else if Flags or DT_LEFT = Flags then begin
y := (HeightOf(R) - HeightOf(aRect)) div 2;
dec(aRect.Top, y);
inc(aRect.Bottom, y);
inc(aRect.Right, WidthOf(R) - WidthOf(aRect));
end;
R := aRect;// := R;
InflateRect(aRect, 1, 1);
end; }
if Text <> '' then
Canvas.Brush.Style := bsClear;
if Enabled then begin
if Assigned(SkinData.SkinManager) and SkinData.SkinManager.IsValidSkinIndex(SkinData.SkinIndex) then begin
// Left contur
if not SkinData.CustomFont then begin
if Hot then Canvas.Font.Color := SkinData.SkinManager.gd[SkinData.SkinIndex].HotFontColor[2] else Canvas.Font.Color := SkinData.SkinManager.gd[SkinData.SkinIndex].FontColor[2];
if Canvas.Font.Color <> -1 then begin
Rd := Rect(R.Left - 1, R.Top, R.Right - 1, R.Bottom);
DrawText(Canvas.Handle, Text, nLength, Rd, Flags);
end;
// Top
if Hot then Canvas.Font.Color := SkinData.SkinManager.gd[SkinData.SkinIndex].HotFontColor[3] else Canvas.Font.Color := SkinData.SkinManager.gd[SkinData.SkinIndex].FontColor[3];
if Canvas.Font.Color <> -1 then begin
Rd := Rect(R.Left, R.Top - 1, R.Right, R.Bottom - 1);
DrawText(Canvas.Handle, Text, nLength, Rd, Flags);
end;
// Right
if Hot then Canvas.Font.Color := SkinData.SkinManager.gd[SkinData.SkinIndex].HotFontColor[4] else Canvas.Font.Color := SkinData.SkinManager.gd[SkinData.SkinIndex].FontColor[4];
if Canvas.Font.Color <> -1 then begin
Rd := Rect(R.Left + 1, R.Top, R.Right + 1, R.Bottom);
DrawText(Canvas.Handle, Text, nLength, Rd, Flags);
end;
// Bottom
if Hot then Canvas.Font.Color := SkinData.SkinManager.gd[SkinData.SkinIndex].HotFontColor[5] else Canvas.Font.Color := SkinData.SkinManager.gd[SkinData.SkinIndex].FontColor[5];
if Canvas.Font.Color <> -1 then begin
Rd := Rect(R.Left, R.Top + 1, R.Right, R.Bottom + 1);
DrawText(Canvas.Handle, Text, nLength, Rd, Flags);
end;
end;
// Center
if not SkinData.CustomFont then begin
if Hot then Canvas.Font.Color := SkinData.SkinManager.gd[SkinData.SkinIndex].HotFontColor[1] else Canvas.Font.Color := SkinData.SkinManager.gd[SkinData.SkinIndex].FontColor[1];
end;
DrawText(Canvas.Handle, Text, nLength, R, Flags or DT_NOCLIP{v4.24});
end
else DrawText(Canvas.Handle, Text, nLength, R, Flags or DT_NOCLIP{v4.24});
end
else if SkinData.SkinIndex > -1 then begin
try
Rd := R;
Canvas.Font.Color := MixColors(SkinData.SkinManager.gd[SkinData.SkinIndex].FontColor[1], SkinData.SkinManager.gd[SkinData.SkinIndex].Color, DefDisabledBlend);
DrawText(Canvas.Handle, Text, nLength, Rd, Flags);
except
end;
end
else begin
Rd := R;
DrawText(Canvas.Handle, Text, nLength, Rd, Flags);
end;
finally
RestoreDC(Canvas.Handle, SavedDC);
end;
end;
{$IFDEF TNTUNICODE}
procedure WriteTextExW(Canvas: TCanvas; Text: PWideChar; Enabled: boolean; var aRect : TRect; Flags: Cardinal; SkinData : TsCommonData; Hot : boolean); overload;
var
R, Rd: TRect;
// ts: TSize;
SavedDC : hdc;
nLength: Integer;
begin
{$IFDEF D2005}
nLength := Length(Text);
{$ELSE}
nLength := WStrLen(Text);
{$ENDIF}
R := aRect;
if Assigned(SkinData.FOwnerControl) then Canvas.Font.Assign(TsHackedControl(SkinData.FOwnerControl).Font);
if Hot and (SkinData.SkinSection = s_WebBtn) then Canvas.Font.Style := Canvas.Font.Style + [fsUnderline];
SavedDC := SaveDC(Canvas.Handle);
try
IntersectClipRect(Canvas.Handle, aRect.Left, aRect.Top, aRect.Right, aRect.Bottom); // v4.40
{
if (Flags or DT_WORDBREAK <> Flags) and (Flags or DT_END_ELLIPSIS <> Flags) then begin // If no multiline
GetTextExtentPoint32W(Canvas.Handle, Text, nLength, ts);
R.Right := R.Left + ts.cx;
R.Bottom := R.Top + ts.cy;
if Flags or DT_CENTER = Flags then begin
y := (HeightOf(R) - HeightOf(aRect)) div 2;
x := (WidthOf(R) - WidthOf(aRect)) div 2;
InflateRect(aRect, x, y);
end
else if Flags or DT_RIGHT = Flags then begin
y := (HeightOf(R) - HeightOf(aRect)) div 2;
dec(aRect.Top, y);
inc(aRect.Bottom, y);
inc(aRect.Left, WidthOf(aRect) - WidthOf(R));
end
else if Flags or DT_LEFT = Flags then begin
y := (HeightOf(R) - HeightOf(aRect)) div 2;
dec(aRect.Top, y);
inc(aRect.Bottom, y);
inc(aRect.Right, WidthOf(R) - WidthOf(aRect));
end;
R := aRect;// := R;
InflateRect(aRect, 1, 1);
end;
}
Canvas.Brush.Style := bsClear;
if Text <> '' then
if Enabled then begin
if Assigned(SkinData.SkinManager) and SkinData.SkinManager.IsValidSkinIndex(SkinData.SkinIndex) then begin
// Left contur
if not SkinData.CustomFont then begin
if Hot then Canvas.Font.Color := SkinData.SkinManager.gd[SkinData.SkinIndex].HotFont
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -