亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? bscategorybuttons.pas

?? 一套支持Delphi的VCL庫
?? PAS
?? 第 1 頁 / 共 5 頁
字號:
      GetObject(Canvas.Font.Handle, SizeOf(F), @F);
      F.lfEscapement := round(0);
      Buffer.Canvas.Font.Handle := CreateFontIndirect(F);
    end;

  if (bsboBoldCaptions in ButtonOptions) then
    Buffer.Canvas.Font.Style := Canvas.Font.Style - [fsBold];

  if not Category.Collapsed then
  begin
    { Draw the buttons }
    if (FButtonFlow = bscbfVertical) and (bsboFullSize in ButtonOptions) then
      ActualWidth := ClientWidth - FSideBufferSize - GetScrollSize - 5
    else
      ActualWidth := FButtonWidth;

    ButtonStart := ButtonBounds.Left;
    ButtonTop := ButtonBounds.Top;
    ButtonLeft := ButtonStart;
    for I := 0 to Category.Items.Count - 1 do
    begin
      { Don't waste time painting clipped things }
      if (FButtonFlow = bscbfVertical) and (ButtonTop > ClientHeight) then
        Break; { Done drawing }

      { Don't waste time drawing what is offscreen }
      ButtonBottom := ButtonTop + FButtonHeight;
      ButtonRight := ButtonLeft + ActualWidth;
      if (ButtonBottom >= 0) and (ButtonRight >= 0) then
      begin
        ButtonRect := Rect(ButtonLeft, ButtonTop, ButtonRight, ButtonBottom);

        Button := Category.Items[I];
        DrawState := [];
        if Button = FHotButton then
        begin
          Include(DrawState, bsbdsHot);
          if Button = FDownButton then
            Include(DrawState, bsbdsDown);
        end;
        if Button = FSelectedItem then
          Include(DrawState, bsbdsSelected)
        else if (Button = FFocusedItem) and Focused and (FDownButton = nil) then
          Include(DrawState, bsbdsFocused);

        if Button = FInsertTop then
          Include(DrawState, bsbdsInsertTop)
        else if Button = FInsertBottom then
          Include(DrawState, bsbdsInsertBottom)
        else if Button = FInsertRight then
          Include(DrawState, bsbdsInsertRight)
        else if Button = FInsertLeft then
          Include(DrawState, bsbdsInsertLeft);

        BR := ButtonRect;
        OffsetRect(BR, -CategoryRealBounds.Left, -CategoryRealBounds.Top);
        DrawButton(Button, Buffer.Canvas, BR, DrawState);
      end;
      Inc(ButtonLeft, ActualWidth);

      if (ButtonLeft + ActualWidth) > ButtonBounds.Right then
      begin
        ButtonLeft := ButtonStart;
        Inc(ButtonTop, FButtonHeight);
      end;
    end;
  end;

  Canvas.Draw(CategoryRealBounds.Left, CategoryRealBounds.Top, Buffer);
  Buffer.Free;
end;

procedure TbsSkinCategoryButtons.Paint;

procedure DrawSkinBGRect(R: TRect);
var
  PanelData: TbsDataSkinPanelControl;
  w, h, X, Y, XCnt, YCnt: Integer;
  Buffer, Buffer2: TBitMap;
  FSkinPicture: TBitMap;
begin
  if (RectWidth(R) <= 0) or (RectHeight(R) <= 0) then Exit;
  PanelData := TbsDataSkinPanelControl(SkinData.CtrlList[SkinData.GetControlIndex('panel')]);
  Buffer := TBitMap.Create;
  with PanelData do
  begin
    FSkinPicture := TBitMap(SkinData.FActivePictures.Items[PictureIndex]);
    Buffer.Width := RectWidth(ClRect);
    Buffer.Height := RectHeight(ClRect);
    Buffer.Canvas.CopyRect(Rect(0, 0, Buffer.Width, Buffer.Height),
        FSkinPicture.Canvas,
          Rect(SkinRect.Left + ClRect.Left, SkinRect.Top + ClRect.Top,
               SkinRect.Left + ClRect.Right,
               SkinRect.Top + ClRect.Bottom));
    w := RectWidth(ClRect);
    h := RectHeight(ClRect);
    XCnt := RectWidth(R) div w;
    YCnt := RectHeight(R) div h;
    if StretchEffect
      then
        begin
          case StretchType of
            bsstFull:
              Canvas.StretchDraw(R, Buffer);
            bsstHorz:
              begin
                Buffer2 := TBitMap.Create;
                Buffer2.Width := Buffer.Width;
                Buffer2.Height := RectHeight(R);
                Buffer2.Canvas.StretchDraw(Rect(0, 0, Buffer2.Width, Buffer2.Height), Buffer);
                XCnt := Width div Buffer2.Width;
                 for X := 0 to XCnt do
                   Canvas.Draw(R.Left + X * Buffer2.Width, R.Top, Buffer2);
                 Buffer2.Free;
              end;
            bsstVert:
              begin
                Buffer2 := TBitMap.Create;
                Buffer2.Width := RectWidth(R);
                Buffer2.Height := Buffer.Height;
                Buffer2.Canvas.StretchDraw(Rect(0, 0, Buffer2.Width, Buffer2.Height), Buffer);
                YCnt := RectHeight(R) div Buffer2.Height;
                for Y := 0 to YCnt do
                  Canvas.Draw(R.Left, R.Top + Y * Buffer2.Height, Buffer2);
                Buffer2.Free;
              end;
          end;
        end
     else
    for X := 0 to XCnt do
    for Y := 0 to YCnt do
      Canvas.Draw(X * w + R.Left, Y * h + R.Top, Buffer);
  end;
  Buffer.Free;
end;

var
  TopCategory: Integer;
  CatIndex: Integer;
  StartingPos: Integer;
  EndingPos: Integer;
  Category: TbsButtonCategory;
  DrawRect: TRect;
begin
  StartingPos := 0;
  TopCategory := GetIndexOfFirstCategory;
  if (TopCategory > -1) and (TopCategory < FButtonCategories.Count) then
  begin
    { Calculate the virtual position and ending position }
    StartingPos := FButtonCategories[TopCategory].FStart - GetScrollOffset;
    if FButtonFlow = bscbfVertical then
      EndingPos := ClientHeight
    else
      EndingPos := ClientWidth;
    for CatIndex := TopCategory to FButtonCategories.Count - 1 do
    begin
      Category := FButtonCategories[CatIndex];
      DrawCategory(Category, Canvas, StartingPos);
      StartingPos := StartingPos + Category.FEnd - Category.FStart;
      { Stop drawing early, if we can }
      if StartingPos > EndingPos then
        Break;
    end;
  end;
  //
  Canvas.Brush.Color := clBtnFace;
  //
  if (FButtonFlow = bscbfVertical) and
     (StartingPos < ClientHeight)
  then
    begin
      DrawRect := Rect(0, StartingPos, ClientWidth,
        ClientHeight);
      if (SkinData <> nil) and (not Skindata.Empty) and
            (SkinData.GetControlIndex('panel') <> -1)
      then
        DrawSkinBGRect(DrawRect)
      else
        Canvas.FillRect(DrawRect);
    end
  else
  if (FButtonFlow = bscbfHorizontal) and
     (StartingPos < ClientWidth)
  then
    begin
      DrawRect := Rect(StartingPos, 0, ClientWidth,
        ClientHeight);
      if (SkinData <> nil) and (not Skindata.Empty) and
            (SkinData.GetControlIndex('panel') <> -1)
      then
        DrawSkinBGRect(DrawRect)
      else
        Canvas.FillRect(DrawRect);
    end
end;

function TbsSkinCategoryButtons.CalcButtonsPerRow: Integer;
begin
  if bsboFullSize in ButtonOptions
  then
    Result := 1
  else
  begin
    Result := (ClientWidth - GetScrollSize - FSideBufferSize - 1) div FButtonWidth;
    if Result * FButtonWidth > ClientWidth - GetScrollSize - FSideBufferSize - 1
    then
      Dec(Result)
    else
    if (Result + 1) * FButtonWidth < ClientWidth - GetScrollSize - FSideBufferSize - 1
    then
      Inc(Result);
    if Result <= 0 then Result := 1;
  end;
end;

function TbsSkinCategoryButtons.CalcButtonsPerCol: Integer;
begin
  Result := (ClientHeight - FSideBufferSize - GetScrollSize - 1) div FButtonHeight;
  if Result * FButtonHeight > ClientHeight - FSideBufferSize - GetScrollSize
  then
    Dec(Result)
  else
  if (Result + 1) * FButtonHeight < ClientHeight - FSideBufferSize - GetScrollSize
  then
    Inc(Result);
  if Result = 0 then
    Result := 1;
end;

const
  cScrollBarKind: array[TbsCatButtonFlow] of Integer = (SB_VERT, SB_HORZ);

procedure TbsSkinCategoryButtons.Resize;

  function CalcCategoryHeights: Integer;
  var
    I: Integer;
    Category: TbsButtonCategory;
    Y: Integer;
    ButtonsPerRow: Integer;
  begin
    ButtonsPerRow := CalcButtonsPerRow;
    Y := 0;
    for I := 0 to FButtonCategories.Count - 1 do
    begin
      Category := FButtonCategories[I];
      Category.FStart := Y;
      Category.FEnd := Y + CalcCategoryHeight(Category, ButtonsPerRow);
      Y := Category.FEnd;
    end;
    Result := Y;
  end;

  function CalcCategoryWidths: Integer;
  var
    I: Integer;
    Category: TbsButtonCategory;
    X: Integer;
    ButtonsPerCol: Integer;
  begin
    ButtonsPerCol := CalcButtonsPerCol;
    X := 0;
    for I := 0 to FButtonCategories.Count - 1 do
    begin
      Category := FButtonCategories[I];
      Category.FStart := X;
      Category.FEnd := X + CalcCategoryWidth(Category, ButtonsPerCol);
      X := Category.FEnd;
    end;
    Result := X;
  end;

var
  ScrollInfo: TScrollInfo;
  TotalAmount: Integer;
  AmountSeen: Integer;
begin
  inherited;
  if (not HandleAllocated) or (FGutterSize = 0) then
    Exit;

  if FButtonFlow = bscbfVertical then
  begin
    TotalAmount := CalcCategoryHeights;
    AmountSeen := ClientHeight;
  end
  else
  begin
    TotalAmount := CalcCategoryWidths;
    AmountSeen := ClientWidth;
  end;

  { Do we have to take the scrollbar into consideration? }
  if (TotalAmount > AmountSeen) then
  begin
    { The max size is the number of "rows of buttons" that are hidden }
    FScrollBarMax := TotalAmount div FGutterSize;
    ScrollInfo.nMax := FScrollBarMax;

    AmountSeen := AmountSeen div FGutterSize;
    if FScrollBarMax > AmountSeen then
      FPageAmount := AmountSeen
    else
      FPageAmount := FScrollBarMax;

    { Adjust the max to NOT contain the page amount }
    FScrollBarMax := FScrollBarMax - FPageAmount + 1;

    if FScrollBarPos > FScrollBarMax then
      FScrollBarPos := FScrollBarMax;

    ScrollInfo.cbSize := SizeOf(TScrollInfo);
    ScrollInfo.fMask := SIF_RANGE or SIF_POS or SIF_PAGE;
    ScrollInfo.nMin := 0;
    ScrollInfo.nPos := FScrollBarPos;
    ScrollInfo.nPage := FPageAmount;
    if FSkinScrollBar = nil
    then
      begin
        ShowSkinScrollBar(True);
      end;
    FSkinScrollBar.SetRange(ScrollInfo.nMin, ScrollInfo.nMax,
        FScrollBarPos, ScrollInfo.nPage);
  end
  else
  begin
    FScrollBarPos := 0;
    FScrollBarMax := 0;
    if FSkinScrollBar <> nil
    then
      begin
        ShowSkinScrollBar(False);
      end;
  end;
end;

procedure TbsSkinCategoryButtons.SetButtonHeight(const Value: Integer);
begin
  if FButtonHeight <> Value then
  begin
    FButtonHeight := Value;
    Resize;
    UpdateAllButtons;
  end;
end;

procedure TbsSkinCategoryButtons.SetButtonCategories(const Value: TbsButtonCategories);
begin
  FButtonCategories.Assign(Value);
end;

procedure TbsSkinCategoryButtons.SetCatButtonOptions(const Value: TbsCatButtonOptions);
begin
  if FButtonOptions <> Value then
  begin
    FButtonOptions := Value;
    CalcBufferSizes;
    Resize;
    UpdateAllButtons;
  end;
end;

procedure TbsSkinCategoryButtons.SetButtonWidth(const Value: Integer);
begin
  if FButtonWidth <> Value then
  begin
    FButtonWidth := Value;
    Resize;
    UpdateAllButtons;
  end;
end;

procedure TbsSkinCategoryButtons.SBChange(Sender: TObject);
var
  ScrollCode: TScrollCode;
begin
  ScrollCode := scPosition;
  ScrollPosChanged(TScrollCode(ScrollCode), FSkinScrollBar.Position);
end;

procedure TbsSkinCategoryButtons.SBUpClick(S

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美日韩在线| 国产日韩欧美a| 午夜激情综合网| 欧美精品xxxxbbbb| 老鸭窝一区二区久久精品| 日韩欧美国产一区二区三区| 捆绑调教美女网站视频一区| 国产亚洲综合色| 99精品视频在线播放观看| 一区二区三区欧美亚洲| 欧美精品在线观看一区二区| 久久精品72免费观看| 日本一区二区三区视频视频| 色婷婷av一区二区三区软件| 日韩高清不卡一区二区| 久久婷婷久久一区二区三区| 国产suv精品一区二区883| 亚洲欧美激情小说另类| 欧美精品自拍偷拍| 国产成人免费视频精品含羞草妖精| 国产精品日韩精品欧美在线| 欧美丝袜自拍制服另类| 国内精品视频666| 一区二区在线观看视频在线观看| 欧美日韩在线播放三区四区| 国产一区二区主播在线| 亚洲日本成人在线观看| 欧美草草影院在线视频| 99re8在线精品视频免费播放| 亚洲成av人影院在线观看网| 国产日本亚洲高清| 欧美日韩国产高清一区| 高清成人免费视频| 天天色综合天天| 中文字幕永久在线不卡| 欧美va亚洲va香蕉在线| 99综合电影在线视频| 免费成人小视频| 亚洲精品免费在线播放| 国产网站一区二区三区| 91精品国产色综合久久久蜜香臀| 成人av资源在线观看| 老司机精品视频线观看86| 一区二区欧美视频| 久久久www成人免费毛片麻豆 | 在线一区二区视频| 国内精品久久久久影院色| 亚洲影院理伦片| 国产精品色在线| 久久免费电影网| 欧美一区二区三区免费在线看| 97超碰欧美中文字幕| 国产一区美女在线| 美洲天堂一区二卡三卡四卡视频 | 亚洲风情在线资源站| 亚洲国产精品黑人久久久| 4hu四虎永久在线影院成人| 91麻豆精品视频| 国产**成人网毛片九色| 国产精品一线二线三线| 麻豆91精品视频| 日韩福利电影在线| 亚洲国产视频a| 一区2区3区在线看| 亚洲视频一区二区免费在线观看| 国产亚洲欧美在线| 久久亚区不卡日本| 精品国精品国产| 日韩精品一区二区三区中文不卡| 3d成人动漫网站| 欧美男男青年gay1069videost| 在线一区二区三区四区五区 | 国产精品资源在线看| 精品一区二区三区在线播放| 日韩电影免费在线看| 午夜不卡在线视频| 免费观看在线色综合| 青青草国产成人99久久| 蜜臀va亚洲va欧美va天堂| 麻豆精品视频在线| 极品少妇xxxx偷拍精品少妇| 美国三级日本三级久久99| 日本成人在线一区| 精品一区二区成人精品| 国产一区二区久久| 成人黄色av电影| 91在线国产观看| 在线观看亚洲a| 欧美日韩免费电影| 日韩欧美中文字幕精品| 久久久亚洲精品石原莉奈| 久久久久国产精品人| 国产人成一区二区三区影院| 国产精品美女久久久久av爽李琼 | 国产拍欧美日韩视频二区| 亚洲国产精品二十页| 亚洲视频免费观看| 亚洲123区在线观看| 久久99精品久久久久久动态图 | 亚洲人成伊人成综合网小说| 一区二区三区欧美在线观看| 日本午夜精品一区二区三区电影| 九九**精品视频免费播放| 国产成人av福利| 色婷婷精品大视频在线蜜桃视频| 欧美日韩国产在线观看| 精品日韩一区二区| 中文字幕日本不卡| 男女激情视频一区| 成人av在线资源网站| 欧美午夜一区二区三区免费大片| 日韩西西人体444www| 欧美经典三级视频一区二区三区| 亚洲精品亚洲人成人网在线播放| 免费欧美在线视频| 99在线精品免费| 欧美一区午夜视频在线观看| 久久久久久久性| 无吗不卡中文字幕| 成人午夜视频网站| 欧美一区二区三区四区视频 | 亚洲综合一二区| 激情五月婷婷综合| 欧美特级限制片免费在线观看| 久久女同互慰一区二区三区| 亚洲专区一二三| 国产伦精品一区二区三区视频青涩 | 欧美一区三区二区| 国产精品毛片高清在线完整版 | 亚洲欧美成人一区二区三区| 日本亚洲三级在线| 色婷婷亚洲精品| 久久久久久99久久久精品网站| 午夜成人免费电影| 色综合网色综合| 国产亚洲一区二区在线观看| 日韩国产在线观看| 欧美午夜片在线看| 亚洲欧洲另类国产综合| 国产精品亚洲人在线观看| 欧美日韩高清一区二区三区| 亚洲人成精品久久久久久| 国产精品一区二区在线观看不卡| 欧美放荡的少妇| 夜夜揉揉日日人人青青一国产精品| 国产成人啪免费观看软件| 欧美成人午夜电影| 免播放器亚洲一区| 欧美老女人在线| 五月婷婷久久丁香| 欧美三级电影在线看| 亚洲视频1区2区| 99精品在线免费| 国产精品久久久久永久免费观看 | 久久美女高清视频| 久久99精品网久久| 日韩欧美激情一区| 爽好久久久欧美精品| 欧美日韩午夜精品| 亚洲一区成人在线| 欧美性大战久久久久久久蜜臀| 亚洲婷婷在线视频| 91视频观看视频| 日韩一区日韩二区| 色综合久久综合网欧美综合网 | 国产精品一区二区无线| 欧美电视剧免费全集观看 | 国产乱码精品一区二区三区忘忧草| 欧美精品日日鲁夜夜添| 日韩电影在线观看网站| 日韩免费视频一区| 国产在线精品国自产拍免费| 欧美精品一区二区三区四区| 国产一区二区按摩在线观看| 国产婷婷精品av在线| 成人一区二区三区视频在线观看 | 蜜桃精品视频在线| 日韩视频免费观看高清完整版| 免费黄网站欧美| 久久久久久免费网| caoporm超碰国产精品| 亚洲免费在线视频一区 二区| 欧美无砖专区一中文字| 日韩精品成人一区二区在线| 日韩女优制服丝袜电影| 国产精品系列在线播放| 国产精品久久久久精k8| 91精彩视频在线| 天堂久久一区二区三区| 精品福利视频一区二区三区| 丁香婷婷深情五月亚洲| 亚洲欧美在线aaa| 欧美日韩久久久一区| 九九精品一区二区| 中文字幕五月欧美| 正在播放一区二区| 国产91丝袜在线播放九色| 亚洲男人电影天堂| 精品久久久久久久久久久久包黑料| 国产成人亚洲综合a∨婷婷图片|