⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 danhint.pas

📁 详细说明:毕业论文中关于小型宾馆管理系统的详细设计毕 业论文中关于小型宾馆...一个酒店管理系统VB+Access [学生学籍管理系统(VB+Acess).zip] - !这个是刚刚编的毕业设计,可能
💻 PAS
📖 第 1 页 / 共 2 页
字号:
                     SP[0]:=Point(Width-SHADOW_WIDTH-27,Height-15);
                     SP[1]:=Point(Width-SHADOW_WIDTH-5,Height-15);
                     SP[2]:=Point(Width-SHADOW_WIDTH,Height);
                  end;
         hdDownRight:begin
                        AP[0]:=Point(10,15);
                        AP[1]:=Point(20,15);
                        AP[2]:=Point(0,0);
                        { for hdDownXXX, SP not used now }
                        SP[0]:=Point(12,Height-15);
                        SP[1]:=Point(25,Height-15);
                        SP[2]:=Point(12,Height);
                     end;
         hdDownLeft:begin
                       AP[0]:=Point(Width-SHADOW_WIDTH-20,15);
                       AP[1]:=Point(Width-SHADOW_WIDTH-10,15);
                       AP[2]:=Point(Width-SHADOW_WIDTH,0);
                       { for hdDownXXX, SP not used now }
                       SP[0]:=Point(12,Height-15);
                       SP[1]:=Point(25,Height-15);
                       SP[2]:=Point(12,Height);
                    end;
      end;

      { Draw Shadow of the Hint Rect}
      if (FHintDirection<=hdUpLeft) then
         begin
            ShadowRgn:=CreateRoundRectRgn(0+10,0+8,Width,Height-9,8,8);
            { 8 is for RoundRect's corner }
            for X:=Width-SHADOW_WIDTH-8 to Width do
               for Y:=8 to Height-14 do
                  begin
                     if (Odd(X)=Odd(Y)) and PtInRegion(ShadowRgn,X,Y) then
                        MemBmp.Canvas.Pixels[X,Y]:=FDanHint.HintShadowColor;
                  end;
            for X:=10 to Width do
               for Y:=Height-14 to Height-9 do
                  begin
                     if (Odd(X)=Odd(Y)) and PtInRegion(ShadowRgn,X,Y) then
                        MemBmp.Canvas.Pixels[X,Y]:=FDanHint.HintShadowColor;
                  end;
         end
      else           { for hdDownXXX }
         begin
            ShadowRgn:=CreateRoundRectRgn(0+10,0+8+15,Width,Height-2,8,8);
            for X:=Width-SHADOW_WIDTH-8 to Width do
               for Y:=23 to Height-8 do
                  begin
                     if (Odd(X)=Odd(Y)) and PtInRegion(ShadowRgn,X,Y) then
                        MemBmp.Canvas.Pixels[X,Y]:=FDanHint.HintShadowColor;
                  end;
            for X:=10 to Width do
               for Y:=Height-8 to Height-2 do
                  begin
                     if (Odd(X)=Odd(Y)) and PtInRegion(ShadowRgn,X,Y) then
                        MemBmp.Canvas.Pixels[X,Y]:=FDanHint.HintShadowColor;
                  end;
         end;
      DeleteObject(ShadowRgn);

      { Draw the shadow of the arrow }
      if (HintDirection<=hdUpLeft) then
         begin
            ShadowRgn:=CreatePolygonRgn(SP,3,WINDING);
            for X:=SP[0].X to SP[1].X do
               for Y:=SP[0].Y to SP[2].Y do
                  begin
                     if (Odd(X)=Odd(Y)) and PtInRegion(ShadowRgn,X,Y) then
                        MemBmp.Canvas.Pixels[X,Y]:=FDanHint.HintShadowColor;
                  end;
            DeleteObject(ShadowRgn);
         end;

      { Draw HintRect }
      MemBmp.Canvas.Pen.Color:=clBlack;
      MemBmp.Canvas.Pen.Style:=psSolid;
      MemBmp.Canvas.Brush.Color:=FDanHint.HintColor;

      MemBmp.Canvas.Brush.Style:=bsSolid;
      if (FHintDirection<=hdUpLeft) then
         MemBmp.Canvas.RoundRect(0,0,Width-SHADOW_WIDTH,Height-14,9,9)
      else
         MemBmp.Canvas.RoundRect(0,0+AddNum,Width-SHADOW_WIDTH,Height-14+6,9,9);
      { Draw Hint Arrow }
      MemBmp.Canvas.Pen.Color:=FDanHint.HintColor;
      MemBmp.Canvas.MoveTo(AP[0].X,AP[0].Y);
      MemBmp.Canvas.LineTo(AP[1].X,AP[1].Y);
      MemBmp.Canvas.Pen.Color:=clBlack;
      FillRegion:=CreatePolygonRgn(AP,3,WINDING);
      FillRgn(MemBmp.Canvas.Handle,FillRegion,MemBmp.Canvas.Brush.Handle);
      DeleteObject(FillRegion);
      MemBmp.Canvas.LineTo(AP[2].X,AP[2].Y);
      MemBmp.Canvas.LineTo(AP[0].X,AP[0].Y);

      { SetBkMode makes DrawText's text be transparent }
      SetBkMode(MemBmp.Canvas.Handle,TRANSPARENT);
      MemBmp.Canvas.Font.Assign(FDanHint.HintFont);
      DrawText(MemBmp.Canvas.Handle, StrPCopy(CCaption, Caption), -1, R,
        DT_LEFT or DT_NOPREFIX or DT_WORDBREAK);
      Canvas.CopyMode:=cmSrcCopy;
      Canvas.CopyRect(ClientRect,MemBmp.Canvas,ClientRect);
      MemBmp.Free;
end;

procedure TNewHint.CheckUpLeft(Spot:TPoint);
var
   Width,Height:Integer;
begin
   Dec(Spot.Y,N_PIXELS);
   Width:=UpRect.Right-UpRect.Left;
   Height:=UpRect.Bottom-UpRect.Top;
   SelectHintDirection:=hdUpLeft;
   if (Spot.X+SHADOW_WIDTH-Width)<0 then
      begin
         Inc(Spot.Y,N_PIXELS);{back tp original}
         CheckUpRight(Spot);
         Exit;
      end;
   if (Spot.Y-Height)<0 then
      begin
         Inc(Spot.Y,N_PIXELS);
         CheckDownLeft(Spot);
         Exit;
      end;
   ShowPos.X:=Spot.X+SHADOW_WIDTH-Width;
   ShowPos.Y:=Spot.Y-Height;
end;

procedure TNewHint.CheckUpRight(Spot:TPoint);
var
   Width,Height:Integer;
begin
   Dec(Spot.Y,N_PIXELS);
   Width:=UpRect.Right-UpRect.Left;
   Height:=UpRect.Bottom-UpRect.Top;
   SelectHintDirection:=hdUpRight;
   if (Spot.X+Width)>Screen.Width then
      begin
         Inc(Spot.Y,N_PIXELS);
         CheckUpLeft(Spot);
         Exit;
      end;
   if (Spot.Y-Height)<0 then
      begin
         Inc(Spot.Y,N_PIXELS);
         CheckDownRight(Spot);
         Exit;
      end;
   ShowPos.X:=Spot.X;
   ShowPos.Y:=Spot.Y-Height;
end;

procedure TNewHint.CheckDownRight(Spot:TPoint);
var
   Width,Height:Integer;
begin
   Inc(Spot.Y,N_PIXELS*3);
   Width:=DownRect.Right-DownRect.Left;
   Height:=DownRect.Bottom-DownRect.Top;
   SelectHintDirection:=hdDownRight;
   if (Spot.X+Width)>Screen.Width then
      begin
         Dec(Spot.Y,N_PIXELS*3);
         CheckDownLeft(Spot);
         Exit;
      end;
   if (Spot.Y+Height)>Screen.Height then
      begin
         Dec(Spot.Y,N_PIXELS*3);
         CheckUpRight(Spot);
         Exit;
      end;
   ShowPos.X:=Spot.X;
   ShowPos.Y:=Spot.Y;
end;

procedure TNewHint.CheckDownLeft(Spot:TPoint);
var
   Width,Height:Integer;
begin
   Inc(Spot.Y,N_PIXELS*3);
   Width:=DownRect.Right-DownRect.Left;
   Height:=DownRect.Bottom-DownRect.Top;
   SelectHintDirection:=hdDownLeft;
   if (Spot.X+SHADOW_WIDTH-Width)<0 then
      begin
         Dec(Spot.Y,N_PIXELS*3);
         CheckDownRight(Spot);
         Exit;
      end;
   if (Spot.Y+Height)>Screen.Height then
      begin
         Dec(Spot.Y,N_PIXELS*3);
         CheckUpLeft(Spot);
         Exit;
      end;
   ShowPos.X:=Spot.X+SHADOW_WIDTH-Width;
   ShowPos.Y:=Spot.Y;
end;

function TNewHint.FindCursorControl:TControl;
begin
   {ControlAtPos}
end;

procedure TNewHint.SelectProperHintDirection(ARect:TRect);
var
   Spot:TPoint;
   OldHintDirection,SendHintDirection:THintDirection;
   HintControl:TControl;
begin
   GetCursorPos(Spot);
   HintCOntrol:=FindDragTarget(Spot,True);
   Inc(ARect.Right,10+SHADOW_WIDTH);
   Inc(ARect.Bottom,20);
   UpRect:=ARect;
   Inc(ARect.Bottom,9);
   DownRect:=ARect;
   OldHintDirection:=FDanHint.HintDirection;
   SendHintDirection:=FDanHint.HintDirection;
{ Tricky, why here can't use FDanHint.OnSe...? }
   if Assigned(FDanHint.FOnSelectHintDirection) then
      begin
         FDanHint.FOnSelectHintDirection(HintControl,SendHintDirection);
         FDanHint.HintDirection:=SendHintDirection;
      end;
   case FDanHint.HintDirection of
      hdUpRight:CheckUpRight(Spot);
      hdUpLeft:CheckUpLeft(Spot);
      hdDownRight:CheckDownRight(Spot);
      hdDownLeft:CheckDownLeft(Spot);
   end;
   FDanHint.HintDirection:=OldHintDirection;
end;

procedure TNewHint.ActivateHint(Rect: TRect; const AHint: string);
var
   ScreenDC:HDC;
   LeftTop:TPoint;
   tmpWidth,tmpHeight:Integer;
begin
   MemBmp:=TBitmap.Create;
   Caption := AHint;
   { add by Dan from Here }
   FDanHint:=FindDanHint;

   SelectProperHintDirection(Rect);
   HintDirection:=SelectHintDirection;
   { if the following changes, make sure to modify
     SelectProperHintDirection also }
   Inc(Rect.Right,10+SHADOW_WIDTH);
   Inc(Rect.Bottom,20);
   if (FHintDirection>=hdDownRight) then Inc(Rect.Bottom,9);
   { to expand the rect }
   tmpWidth:=Rect.Right-Rect.Left;
   tmpHeight:=Rect.Bottom-Rect.Top;
   Rect.Left:=ShowPos.X;
   Rect.Top:=ShowPos.Y;
   Rect.Right:=Rect.Left+tmpWidth;
   Rect.Bottom:=Rect.Top+tmpHeight;
   BoundsRect := Rect;

   MemBmp.Width:=Width;
   MemBmp.Height:=Height;

   ScreenDC:=CreateDC('DISPLAY',nil,nil,nil);
   LeftTop.X:=0;
   LeftTop.Y:=0;
   LeftTop:=ClientToScreen(LeftTop);
   { use MemBmp to store the original bitmap
     on screen }
   BitBlt(MemBmp.Canvas.Handle,0,0,Width,Height,ScreenDC,
          LeftTop.X,LeftTop.Y,SRCCOPY);
{   SetBkMode(Canvas.Handle,TRANSPARENT);}

   SetWindowPos(Handle, HWND_TOPMOST, ShowPos.X, ShowPos.Y, 0,
     0, SWP_SHOWWINDOW or SWP_NOACTIVATE or SWP_NOSIZE);
   BitBlt(Canvas.Handle,0,0,Width,Height,MemBmp.Canvas.Handle,
          0,0,SRCCOPY);
   DeleteDC(ScreenDC);
end;  

initialization

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -