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

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

?? tntdbgrids.pas

?? TNT Components Source
?? PAS
?? 第 1 頁 / 共 3 頁
字號:
procedure TTntPopupListbox.CreateWnd;
begin
  inherited CreateWnd;
  Windows.SetParent(Handle, 0);
  CallWindowProc(DefWndProc, Handle, wm_SetFocus, 0, 0);
end;

procedure TTntPopupListbox.WMChar(var Message: TWMChar);
var
  Key: WideChar;
begin
  Key := GetWideCharFromWMCharMsg(Message);
  KeyPressW(Key);
  SetWideCharForWMCharMsg(Message, Key);
  inherited;
end;

procedure TTntPopupListbox.KeypressW(var Key: WideChar);
var
  TickCount: Integer;
begin
  case Key of
    #8, #27: FSearchText := '';
    #32..High(WideChar):
      begin
        TickCount := GetTickCount;
        if TickCount - FSearchTickCount > 2000 then FSearchText := '';
        FSearchTickCount := TickCount;
        if Length(FSearchText) < 32 then FSearchText := FSearchText + Key;
        if IsWindowUnicode(Handle) then
          SendMessageW(Handle, LB_SelectString, WORD(-1), Longint(PWideChar(FSearchText)))
        else
          SendMessageA(Handle, LB_SelectString, WORD(-1), Longint(PAnsiChar(AnsiString(FSearchText))));
        Key := #0;
      end;
  end;
end;

procedure TTntPopupListbox.MouseUp(Button: TMouseButton; Shift: TShiftState;
  X, Y: Integer);
begin
  inherited MouseUp(Button, Shift, X, Y);
  (Owner as TDBGridInplaceEdit{TNT-ALLOW TDBGridInplaceEdit}).CloseUp((X >= 0) and (Y >= 0) and
      (X < Width) and (Y < Height));
end;

{ TTntPopupDataList }
type
  TTntPopupDataList = class(TPopupDataList)
  protected
    procedure Paint; override;
  end;

procedure TTntPopupDataList.Paint;
var
  FRecordIndex: Integer;
  FRecordCount: Integer;
  FKeySelected: Boolean;
  FKeyField: TField;

  procedure UpdateListVars;
  begin
    if ListActive then
    begin
      FRecordIndex := ListLink.ActiveRecord;
      FRecordCount := ListLink.RecordCount;
      FKeySelected := not VarIsNull(KeyValue) or
        not ListLink.DataSet.BOF;
    end else
    begin
      FRecordIndex := 0;
      FRecordCount := 0;
      FKeySelected := False;
    end;

    FKeyField := nil;
    if ListLink.Active and (KeyField <> '') then
      FKeyField := GetFieldProperty(ListLink.DataSet, Self, KeyField);
  end;

  function VarEquals(const V1, V2: Variant): Boolean;
  begin
    Result := False;
    try
      Result := V1 = V2;
    except
    end;
  end;

var
  I, J, W, X, TxtWidth, TxtHeight, LastFieldIndex: Integer;
  S: WideString;
  R: TRect;
  Selected: Boolean;
  Field: TField;
  AAlignment: TAlignment;
begin
  UpdateListVars;
  Canvas.Font := Font;
  TxtWidth := WideCanvasTextWidth(Canvas, '0');
  TxtHeight := WideCanvasTextHeight(Canvas, '0');
  LastFieldIndex := ListFields.Count - 1;
  if ColorToRGB(Color) <> ColorToRGB(clBtnFace) then
    Canvas.Pen.Color := clBtnFace else
    Canvas.Pen.Color := clBtnShadow;
  for I := 0 to RowCount - 1 do
  begin
    if Enabled then
      Canvas.Font.Color := Font.Color else
      Canvas.Font.Color := clGrayText;
    Canvas.Brush.Color := Color;
    Selected := not FKeySelected and (I = 0);
    R.Top := I * TxtHeight;
    R.Bottom := R.Top + TxtHeight;
    if I < FRecordCount then
    begin
      ListLink.ActiveRecord := I;
      if not VarIsNull(KeyValue) and
        VarEquals(FKeyField.Value, KeyValue) then
      begin
        Canvas.Font.Color := clHighlightText;
        Canvas.Brush.Color := clHighlight;
        Selected := True;
      end;
      R.Right := 0;
      for J := 0 to LastFieldIndex do
      begin
        Field := ListFields[J];
        if J < LastFieldIndex then
          W := Field.DisplayWidth * TxtWidth + 4 else
          W := ClientWidth - R.Right;
        S := GetWideDisplayText(Field);
        X := 2;
        AAlignment := Field.Alignment;
        if UseRightToLeftAlignment then ChangeBiDiModeAlignment(AAlignment);
        case AAlignment of
          taRightJustify: X := W - WideCanvasTextWidth(Canvas, S) - 3;
          taCenter: X := (W - WideCanvasTextWidth(Canvas, S)) div 2;
        end;
        R.Left := R.Right;
        R.Right := R.Right + W;
        if SysLocale.MiddleEast then TControlCanvas(Canvas).UpdateTextFlags;
        WideCanvasTextRect(Canvas, R, R.Left + X, R.Top, S);
        if J < LastFieldIndex then
        begin
          Canvas.MoveTo(R.Right, R.Top);
          Canvas.LineTo(R.Right, R.Bottom);
          Inc(R.Right);
          if R.Right >= ClientWidth then Break;
        end;
      end;
    end;
    R.Left := 0;
    R.Right := ClientWidth;
    if I >= FRecordCount then Canvas.FillRect(R);
    if Selected then
      Canvas.DrawFocusRect(R);
  end;
  if FRecordCount <> 0 then ListLink.ActiveRecord := FRecordIndex;
end;

//-----------------------------------------------------------------------------------------
//                   TDBGridInplaceEdit - Delphi 6 and higher
//-----------------------------------------------------------------------------------------

constructor TDBGridInplaceEdit{TNT-ALLOW TDBGridInplaceEdit}.Create(Owner: TComponent);
begin
  inherited Create(Owner);
  FLookupSource := TDataSource.Create(Self);
end;

function TDBGridInplaceEdit{TNT-ALLOW TDBGridInplaceEdit}.GetWidePickListBox: TTntCustomListBox;
var
  PopupListbox: TTntPopupListbox;
begin
  if not Assigned(FWidePickListBox) then
  begin
    PopupListbox := TTntPopupListbox.Create(Self);
    PopupListbox.Visible := False;
    PopupListbox.Parent := Self;
    PopupListbox.OnMouseUp := ListMouseUp;
    PopupListbox.IntegralHeight := True;
    PopupListbox.ItemHeight := 11;
    FWidePickListBox := PopupListBox;
  end;
  Result := FWidePickListBox;
end;

procedure TDBGridInplaceEdit{TNT-ALLOW TDBGridInplaceEdit}.CloseUp(Accept: Boolean);
var
  MasterField: TField;
  ListValue: Variant;
begin
  if ListVisible then
  begin
    if GetCapture <> 0 then SendMessage(GetCapture, WM_CANCELMODE, 0, 0);
    if ActiveList = DataList then
      ListValue := DataList.KeyValue
    else
      if WidePickListBox.ItemIndex <> -1 then
        ListValue := WidePickListBox.Items[WidePickListBox.ItemIndex];
    SetWindowPos(ActiveList.Handle, 0, 0, 0, 0, 0, SWP_NOZORDER or
      SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE or SWP_HIDEWINDOW);
    ListVisible := False;
    if Assigned(FDataList) then
      FDataList.ListSource := nil;
    FLookupSource.Dataset := nil;
    Invalidate;
    if Accept then
      if ActiveList = DataList then
        with Grid as TTntCustomDBGrid, Columns[SelectedIndex].Field do
        begin
          MasterField := DataSet.FieldByName(KeyFields);
          if MasterField.CanModify and DataLink.Edit then
            MasterField.Value := ListValue;
        end
      else
        if (not VarIsNull(ListValue)) and EditCanModify then
          with Grid as TTntCustomDBGrid do
            SetWideText(Columns[SelectedIndex].Field, ListValue)
  end;
end;

procedure TDBGridInplaceEdit{TNT-ALLOW TDBGridInplaceEdit}.DoEditButtonClick;
begin
  (Grid as TTntCustomDBGrid).EditButtonClick;
end;

type TAccessTntCustomListbox = class(TTntCustomListbox);

procedure TDBGridInplaceEdit{TNT-ALLOW TDBGridInplaceEdit}.DropDown;
var
   Column: TTntColumn;
   I, J, Y: Integer;
begin
  if not ListVisible then
  begin
    with (Grid as TTntCustomDBGrid) do
      Column := Columns[SelectedIndex] as TTntColumn;
    if ActiveList = FDataList then
      with Column.Field do
      begin
        FDataList.Color := Color;
        FDataList.Font := Font;
        FDataList.RowCount := Column.DropDownRows;
        FLookupSource.DataSet := LookupDataSet;
        FDataList.KeyField := LookupKeyFields;
        FDataList.ListField := LookupResultField;
        FDataList.ListSource := FLookupSource;
        FDataList.KeyValue := DataSet.FieldByName(KeyFields).Value;
      end
    else if ActiveList = WidePickListBox then
    begin
      WidePickListBox.Items.Assign(Column.WidePickList);
      DropDownRows := Column.DropDownRows;
      // this is needed as inherited doesn't know about our WidePickListBox
      if (DropDownRows > 0) and (WidePickListBox.Items.Count >= DropDownRows) then
        WidePickListBox.Height := DropDownRows * TAccessTntCustomListbox(WidePickListBox as TTntCustomListbox).ItemHeight + 4
      else
        WidePickListBox.Height := WidePickListBox.Items.Count * TAccessTntCustomListbox(WidePickListBox as TTntCustomListbox).ItemHeight + 4;
      if Text = '' then
        WidePickListBox.ItemIndex := -1
      else
        WidePickListBox.ItemIndex := WidePickListBox.Items.IndexOf(Text);
      J := WidePickListBox.ClientWidth;
      for I := 0 to WidePickListBox.Items.Count - 1 do
      begin
        Y := WideCanvasTextWidth(WidePickListBox.Canvas, WidePickListBox.Items[I]);
        if Y > J then J := Y;
      end;
      WidePickListBox.ClientWidth := J;
    end;
  end;
  inherited DropDown;
end;

procedure TDBGridInplaceEdit{TNT-ALLOW TDBGridInplaceEdit}.UpdateContents;
var
  Column: TTntColumn;
begin
  inherited UpdateContents;
  if EditStyle = esPickList then
    ActiveList := WidePickListBox;
  if FUseDataList then
  begin
    if FDataList = nil then
    begin
      FDataList := TTntPopupDataList.Create(Self);
      FDataList.Visible := False;
      FDataList.Parent := Self;
      FDataList.OnMouseUp := ListMouseUp;
    end;
    ActiveList := FDataList;
  end;
  with (Grid as TTntCustomDBGrid) do
    Column := Columns[SelectedIndex] as TTntColumn;
  Self.ReadOnly := Column.ReadOnly;
  Font.Assign(Column.Font);
  ImeMode := Column.ImeMode;
  ImeName := Column.ImeName;
end;

//-----------------------------------------------------------------------------------------

{ TTntDBGridInplaceEdit }

procedure TTntDBGridInplaceEdit.CreateWindowHandle(const Params: TCreateParams);
begin
  TntCustomEdit_CreateWindowHandle(Self, Params);
end;

function TTntDBGridInplaceEdit.GetText: WideString;
begin
  Result := TntControl_GetText(Self);
end;

procedure TTntDBGridInplaceEdit.SetText(const Value: WideString);
begin
  TntControl_SetText(Self, Value);
end;

procedure TTntDBGridInplaceEdit.WMSetText(var Message: TWMSetText);
begin
  if (not FBlockSetText) then
    inherited;
end;

procedure TTntDBGridInplaceEdit.UpdateContents;
var
  Grid: TTntCustomDBGrid;
begin
  Grid := Self.Grid as TTntCustomDBGrid;
  EditMask  := Grid.GetEditMask(Grid.Col, Grid.Row);
  Text      := Grid.GetEditText(Grid.Col, Grid.Row);
  MaxLength := Grid.GetEditLimit;

  FBlockSetText := True;
  try
    inherited;
  finally
    FBlockSetText := False;
  end;
end;

procedure TTntDBGridInplaceEdit.DblClick;
begin
  FInDblClick := True;
  try
    inherited;
  finally
    FInDblClick := False;
  end;
end;

{ TTntGridDataLink }

procedure TTntGridDataLink.GridUpdateFieldText(Sender: TField; const Text: AnsiString);
begin
  Sender.OnSetText := OriginalSetText;
  if Assigned(Sender) then
    SetWideText(Sender, (Grid as TTntCustomDBGrid).FEditText);
end;

procedure TTntGridDataLink.RecordChanged(Field: TField);
var
  CField: TField;
begin
  inherited;
  if Grid.HandleAllocated then begin
    CField := Grid.SelectedField;
    if ((Field = nil) or (CField = Field)) and
      (Assigned(CField) and (GetWideText(CField) <> (Grid as TTntCustomDBGrid).FEditText)) then
    begin
      with (Grid as TTntCustomDBGrid) do begin
        InvalidateEditor;
        if InplaceEditor <> nil then InplaceEditor.Deselect;
      end;
    end;
  end;
end;

procedure TTntGridDataLink.UpdateData;
var
  Field: TField;
begin
  Field := (Grid as TTntCustomDBGrid).SelectedField;
  // remember "set text"
  if Field <> nil then
    OriginalSetText := Field.OnSetText;
  try
    // redirect "set text" to self
    if Field <> nil then

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩黄色影视| 国内精品视频一区二区三区八戒| 成人av在线播放网址| 久久久久久久久久久久久久久99 | 91成人看片片| 夜夜夜精品看看| 欧美视频在线一区| 日本欧美一区二区三区乱码 | 寂寞少妇一区二区三区| 久久精品在线免费观看| 成人一级片网址| 樱花影视一区二区| 91精品国产入口| 国产精品99久久久久久有的能看| 欧美国产欧美亚州国产日韩mv天天看完整| 国产福利一区二区三区| 中文字幕在线不卡一区| 欧美婷婷六月丁香综合色| 青草av.久久免费一区| 久久久久国产精品麻豆ai换脸 | 精品一区二区国语对白| 国产精品久久久久久久久免费相片| 色伊人久久综合中文字幕| 日韩电影一区二区三区四区| 久久久久国产精品厨房| 色婷婷综合久久| 久久国产精品99久久人人澡| 国产精品久99| 91精品在线免费观看| 国产精品18久久久久久久网站| 亚洲色欲色欲www| 日韩一区二区三区高清免费看看| 国产成人精品免费| 视频一区二区中文字幕| 国产精品久久久久久亚洲毛片 | 色88888久久久久久影院野外| 日韩精品久久久久久| 国产精品久久久久久久久免费樱桃 | 8v天堂国产在线一区二区| 国产成人综合亚洲网站| 午夜精品久久久久久久99水蜜桃| 久久精品夜色噜噜亚洲a∨| 欧美在线观看一区二区| 国内精品国产三级国产a久久| 亚洲老妇xxxxxx| 国产欧美综合在线观看第十页| 欧美日韩免费观看一区二区三区| 国产精品主播直播| 日产国产高清一区二区三区| 一区二区三区日韩在线观看| 国产日韩高清在线| 日韩欧美激情四射| 欧美性大战久久久久久久蜜臀| 成人免费黄色在线| 国产一区二区调教| 日日骚欧美日韩| 天堂影院一区二区| 亚洲乱码国产乱码精品精98午夜| 国产欧美日韩中文久久| 日韩一区二区免费电影| 欧美日韩视频在线第一区| 成人av电影免费在线播放| 国产一区999| 国产在线精品免费av| 精品一区免费av| 青青国产91久久久久久 | 日韩制服丝袜av| 亚洲一区二区三区四区不卡| 亚洲日本护士毛茸茸| 中文字幕在线一区| 日韩一区有码在线| 欧美国产一区二区| 中文一区二区在线观看| 欧美激情一区在线| 国产色91在线| 久久精品亚洲麻豆av一区二区| 亚洲精品一区二区三区在线观看| 欧美一区二区成人| 精品伦理精品一区| 久久影院午夜论| 欧美经典一区二区| 国产精品久久久久久久久搜平片| 中文在线免费一区三区高中清不卡| 国产精品美女www爽爽爽| 国产精品―色哟哟| 亚洲美女偷拍久久| 亚洲韩国一区二区三区| 亚洲国产日韩a在线播放| 亚洲va国产va欧美va观看| 蜜乳av一区二区| 久久99久国产精品黄毛片色诱| 激情综合色综合久久| 成人的网站免费观看| 色成年激情久久综合| 欧美午夜电影在线播放| 日韩三级视频中文字幕| 欧美精品一区二区不卡| 国产清纯白嫩初高生在线观看91| 国产精品福利影院| 亚洲一区二区在线观看视频| 日韩精品一二区| 高清beeg欧美| 在线免费观看日本一区| 日韩欧美综合一区| 国产午夜精品一区二区三区视频| 亚洲丝袜自拍清纯另类| 午夜婷婷国产麻豆精品| 国产一区二区在线视频| 97se亚洲国产综合自在线观| 欧美日韩免费不卡视频一区二区三区| 日韩三级免费观看| 国产精品人妖ts系列视频| 夜夜精品视频一区二区| 激情亚洲综合在线| 91日韩一区二区三区| 日韩一区二区免费高清| 国产精品久久久久久久第一福利| 性感美女极品91精品| 国产精品资源在线观看| 欧美色中文字幕| 久久免费精品国产久精品久久久久| 最新久久zyz资源站| 午夜精品久久久久久久久| 粉嫩绯色av一区二区在线观看| 91国产视频在线观看| 久久久久久电影| 日韩精品电影在线| av在线不卡观看免费观看| 91精品免费观看| 国产精品乱码久久久久久| 三级欧美在线一区| 一本到一区二区三区| 久久综合色天天久久综合图片| 亚洲美女一区二区三区| 国产黄色成人av| 国产亚洲综合性久久久影院| 亚洲一区二区三区四区在线 | 51精品国自产在线| 国产精品国模大尺度视频| 日韩av午夜在线观看| 91麻豆国产福利在线观看| 精品乱码亚洲一区二区不卡| 亚洲精品国产无套在线观| 国产精品一区不卡| 欧美一级日韩一级| 亚洲另类一区二区| 成人动漫视频在线| 久久久久国产一区二区三区四区| 丝袜亚洲精品中文字幕一区| 色综合久久88色综合天天| 国产日产亚洲精品系列| 天堂在线一区二区| 欧美年轻男男videosbes| 亚洲精品国产无天堂网2021 | 一区二区三区影院| 国产乱子轮精品视频| 日韩一区二区三区高清免费看看| 一区二区高清在线| 成人性视频免费网站| 欧美精品一区二区精品网| 青青草成人在线观看| 91精品免费在线| 日韩激情视频在线观看| 欧美二区在线观看| 亚洲一区在线视频观看| 在线观看日韩电影| 一区二区三区精密机械公司| 99国内精品久久| 最新日韩在线视频| 色吊一区二区三区| 亚洲一区在线观看网站| 欧美日韩一区三区| 亚洲成精国产精品女| 欧美日韩一区国产| 日韩精品91亚洲二区在线观看| 欧美丰满少妇xxxbbb| 热久久国产精品| 久久无码av三级| 高清不卡在线观看av| 日韩毛片高清在线播放| 91丝袜高跟美女视频| 亚洲图片欧美一区| 欧美一区二区高清| 狠狠色丁香久久婷婷综| 久久久久久影视| 成人动漫精品一区二区| 夜色激情一区二区| 7777精品伊人久久久大香线蕉| 毛片av一区二区| 久久九九久久九九| 91麻豆文化传媒在线观看| 亚洲成a人片综合在线| 日韩欧美一区二区视频| 精久久久久久久久久久| 中文字幕在线不卡视频| 在线免费观看日本欧美| 美女网站色91| 国产精品欧美极品| 欧美剧情电影在线观看完整版免费励志电影| 五月激情六月综合|