📄 ucxpmenu.old.pas
字号:
function GetShadeColor(ACanvas: TCanvas; clr: TColor; Value: integer): TColor;
var
r, g, b: integer;
begin
clr := ColorToRGB(clr);
r := Clr and $000000FF;
g := (Clr and $0000FF00) shr 8;
b := (Clr and $00FF0000) shr 16;
r := (r - value);
if r < 0 then r := 0;
if r > 255 then r := 255;
g := (g - value) + 2;
if g < 0 then g := 0;
if g > 255 then g := 255;
b := (b - value);
if b < 0 then b := 0;
if b > 255 then b := 255;
//Result := Windows.GetNearestColor(ACanvas.Handle, RGB(r, g, b));
Result := RGB(r, g, b);
end;
function NewColor(ACanvas: TCanvas; clr: TColor; Value: integer): TColor;
var
r, g, b: integer;
begin
if Value > 100 then Value := 100;
clr := ColorToRGB(clr);
r := Clr and $000000FF;
g := (Clr and $0000FF00) shr 8;
b := (Clr and $00FF0000) shr 16;
r := r + Round((255 - r) * (value / 100));
g := g + Round((255 - g) * (value / 100));
b := b + Round((255 - b) * (value / 100));
Result := Windows.GetNearestColor(ACanvas.Handle, RGB(r, g, b));
//Result := RGB(r, g, b);
end;
function GrayColor(ACanvas: TCanvas; Clr: TColor; Value: integer): TColor;
var
r, g, b, avg: integer;
begin
clr := ColorToRGB(clr);
r := Clr and $000000FF;
g := (Clr and $0000FF00) shr 8;
b := (Clr and $00FF0000) shr 16;
Avg := (r + g + b) div 3;
Avg := Avg + Value;
if Avg > 240 then Avg := 240;
//if ACanvas <> nil then
// Result := Windows.GetNearestColor (ACanvas.Handle,RGB(Avg, avg, avg));
Result := RGB(Avg, avg, avg);
end;
procedure GrayBitmap(ABitmap: TBitmap; Value: integer);
var
x, y: integer;
LastColor1, LastColor2, Color: TColor;
begin
LastColor1 := 0;
LastColor2 := 0;
for y := 0 to ABitmap.Height do
for x := 0 to ABitmap.Width do
begin
Color := ABitmap.Canvas.Pixels[x, y];
if Color = LastColor1 then
ABitmap.Canvas.Pixels[x, y] := LastColor2
else
begin
LastColor2 := GrayColor(ABitmap.Canvas , Color, Value);
ABitmap.Canvas.Pixels[x, y] := LastColor2;
LastColor1 := Color;
end;
end;
end;
{Modified by felix@unidreamtech.com}
{
procedure GrayBitmap(ABitmap: TBitmap; Value: integer);
var
Pixel: PRGBTriple;
w, h: Integer;
x, y: Integer;
avg: integer;
begin
ABitmap.PixelFormat := pf24Bit;
w := ABitmap.Width;
h := ABitmap.Height;
for y := 0 to h - 1 do
begin
Pixel := ABitmap.ScanLine[y];
for x := 0 to w - 1 do
begin
avg := ((Pixel^.rgbtRed + Pixel^.rgbtGreen + Pixel^.rgbtBlue) div 3)
+ Value;
if avg > 240 then avg := 240;
Pixel^.rgbtRed := avg;
Pixel^.rgbtGreen := avg;
Pixel^.rgbtBlue := avg;
Inc(Pixel);
end;
end;
end;
}
procedure DimBitmap(ABitmap: TBitmap; Value: integer);
var
x, y: integer;
LastColor1, LastColor2, Color: TColor;
begin
if Value > 100 then Value := 100;
LastColor1 := -1;
LastColor2 := -1;
for y := 0 to ABitmap.Height - 1 do
for x := 0 to ABitmap.Width - 1 do
begin
Color := ABitmap.Canvas.Pixels[x, y];
if Color = LastColor1 then
ABitmap.Canvas.Pixels[x, y] := LastColor2
else
begin
LastColor2 := NewColor(ABitmap.Canvas, Color, Value);
ABitmap.Canvas.Pixels[x, y] := LastColor2;
LastColor1 := Color;
end;
end;
end;
{Modified by felix@unidreamtech.com}
{works fine for 24 bit color
procedure DimBitmap(ABitmap: TBitmap; Value: integer);
var
Pixel: PRGBTriple;
w, h: Integer;
x, y, c1, c2: Integer;
begin
ABitmap.PixelFormat := pf24Bit;
w := ABitmap.Width;
h := ABitmap.Height;
c1 := Value * 255;
c2 := 100 - Value;
for y := 0 to h - 1 do
begin
Pixel := ABitmap.ScanLine[y];
for x := 0 to w - 1 do
begin
Pixel^.rgbtRed := ((c2 * Pixel^.rgbtRed) + c1) div 100;
Pixel^.rgbtGreen := ((c2 * Pixel^.rgbtGreen) + c1) div 100;
Pixel^.rgbtBlue := ((c2 * Pixel^.rgbtBlue) + c1) div 100;
Inc(Pixel);
end;
end;
end;
}
procedure DrawArrow(ACanvas: TCanvas; X, Y: integer);
begin
ACanvas.MoveTo(X, Y);
ACanvas.LineTo(X + 5, Y);
ACanvas.MoveTo(X + 1, Y + 1);
ACanvas.LineTo(X + 4, Y);
ACanvas.MoveTo(X + 2, Y + 2);
ACanvas.LineTo(X + 3, Y);
end;
procedure DrawBitmapShadow(B: TBitmap; ACanvas: TCanvas; X, Y: integer;
ShadowColor: TColor);
var
BX, BY: integer;
TransparentColor: TColor;
begin
TransparentColor := B.Canvas.Pixels[0, B.Height - 1];
for BY := 0 to B.Height - 1 do
for BX := 0 to B.Width - 1 do
begin
if B.Canvas.Pixels[BX, BY] <> TransparentColor then
ACanvas.Pixels[X + BX, Y + BY] := ShadowColor;
end;
end;
procedure DrawCheckMark(ACanvas: TCanvas; X, Y: integer);
begin
Inc(X, 2);
Dec(Y, 3);
ACanvas.MoveTo(X , Y - 2);
ACanvas.LineTo(X + 2, Y );
ACanvas.LineTo(X + 7, Y - 5);
ACanvas.MoveTo(X , Y - 3);
ACanvas.LineTo(X + 2, Y - 1);
ACanvas.LineTo(X + 7, Y - 6);
ACanvas.MoveTo(X , Y - 4);
ACanvas.LineTo(X + 2, Y - 2);
ACanvas.LineTo(X + 7, Y - 7);
end;
{ TCustomComboSubClass }
//By Heath Provost (Nov 20, 2001)
// ComboBox Subclass WndProc.
// Message processing to allow control to repond to
// messages needed to paint using Office XP style.
procedure TControlSubClass.ControlSubClass(var Message: TMessage);
begin
//Call original WindowProc FIRST. We are trying to emulate inheritance, so
//original WindowProc must handle all messages before we do.
if (Message.Msg = WM_PAINT) and ((Control is TGraphicControl)) then
Message.Result := 1
else
//try //: "Marcus Paulo Tavares" <marcuspt@terra.com.br>
orgWindowProc(Message);
//except
//end;
if (not XPStyle.FActive) then
begin
try
Message.Result := 1;
if Control <> nil then
begin
Control.WindowProc := orgWindowProc;
if Control is TCustomEdit then
TEdit(Control).Ctl3D := FCtl3D;
if Control is TCustomRichEdit then
TRichEdit(Control).BorderStyle := FBorderStyle;
if Control is TGraphicControl then
Control.Repaint;
Control := nil;
Free;
end;
exit;
except
exit;
end;
end;
FMsg := Message.Msg;
case Message.Msg of
EM_GETMODIFY, // For edit
CM_INVALIDATE:
begin
FBuilding := true
end;
CM_PARENTCOLORCHANGED:
begin
PaintControlXP;
end;
WM_DESTROY:
begin
if not FBuilding then
begin
try
Control.WindowProc := orgWindowProc;
Free;
except
end;
FBuilding := false;
end;
Exit;
end;
WM_PAINT:
begin
FBuilding := false;
PaintControlXP;
end;
CM_MOUSEENTER:
if TControl(Control).Enabled then
begin
FmouseInControl := true;
if Control is TGraphicControl then
begin
Control.Repaint;
exit;
end;
PaintControlXP;
end;
CM_MOUSELEAVE:
if TControl(Control).Enabled then
begin
FmouseInControl := false;
if Control is TGraphicControl then
begin
Control.Repaint;
exit;
end;
PaintControlXP;
end;
WM_LBUTTONDOWN:
begin
FLButtonBressed := true;
PaintControlXP;
end;
WM_LBUTTONUP:
begin
FLButtonBressed := false;
if Control is TGraphicControl then
begin
Control.Repaint;
exit;
end;
PaintControlXP;
end;
WM_KEYDOWN:
if Message.WParam = VK_SPACE then
begin
FBressed := true;
if not FIsKeyDown then
PaintControlXP;
FIsKeyDown := true;
end;
WM_KEYUP:
if Message.WParam = VK_SPACE then
begin
FBressed := false;
FIsKeyDown := false;
PaintControlXP;
end;
WM_SETFOCUS:
begin
FmouseInControl := true;
PaintControlXP;
end;
WM_KILLFOCUS:
begin
FmouseInControl := false;
PaintControlXP;
end;
CM_FOCUSCHANGED:
PaintControlXP;
CM_EXIT:
begin
FmouseInControl := false;
PaintControlXP;
end;
BM_SETCHECK:
begin
FmouseInControl := false;
PaintControlXP;
end;
BM_GETCHECK:
begin
FmouseInControl := false;
PaintControlXP;
end;
CM_ENABLEDCHANGED,CM_TEXTCHANGED:
begin
PaintControlXP;
end;
CM_CTL3DCHANGED, CM_PARENTCTL3DCHANGED:
begin
FBuilding := true
end;
WM_LBUTTONDBLCLK: //for button, check
begin
if (Control is TButton) or
(Control is TSpeedButton) or
(Control is TCheckBox) then
Control.Perform(WM_LBUTTONDOWN, Message.WParam , Longint(Message.LParam));
end;
{CN_DRAWITEM,} BM_SETSTATE:
PaintControlXP; // button
end;
end;
// changes added by Heath Provost (Nov 20, 2001)
{ TCustomComboSubClass }
// paints an overlay over the control to make it mimic
// Office XP style.
procedure TControlSubClass.PaintControlXP;
begin
If Control is TWinControl then
FIsFocused := TWinControl(Control).Focused
else
FIsFocused := false;
{$IFDEF VER6U}
if (Control is TCustomCombo) then
PaintCombo;
{$ELSE}
if (Control is TCustomComboBox) then
PaintCombo;
{$ENDIF}
{ if Control is TDateTimePicker then //qmd
PaintEdit;// PaintDateTimePicker;}
if Control is TCustomRichEdit then
PaintRichEdit
else
if Control is TCustomEdit then
PaintEdit;
if Control is TCustomCheckBox then
PaintCheckBox;
if Control is TRadioButton then
PaintRadio;
if Control is TBitBtn then
PaintBitButn
else
if Control is TButton then
PaintButton;
if Control is TUpDown then
PaintUpDownButton;
if Control is TSpeedButton then
if Control.Visible then
PaintSpeedButton;
if Control is TCustomPanel then
PaintPanel;
if Control is TCustomGroupBox then
PaintGroupBox;
end;
procedure TControlSubClass.PaintCombo;
var
C: TControlCanvas;
R: TRect;
SelectColor, BorderColor, ArrowColor: TColor;
X: integer;
begin
C := nil;
try
C := TControlCanvas.Create;
C.Control := Control;
XPStyle.SetGlobalColor(C);
if Control.Enabled then ArrowColor := clBlack else ArrowColor := clWhite;
if (FmouseinControl) then
begin
borderColor := XPStyle.FFSelectBorderColor;
SelectColor := XPStyle.FFSelectColor;
end
else
begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -