📄 acdials.pas
字号:
end;
AC_GETCACHE : begin
GlobalCacheInfo := MakeCacheInfo(SkinData.FCacheBmp);//, OffsetX, OffsetY);
Exit;
end;
AC_GETCONTROLCOLOR : begin
if SkinData.Skinned then ParentCenterColor := SkinData.SkinManager.gd[SkinData.Skinindex].HotColor;
Exit;
end;
AC_UPDATECHILDREN : Provider.InitHwndControls(CtrlHandle); // SysListView re-init
AC_CHILDCHANGED : begin
Message.Result := integer((SkinData.SkinManager.gd[SkinData.SkinIndex].GradientPercent + SkinData.SkinManager.gd[SkinData.SkinIndex].ImagePercent > 0));
Exit;
end;
end
else case Message.Msg of
WM_GETDLGCODE : Exit;
WM_MOUSEMOVE : begin
if IsWindowEnabled(CtrlHandle) then DefaultManager.ActiveControl := 0;
end;
WM_NCHITTEST : begin
Ac_WMNCHitTest(Message);
Exit;
end;
WM_MOUSELEAVE : SetHotHT(0);
WM_NCLBUTTONDOWN : begin
Ac_WMNCLButtonDown(TWMNCLButtonDown(Message));
Exit;
end;
WM_NCRBUTTONDOWN : begin
if not (TWMNCLButtonUp(Message).HitTest in [HTCAPTION, HTSYSMENU]) then begin
inherited
end
else Exit;
end;
WM_CTLCOLORDLG : begin
Message.Result := LongInt(CreateSolidBrush(DefaultManager.GetGlobalColor)); // 5.21
Exit;
end;
WM_DRAWITEM : begin
case TWMDrawItem(Message).DrawItemStruct.CtlType of
ODT_COMBOBOX : begin end;
ODT_STATIC : begin
Ac_DrawStaticItem(TWMDrawItem(Message));
end;
end
end;
WM_NCRBUTTONUP : begin
case TWMNCLButtonUp(Message).HitTest of
HTCAPTION, HTSYSMENU : begin
SetHotHT(0);
DropSysMenu(TWMNCLButtonUp(Message).XCursor, TWMNCLButtonUp(Message).YCursor);
end
end;
Exit;
end;
WM_NCLBUTTONUP, WM_LBUTTONUP: begin
Ac_WMLButtonUp(Message);
Exit;
end;
WM_NCLBUTTONDBLCLK : begin
case TWMNCHitMessage(Message).HitTest of
HTSYSMENU : SendMessage(CtrlHandle, WM_SYSCOMMAND, SC_CLOSE, 0);
HTCAPTION : begin
if EnabledMax or EnabledRestore then begin
if IsZoomed(CtrlHandle) or IsIconic(CtrlHandle)
then SendMessage(CtrlHandle, WM_SYSCOMMAND, SC_RESTORE, 0)
else SendMessage(CtrlHandle, WM_SYSCOMMAND, SC_MAXIMIZE, 0);
SystemMenu.UpdateItems;
end;
TWMNCHitMessage(Message).HitTest := 0;
end;
end;
Exit;
end;
WM_ERASEBKGND : begin
InitCtrlData(CtrlHandle, ParentWnd, WndRect, ParentRect, WndSize, WndPos, Caption);
if not Initialized then begin
Initialized := True;
Provider.InitHwndControls(CtrlHandle); // Rezerved searching of controls
end;
Ac_WMPaint(TWMPaint(Message));
Message.Result := 1;
Exit;
end;
WM_PAINT : begin
Message.Result := CallWindowProc(OldProc, CtrlHandle, Message.Msg, Message.WParam, Message.LParam);
Exit;
end;
WM_NCPAINT : if IsWindowVisible(CtrlHandle) then begin
InitCtrlData(CtrlHandle, ParentWnd, WndRect, ParentRect, WndSize, WndPos, Caption);
Caption := GetWndText(CtrlHandle);
Ac_WMNCPaint(Message);
Message.Result := 1;
Exit;
end;
WM_WINDOWPOSCHANGED : begin
SkinData.BGChanged := True;
RgnChanged := True;
Message.Result := CallWindowProc(OldProc, CtrlHandle, Message.Msg, Message.WParam, Message.LParam);
Exit;
end;
WM_SIZE : begin
SkinData.BGChanged := True;
RgnChanged := True;
Message.Result := CallWindowProc(OldProc, CtrlHandle, Message.Msg, Message.WParam, Message.LParam);
RedrawWindow(CtrlHandle, nil, 0, RDW_ERASE or RDW_UPDATENOW or RDW_INVALIDATE);
Exit;
end;
WM_SETTEXT : if IsWindowVisible(CtrlHandle) then begin
// SendMessage(CtrlHandle, WM_SETREDRAW, 0, 0);
Message.Result := CallWindowProc(OldProc, CtrlHandle, Message.Msg, Message.WParam, Message.LParam);
// SendMessage(CtrlHandle, WM_SETREDRAW, 1, 0);
SkinData.BGChanged := True;
SendMessage(CtrlHandle, WM_NCPAINT, 0, 0);
Exit;
end;
WM_ENABLE : if IsWindowVisible(CtrlHandle) then begin
// SendMessage(CtrlHandle, WM_SETREDRAW, 0, 0);
Message.Result := CallWindowProc(OldProc, CtrlHandle, Message.Msg, Message.WParam, Message.LParam);
// SendMessage(CtrlHandle, WM_SETREDRAW, 1, 0);
SkinData.BGChanged := True;
SendMessage(CtrlHandle, WM_NCPAINT, 0, 0);
Exit;
end;
WM_NCACTIVATE : if IsWindowVisible(CtrlHandle) then begin
// SendMessage(CtrlHandle, WM_SETREDRAW, 0, 0);
Message.Result := CallWindowProc(OldProc, CtrlHandle, Message.Msg, Message.WParam, Message.LParam);
FFormActive := (TWMActivate(Message).Active <> WA_INACTIVE);
// SendMessage(CtrlHandle, WM_SETREDRAW, 1, 0);
Ac_WMNCActivate(Message);
Exit;
end;
{ WM_ACTIVATE : if IsWindowVisible(CtrlHandle) then begin
// SendMessage(CtrlHandle, WM_SETREDRAW, 0, 0);
Message.Result := CallWindowProc(OldProc, CtrlHandle, Message.Msg, Message.WParam, Message.LParam);
FFormActive := (TWMActivate(Message).Active <> WA_INACTIVE);
// SendMessage(CtrlHandle, WM_SETREDRAW, 1, 0);
Ac_WMActivate(Message);
Exit;
end; }
1326 : begin
Message.Result := CallWindowProc(OldProc, CtrlHandle, Message.Msg, Message.WParam, Message.LParam);
Provider.InitHwndControls(CtrlHandle); // SysListView re-init
RedrawWindow(CtrlHandle, nil, 0, RDW_FRAME or RDW_INVALIDATE or RDW_UPDATENOW);
end;
end;
inherited;
case Message.Msg of
WM_SYSCOMMAND : begin
// if Message.WParamLo = $F012 then RedrawWindow(CtrlHandle, nil, 0, RDW_INTERNALPAINT or RDW_INVALIDATE or RDW_UPDATENOW);
case Message.WParam of
SC_MAXIMIZE, SC_RESTORE : begin
if VisibleMax then CurrentHT := HTMAXBUTTON;
SetHotHT(0);
end;
end;
end;
end;
end;
function TacDialogWnd.BarWidth(i: integer): integer;
begin
if Assigned(SkinData.SkinManager.ma[i].Bmp) then begin
Result := (SkinData.SkinManager.ma[i].Bmp.Width div 9) * 2 + TitleBtnsWidth;
end
else begin
Result := (WidthOf(SkinData.SkinManager.ma[i].R) div (3 * SkinData.SkinManager.ma[i].ImageCount)) * 2 + TitleBtnsWidth;
end;
end;
function TacDialogWnd.BorderWidth: integer;
begin
Result := SysBorderHeight
end;
function TacDialogWnd.CaptionHeight: integer;
begin
if (BorderStyle <> acbsNone) and (GetWindowLong(CtrlHandle, GWL_STYLE) and WS_CAPTION = WS_CAPTION) then begin
if BorderStyle in [acbsToolWindow, acbsSizeToolWin]
then Result := GetSystemMetrics(SM_CYSMCAPTION)
else Result := GetSystemMetrics(SM_CYCAPTION)
end
else Result := 0;
end;
constructor TacDialogWnd.Create(AHandle: hwnd; ASkinData: TsCommonData; ASkinManager: TsSkinManager; const SkinSection : string; Repaint: boolean);
begin
inherited;
Initialized := False;
RgnChanged := True;
BorderStyle := acbsSingle;
TempBmp := TBitmap.Create;
FFormActive := True;
SystemMenu := TacSystemMenu.Create(nil);
SystemMenu.FOwner := Self;
SystemMenu.UpdateItems;
SkinData.Updating := True;
if (DefaultManager <> nil) and DefaultManager.SkinnedPopups then DefaultManager.SkinableMenus.HookPopupMenu(SystemMenu, True);
end;
destructor TacDialogWnd.Destroy;
begin
if Assigned(Adapter) then FreeAndNil(Adapter);
if Assigned(TitleGlyph) then FreeAndNil(TitleGlyph);
if Assigned(TitleBG) then FreeAndNil(TitleBG);
if Assigned(TempBmp) then FreeAndnil(TempBmp);
FreeAndNil(SystemMenu);
if TitleFont <> nil then FreeAndnil(TitleFont);
inherited;
end;
procedure TacDialogWnd.Ac_WMPaint(var Msg: TWMPaint);
var
DC, SavedDC : hdc;
begin
if Msg.DC = 0 then DC := GetDC(CtrlHandle) else DC := Msg.DC;
SavedDC := SaveDC(DC);
try
// if not SkinData.Updating then
SkinData.Updating := False;//SkinData.Updating;
PaintForm(DC);
finally
RestoreDC(DC, SavedDC);
if Msg.DC = 0 then ReleaseDC(CtrlHandle, DC);
end;
end;
function TacDialogWnd.EnabledClose: boolean;
begin
Result := VisibleClose and (GetClassLong(CtrlHandle, GCL_STYLE) and CS_NOCLOSE <> CS_NOCLOSE)
end;
function TacDialogWnd.EnabledMax: boolean;
begin
Result := VisibleMax and not IsZoomed(CtrlHandle) and (BorderStyle in [acbsSingle, acbsSizeable, acbsSizeToolWin]);
end;
function TacDialogWnd.EnabledMin: boolean;
begin
Result := VisibleMin and not IsIconic(CtrlHandle);
end;
function TacDialogWnd.EnabledRestore: boolean;
begin
Result := VisibleMax and (IsIconic(CtrlHandle) or IsZoomed(CtrlHandle));
end;
function TacDialogWnd.FormActive: integer;
begin
Result := integer(FFormActive);
end;
function TacDialogWnd.HeaderHeight: integer;
begin
if GetWindowLong(CtrlHandle, GWL_STYLE) and WS_CAPTION <> WS_CAPTION
then Result := WndSize.cy - GetClientHeight(CtrlHandle)
else Result := WndSize.cy - GetClientHeight(CtrlHandle) - SysBorderHeight;
if Result < 0 then Result := 0;
if IsIconic(CtrlHandle) then inc(Result, SysBorderHeight);
if Assigned(sBarHorz) and sBarHorz.fScrollVisible then begin
dec(Result, GetScrollMetric(sBarHorz, SM_CYHORZSB));
end;
end;
procedure TacDialogWnd.InitParams;
var
NonClientMetrics: TNonClientMetrics;
f : HFONT;
begin
dwStyle := GetWindowLong(CtrlHandle, GWL_STYLE);
dwExStyle := GetWindowLong(CtrlHandle, GWL_EXSTYLE);
BorderStyle := acbsSizeable;
if ((dwStyle and WS_POPUP) > 0) and ((dwStyle and WS_CAPTION) <> WS_Caption)
then BorderStyle := acbsNone
else if ((dwStyle and WS_THICKFRAME) > 0) or ((dwStyle and WS_SIZEBOX) > 0)
then BorderStyle := acbsSizeable
else if ((dwStyle and DS_MODALFRAME) > 0) then BorderStyle := acbsDialog;
PrepareTitleGlyph;
if TitleFont <> nil then FreeAndNil(TitleFont);
TitleFont := TFont.Create;
NonClientMetrics.cbSize := SizeOf(NonClientMetrics);
if SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, @NonClientMetrics, 0) then begin
f := CreateFontIndirect(NonClientMetrics.lfCaptionFont);
if f <> 0 then TitleFont.Handle := f
end;
SetWindowLong(CtrlHandle, GWL_STYLE, GetWindowLong(CtrlHandle, GWL_STYLE) and not WS_SYSMENU);
end;
procedure TacDialogWnd.MakeTitleBG;
begin
if TitleBG <> nil then FreeAndNil(TitleBG);
TitleBG := TBitmap.Create;
TitleBG.Width := SkinData.FCacheBmp.Width;
TitleBG.Height := CaptionHeight + SysBorderHeight;
TitleBG.PixelFormat := pf24bit;
BitBlt(TitleBG.Canvas.Handle, 0, 0, TitleBG.Width, TitleBG.Height, SkinData.FCacheBmp.Canvas.Handle, 0, 0, SRCCOPY);
end;
function TacDialogWnd.OffsetX: integer;
var
i : integer;
begin
if Assigned(sBarVert) and sBarVert.fScrollVisible then i := GetScrollMetric(sBarVert, SM_CXVERTSB) else i := 0;
Result := (GetWindowWidth(CtrlHandle) - GetClientWidth(CtrlHandle) - i) div 2
end;
function TacDialogWnd.OffsetY: integer;
var
i : integer;
begin
if Assigned(sBarHorz) and sBarHorz.fScrollVisible then i := GetScrollMetric(sBarHorz, SM_CYHORZSB) else i := 0;
Result := GetWindowHeight(CtrlHandle) - GetClientHeight(CtrlHandle) - BorderWidth * integer(CaptionHeight <> 0) - i;
end;
procedure TacDialogWnd.PaintAll;
var
i, CY : integer;
h : integer;
{$IFDEF TNTUNICODE}
// s : WideString;
{$ELSE}
s : string;
{$ENDIF}
r : TRect;
ci : TCacheInfo;
begin
CY := SysBorderHeight;
h := 2 * CY + CaptionHeight;
if SkinData.BGChanged then begin
if False {!!!} and
SkinData.SkinManager.gd[SkinData.SkinIndex].ReservedBoolean and
(TitleBG <> nil) and (TitleBG.Width = WndSize.cx) and (SkinData.FCacheBmp.Height = WndSize.cy) {and (CaptionHeight <> 0)} then begin
// Drawn only caption
ci := MakeCacheInfo(SkinData.FCacheBmp);
BitBlt(SkinData.FCacheBmp.Canvas.Handle, 0, 0, TitleBG.Width, TitleBG.Height, TitleBG.Canvas.Handle, 0, 0, SRCCOPY);
end
else begin
RgnChanged := True;
ci.Ready := False;
SkinData.FCacheBmp.Width := WndSize.cx;
SkinData.FCacheBmp.Height := WndSize.cy;
if SkinData.SkinManager.IsValidSkinIndex(SkinData.SkinIndex) then begin
// Paint body
PaintItem(SkinData, EmptyCI, False, integer(FormActive), Rect(0, 0, WndSize.cx, WndSize.cy), Point(0, 0), SkinData.FCacheBmp, False);
if (BorderStyle = acbsSizeable) or (BorderStyle = acbsSizeToolWin) then begin // PaintGrip
i := SkinData.SkinManager.GetMaskIndex(SkinData.SkinManager.ConstData.IndexGLobalInfo, s_GlobalInfo, s_GripImage);
if SkinData.SkinManager.IsValidImgIndex(i) then DrawSkinGlyph(SkinData.FCacheBmp, RBGripPoint(i), 0, 1, SkinData.SkinManager.ma[i]);
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -