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

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

?? unitasdbgrids.pas

?? 仿速達界面控件
?? PAS
?? 第 1 頁 / 共 5 頁
字號:
  if DoSetWidth then
  begin
    if ((cvWidth in FAssignedValues) or (Value <> DefaultWidth))
      and (Value <> -1) then
    begin
      FWidth := Value;
      Include(FAssignedValues, cvWidth);
    end;
    Changed(False);
  end;
end;

procedure TColumn.SetVisible(Value: Boolean);
begin
  if Value <> FVisible then
  begin
    FVisible := Value;
    Changed(True);
  end;
end;

procedure TColumn.SetExpanded(Value: Boolean);
const
  Direction         : array[Boolean] of ShortInt = (-1, 1);
var
  Grid              : TCustomASDBGrid;
  WasShowing        : Boolean;
begin
  if Value <> FExpanded then
  begin
    Grid := GetGrid;
    WasShowing := (Grid <> nil) and Grid.Columns[Grid.SelectedIndex].Showing;
    FExpanded := Value;
    Changed(True);
    if (Grid <> nil) and WasShowing then
    begin
      if not Grid.Columns[Grid.SelectedIndex].Showing then
        // The selected cell was hidden by this expand operation
        // Select 1st child (next col = 1) when parent is expanded
        // Select child's parent (prev col = -1) when parent is collapsed
        Grid.MoveCol(Grid.Col, Direction[FExpanded]);
    end;
  end;
end;

function TColumn.Depth: Integer;
var
  Col               : TColumn;
begin
  Result := 0;
  Col := ParentColumn;
  if Col <> nil then
    Result := Col.Depth + 1;
end;

function TColumn.GetExpandable: Boolean;
var
  Fld               : TField;
begin
  Fld := Field;
  Result := (Fld <> nil) and (Fld.DataType in [ftADT, ftArray]);
end;

procedure TColumn.SetChineseCurrencyStyle(const Value: Boolean);
begin
  if FChineseCurrencyStyle <> Value then
  begin
    FChineseCurrencyStyle := Value;
    //if Value then
    //  FButtonStyle := cbsNone;
    Changed(False);
  end;
end;

function TColumn.GetCurrencySymbol: WideString;
begin
  Result := FCurrencySymbol;
end;

procedure TColumn.SetCurrencySymbol(const Value: WideString);
begin
  if Value <> '' then
    FCurrencySymbol := Value[1];
end;

procedure TColumn.SetRowNumber(const Value: Boolean);
begin
  if FRowNumber <> Value then
  begin
    if Value then
      ReadOnly := True;
    FRowNumber := Value;
    if Grid.Showing then
      Grid.Invalidate;
  end;
end;

procedure TColumn.SetRowNumberFrom(const Value: Integer);
begin
  if FRowNumberFrom <> Value then
  begin
    FRowNumberFrom := Value;
    if Grid.Showing then
      Grid.Invalidate;
  end;
end;

function TColumn.GetButtonStyle: TColumnButtonStyle;
begin
  if FChineseCurrencyStyle then
    Result := cbsNone
  else
    Result := FButtonStyle;
end;

{ TASDBGridColumns }

constructor TASDBGridColumns.Create(Grid: TCustomASDBGrid; ColumnClass:
  TColumnClass);
begin
  inherited Create(ColumnClass);
  FGrid := Grid;
end;

function TASDBGridColumns.Add: TColumn;
begin
  Result := TColumn(inherited Add);
end;

function TASDBGridColumns.GetColumn(Index: Integer): TColumn;
begin
  Result := TColumn(inherited Items[Index]);
end;

function TASDBGridColumns.GetOwner: TPersistent;
begin
  Result := FGrid;
end;

procedure TASDBGridColumns.LoadFromFile(const Filename: string);
var
  S                 : TFileStream;
begin
  S := TFileStream.Create(Filename, fmOpenRead);
  try
    LoadFromStream(S);
  finally
    S.Free;
  end;
end;

type
  TColumnsWrapper = class(TComponent)
  private
    FColumns: TASDBGridColumns;
  published
    property Columns: TASDBGridColumns read FColumns write FColumns;
  end;

procedure TASDBGridColumns.LoadFromStream(S: TStream);
var
  Wrapper           : TColumnsWrapper;
begin
  Wrapper := TColumnsWrapper.Create(nil);
  try
    Wrapper.Columns := FGrid.CreateColumns;
    S.ReadComponent(Wrapper);
    Assign(Wrapper.Columns);
  finally
    Wrapper.Columns.Free;
    Wrapper.Free;
  end;
end;

procedure TASDBGridColumns.RestoreDefaults;
var
  I                 : Integer;
begin
  BeginUpdate;
  try
    for I := 0 to Count - 1 do
      Items[I].RestoreDefaults;
  finally
    EndUpdate;
  end;
end;

procedure TASDBGridColumns.RebuildColumns;

  procedure AddFields(Fields: TFields; Depth: Integer);
  var
    I               : Integer;
  begin
    Inc(Depth);
    for I := 0 to Fields.Count - 1 do
    begin
      Add.FieldName := Fields[I].FullName;
      if Fields[I].DataType in [ftADT, ftArray] then
        AddFields((Fields[I] as TObjectField).Fields, Depth);
    end;
  end;

begin
  if Assigned(FGrid) and Assigned(FGrid.DataSource) and
    Assigned(FGrid.Datasource.Dataset) then
  begin
    FGrid.BeginLayout;
    try
      Clear;
      AddFields(FGrid.Datasource.Dataset.Fields, 0);
    finally
      FGrid.EndLayout;
    end
  end
  else
    Clear;
end;

procedure TASDBGridColumns.SaveToFile(const Filename: string);
var
  S                 : TStream;
begin
  S := TFileStream.Create(Filename, fmCreate);
  try
    SaveToStream(S);
  finally
    S.Free;
  end;
end;

procedure TASDBGridColumns.SaveToStream(S: TStream);
var
  Wrapper           : TColumnsWrapper;
begin
  Wrapper := TColumnsWrapper.Create(nil);
  try
    Wrapper.Columns := Self;
    S.WriteComponent(Wrapper);
  finally
    Wrapper.Free;
  end;
end;

procedure TASDBGridColumns.SetColumn(Index: Integer; Value: TColumn);
begin
  Items[Index].Assign(Value);
end;

procedure TASDBGridColumns.SetState(NewState: TASDBGridColumnsState);
begin
  if NewState = State then
    Exit;
  if NewState = csDefault then
    Clear
  else
    RebuildColumns;
end;

procedure TASDBGridColumns.Update(Item: TCollectionItem);
var
  Raw               : Integer;
begin
  if (FGrid = nil) or (csLoading in FGrid.ComponentState) then
    Exit;
  if Item = nil then
  begin
    FGrid.LayoutChanged;
  end
  else
  begin
    Raw := FGrid.DataToRawColumn(Item.Index);
    FGrid.InvalidateCol(Raw);
    FGrid.ColWidths[Raw] := TColumn(Item).Width;
  end;
end;

function TASDBGridColumns.InternalAdd: TColumn;
begin
  Result := Add;
  Result.IsStored := False;
end;

function TASDBGridColumns.GetState: TASDBGridColumnsState;
begin
  Result := TASDBGridColumnsState((Count > 0) and Items[0].IsStored);
end;

{ TBookmarkList }

constructor TBookmarkList.Create(AGrid: TCustomASDBGrid);
begin
  inherited Create;
  FList := TStringList.Create;
  FList.OnChange := StringsChanged;
  FGrid := AGrid;
end;

destructor TBookmarkList.Destroy;
begin
  Clear;
  FList.Free;
  inherited Destroy;
end;

procedure TBookmarkList.Clear;
begin
  if FList.Count = 0 then
    Exit;
  FList.Clear;
  FGrid.Invalidate;
end;

function TBookmarkList.Compare(const Item1, Item2: TBookmarkStr): Integer;
begin
  with FGrid.Datalink.Datasource.Dataset do
    Result := CompareBookmarks(TBookmark(Item1), TBookmark(Item2));
end;

function TBookmarkList.CurrentRow: TBookmarkStr;
begin
  if not FLinkActive then
    RaiseGridError(sDataSetClosed);
  Result := FGrid.Datalink.Datasource.Dataset.Bookmark;
end;

function TBookmarkList.GetCurrentRowSelected: Boolean;
var
  Index             : Integer;
begin
  Result := Find(CurrentRow, Index);
end;

function TBookmarkList.Find(const Item: TBookmarkStr; var Index: Integer):
  Boolean;
var
  L, H, I, C        : Integer;
begin
  if (Item = FCache) and (FCacheIndex >= 0) then
  begin
    Index := FCacheIndex;
    Result := FCacheFind;
    Exit;
  end;
  Result := False;
  L := 0;
  H := FList.Count - 1;
  while L <= H do
  begin
    I := (L + H) shr 1;
    C := Compare(FList[I], Item);
    if C < 0 then
      L := I + 1
    else
    begin
      H := I - 1;
      if C = 0 then
      begin
        Result := True;
        L := I;
      end;
    end;
  end;
  Index := L;
  FCache := Item;
  FCacheIndex := Index;
  FCacheFind := Result;
end;

function TBookmarkList.GetCount: Integer;
begin
  Result := FList.Count;
end;

function TBookmarkList.GetItem(Index: Integer): TBookmarkStr;
begin
  Result := FList[Index];
end;

function TBookmarkList.IndexOf(const Item: TBookmarkStr): Integer;
begin
  if not Find(Item, Result) then
    Result := -1;
end;

procedure TBookmarkList.LinkActive(Value: Boolean);
begin
  Clear;
  FLinkActive := Value;
end;

procedure TBookmarkList.Delete;
var
  I                 : Integer;
begin
  with FGrid.Datalink.Datasource.Dataset do
  begin
    DisableControls;
    try
      for I := FList.Count - 1 downto 0 do
      begin
        Bookmark := FList[I];
        Delete;
        FList.Delete(I);
      end;
    finally
      EnableControls;
    end;
  end;
end;

function TBookmarkList.Refresh: Boolean;
var
  I                 : Integer;
begin
  Result := False;
  with FGrid.DataLink.Datasource.Dataset do
  try
    CheckBrowseMode;
    for I := FList.Count - 1 downto 0 do
      if not BookmarkValid(TBookmark(FList[I])) then
      begin
        Result := True;
        FList.Delete(I);
      end;
  finally
    UpdateCursorPos;
    if Result then
      FGrid.Invalidate;
  end;
end;

procedure TBookmarkList.SetCurrentRowSelected(Value: Boolean);
var
  Index             : Integer;
  Current           : TBookmarkStr;
begin
  Current := CurrentRow;
  if (Length(Current) = 0) or (Find(Current, Index) = Value) then
    Exit;
  if Value then
    FList.Insert(Index, Current)
  else
    FList.Delete(Index);
  FGrid.InvalidateRow(FGrid.Row);
end;

procedure TBookmarkList.StringsChanged(Sender: TObject);
begin
  FCache := '';
  FCacheIndex := -1;
end;

{ TCustomASDBGrid }

var
  DrawBitmap        : TBitmap;
  UserCount         : Integer;

procedure UsesBitmap;
begin
  if UserCount = 0 then
    DrawBitmap := TBitmap.Create;
  Inc(UserCount);
end;

procedure ReleaseBitmap;
begin
  D

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美性感一区二区三区| 美女网站一区二区| jizzjizzjizz欧美| 国产农村妇女毛片精品久久麻豆| 激情六月婷婷综合| 久久久久99精品一区| 成人av网址在线观看| 亚洲丝袜另类动漫二区| 欧美丝袜自拍制服另类| 免费成人av资源网| 中文一区一区三区高中清不卡| 不卡电影一区二区三区| 一区二区不卡在线视频 午夜欧美不卡在 | 欧美大片日本大片免费观看| 麻豆国产欧美日韩综合精品二区| 国产亚洲精品7777| 色婷婷av一区二区三区软件| 日韩精品免费专区| 精品国产伦一区二区三区免费| 粉嫩一区二区三区性色av| 亚洲精品亚洲人成人网| 7777精品伊人久久久大香线蕉的 | 国产精品情趣视频| 在线免费观看日本欧美| 精品一区二区三区香蕉蜜桃| 国产精品久久久久久久久动漫| 欧美视频你懂的| 国产黄色成人av| 亚洲一区二区三区激情| 精品国产乱码久久久久久浪潮 | 亚洲图片自拍偷拍| 精品国产百合女同互慰| 91久久精品一区二区三区| 精品在线你懂的| 亚洲老司机在线| 久久五月婷婷丁香社区| 欧美日韩综合色| 粉嫩一区二区三区在线看| 蜜臀va亚洲va欧美va天堂| 亚洲视频在线观看一区| 日韩欧美的一区| 欧美午夜电影网| 波多野结衣在线aⅴ中文字幕不卡| 午夜不卡在线视频| 亚洲私人影院在线观看| 国产三级精品视频| 日韩三级在线免费观看| 日本不卡123| 亚洲一区在线看| 日韩av电影天堂| 欧美电影免费提供在线观看| 美国av一区二区| 一区二区三区国产精品| 欧美国产精品专区| 久久嫩草精品久久久精品| 欧美精品1区2区| 欧美午夜免费电影| 色成人在线视频| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 日韩欧美你懂的| 精品婷婷伊人一区三区三| 99re亚洲国产精品| 成人美女视频在线观看18| 国内精品视频一区二区三区八戒| 五月激情综合网| 午夜精品久久久久久久99樱桃| 依依成人精品视频| 日韩美女啊v在线免费观看| 国产精品视频线看| 欧美国产一区在线| 亚洲国产激情av| 欧美激情一区二区三区蜜桃视频| 久久久久久久免费视频了| 亚洲精品在线免费播放| 精品久久久久一区| 欧美大尺度电影在线| 日韩欧美在线网站| 日韩精品一区二区三区在线观看 | 日韩欧美中文字幕一区| 91精品欧美一区二区三区综合在 | 777xxx欧美| 精品国产一区二区三区久久久蜜月| 成人综合婷婷国产精品久久蜜臀 | av在线播放一区二区三区| 国产成a人无v码亚洲福利| 国产成人av一区| 国产精品一区二区免费不卡 | 国产91在线|亚洲| 粉嫩高潮美女一区二区三区| 不卡的av中国片| 欧洲精品在线观看| 这里只有精品免费| 884aa四虎影成人精品一区| 日韩欧美专区在线| 国产欧美综合色| 国产亚洲1区2区3区| 欧美喷潮久久久xxxxx| 欧美精品色综合| 精品久久国产97色综合| 国产偷国产偷精品高清尤物| 国产精品免费视频观看| 亚洲精品国产一区二区精华液 | 亚洲地区一二三色| 日韩中文字幕91| 激情都市一区二区| 色偷偷一区二区三区| 欧美高清激情brazzers| 久久先锋影音av鲁色资源网| 亚洲欧美日韩系列| 麻豆精品一区二区三区| 91看片淫黄大片一级在线观看| 欧美日韩亚洲综合| 久久九九99视频| 亚洲一级片在线观看| 老司机午夜精品99久久| www.亚洲在线| 欧美一级黄色录像| 最新中文字幕一区二区三区| 日日摸夜夜添夜夜添精品视频 | 波多野结衣中文字幕一区 | 香蕉久久夜色精品国产使用方法 | 日韩欧美www| 亚洲天堂精品视频| 精品一区二区三区免费视频| 91在线丨porny丨国产| 日韩午夜在线影院| 亚洲激情在线激情| 国产一区二区在线看| 欧美日韩精品一区二区三区四区 | 成人av网站在线观看免费| 精品久久久久99| 亚洲欧洲国产专区| 久久9热精品视频| 欧美视频一区二区三区| 中文字幕乱码一区二区免费| 蜜桃一区二区三区在线观看| 色狠狠色噜噜噜综合网| 久久久久久99精品| 奇米四色…亚洲| 在线欧美日韩精品| 国产精品污网站| 国产一区二区精品久久99| 欧美日韩亚洲国产综合| 日韩一区在线免费观看| 国产精品77777| 日韩精品一区二区三区视频在线观看 | 亚洲精品亚洲人成人网在线播放| 国产成人在线观看| 久久综合精品国产一区二区三区| 日韩中文字幕区一区有砖一区| 欧美综合亚洲图片综合区| 中文字幕一区二区三区蜜月| 国产成人精品1024| 久久久午夜电影| 国产一区二区三区久久久 | 91免费观看视频在线| 日本一区二区三区在线观看| 国内精品视频666| 精品成人私密视频| 韩国女主播成人在线观看| 日韩欧美二区三区| 久久精品国产99久久6| 日韩欧美在线网站| 美女国产一区二区三区| 日韩午夜激情视频| 蜜桃在线一区二区三区| 337p日本欧洲亚洲大胆精品| 韩国毛片一区二区三区| 久久精品一区蜜桃臀影院| 国产乱人伦精品一区二区在线观看| 欧美mv日韩mv国产网站| 激情国产一区二区| 日本一区二区电影| 99热这里都是精品| 亚洲精品视频自拍| 欧美三级一区二区| 卡一卡二国产精品| 久久久久久久网| 99久久精品免费看国产 | 欧美不卡一区二区三区| 另类小说色综合网站| 国产日韩一级二级三级| 99re热视频精品| 午夜精品久久久久| 日韩欧美一级在线播放| 激情综合一区二区三区| 欧美韩日一区二区三区四区| av动漫一区二区| 午夜欧美视频在线观看| 精品三级在线看| av在线播放一区二区三区| 亚洲第一狼人社区| 精品国产乱码久久久久久免费| 成人精品一区二区三区四区 | 色综合天天综合在线视频| 亚洲成人精品一区| 久久免费精品国产久精品久久久久| 成人深夜福利app| 日韩经典中文字幕一区| 国产三级三级三级精品8ⅰ区|