////////////////////////////////////////////////
//    功能概述:公用的列表框选择框,是用DBGrid网格
//
//    注意事项:希望用Query查询列表
//
//    编写时间:shuszj
//
//    编写人员:2002.04.02
//
////////////////////////////////////////
unit uSelect_DBGrid;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, ImgList, Grids, DBGrids, ComCtrls, StdCtrls, Mask, 
  ToolWin, DBTables, USELECT, XPMenu, Buttons, ExtCtrls, ADODB;

const
  WM_SelectShare = WM_USER +10;          //公用列表

type
  TSzjDBGrid = class(TDBGrid);
  TFmSelect_DBGrid = class(TFmSelect)
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure DBGrid1CellClick(Column: TColumn);
    procedure DBGrid1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure SpeedButton1Click(Sender: TObject);
  private
    m_sOne, m_sTwo :Integer;              //记下点击的当前的记录的行
    m_OneBMark, m_TwoBMark :TBookmark;    //记下点击的标签
    { Private declarations }
  public
    { Public declarations }
    procedure FPostion(Lft,Tp:integer);
  end;

var
  FmSelect_DBGrid: TFmSelect_DBGrid;

implementation

{$R *.dfm}

{ TFmSelect_DBGrid }

procedure TFmSelect_DBGrid.FPostion(Lft, Tp: integer);
begin
  Self.Top :=Tp;
  Self.Left :=Lft;
end;

procedure TFmSelect_DBGrid.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  inherited;
  Action :=caFree;
  FmSelect_DBGrid :=nil;
end;

procedure TFmSelect_DBGrid.FormCreate(Sender: TObject);
begin
  inherited;
//  SetWindowLong(Self.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);       //在任务栏屏蔽
end;

procedure TFmSelect_DBGrid.DBGrid1CellClick(Column: TColumn);
begin
  inherited;
  if (gSDataSet is TTable) or (gSDataSet is TQuery) then
  begin  
    if ThirdQuery.IsEmpty then
      Exit;
    m_OneBMark :=ThirdQuery.GetBookmark;
  end
  else
    if (gSDataSet is TADOTable) or (gSDataSet is TADOQuery) then
    begin
      if ADOThirdQuery.IsEmpty then
        Exit;
      m_OneBMark :=ADOThirdQuery.GetBookmark;
    end;
  m_sOne :=TSzjDBGrid(DBGrid1).Row;
end;

procedure TFmSelect_DBGrid.DBGrid1MouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  inherited;
  if (gSDataSet is TTable) or (gSDataSet is TQuery) then
    if Button =mbleft then
    begin
      if ssShift in Shift then
      begin
        m_TwoBMark :=ThirdQuery.GetBookmark;
        m_sTwo :=TSzjDBGrid(DBGrid1).Row;
        if (m_sOne=0) or (m_OneBMark =nil) then
          Exit;
        with ThirdQuery do
        begin
          if m_sOne < m_sTwo then
          begin
            GotoBookmark(m_OneBMark);
            while not eof do
            begin
              DBGrid1.SelectedRows.CurrentRowSelected :=True;
              if CompareBookmarks(m_TwoBMark,GetBookmark) =0 then  
                Exit;
              Next;
            end;
          end
          else
          begin
            GotoBookmark(m_TwoBMark);
            while not eof do
            begin
              DBGrid1.SelectedRows.CurrentRowSelected :=True;
              if CompareBookmarks(m_OneBMark,GetBookmark) =0 then
                Exit;
              Next;
            end;
          end;
        end;
      end
      else
        CheckBox1.Checked :=False;
    end
  else
    if (gSDataSet is TADOTable) or (gSDataSet is TADOQuery) then
      if Button =mbleft then
      begin
        if ssShift in Shift then
        begin
          m_TwoBMark :=ThirdQuery.GetBookmark;
          m_sTwo :=TSzjDBGrid(DBGrid1).Row;
          if (m_sOne=0) or (m_OneBMark =nil) then
            Exit;
          with ThirdQuery do
          begin
            if m_sOne < m_sTwo then
            begin
              GotoBookmark(m_OneBMark);
              while not eof do
              begin
                DBGrid1.SelectedRows.CurrentRowSelected :=True;
                if CompareBookmarks(m_TwoBMark,GetBookmark) =0 then  
                  Exit;
                Next;
              end;
            end
            else
            begin
              GotoBookmark(m_TwoBMark);
              while not eof do
              begin
                DBGrid1.SelectedRows.CurrentRowSelected :=True;
                if CompareBookmarks(m_OneBMark,GetBookmark) =0 then
                  Exit;
                Next;
              end;
            end;
          end;
        end
        else
          CheckBox1.Checked :=False;
      end   
end;

procedure TFmSelect_DBGrid.SpeedButton1Click(Sender: TObject);
begin
  inherited;
  if (gSDataSet is TTable) or (gSDataSet is TQuery) then
    if ThirdQuery.IsEmpty then
    begin
      Close;
      Exit;
    end
  else
    if (gSDataSet is TADOTable) or (gSDataSet is TADOQuery) then
      if ADOThirdQuery.IsEmpty then
      begin
        Close;
        Exit;
      end;
  gValue:=gSDataSet.Fields[0].AsString;
  SendMessage(gHandle,WM_SelectShare,0,0);
  Close;
end;

end.
仔细看一下上面这个单元,里面就有写

DBGRID控件里可以实现SHIFT复选吗?怎么设置?的更多相关文章

  1. DEV控件中GridView中的复选框与CheckBox实现联动的全选功能

    最初的界面图如图1-1(全选框ID: cb_checkall  DEV控件名称:gcCon ): 要实现的功能如下图(1-2  1-3  1-4)及代码所示: 图1-2 图1-3 图1-4 O(∩_∩ ...

  2. Android基础控件单选按钮RadioButton和Checkbox复选按钮的使用

    1.相关简介 RadioButton需要和RadioGroup结合使用,在RadioGroup设置布局方式! Checkbox是单独使用,本文为了方便放在了RadioGroup中! 2.简单使用 方法 ...

  3. Qt树形控件QTreeView使用1——节点的添加删除操作 复选框的设置

    QtreeView是ui中最常用的控件,Qt中QTreeWidget比QTreeView更简单,但没有QTreeView那么灵活(QTreeWidget封装的和MFC的CTreeCtrl很类似,没有m ...

  4. winfrom获取用户控件里的控件对象

    如何获取用户控件里的控件对象呢,其实思路也是很简单的, 比如有一个panel 用户控件 里面有许多的其他控件. 那么要找出一个Label控件怎么找呢,好的.现在我们就开始 首先,一个foreach循环 ...

  5. Delphi7连接MySql数据库-DBGrid控件显示数据

    一个简单的Delphi7小程序,使用MySql数据库做简单查询,用DBGrid控件显示结果,实现过程如下: (1)在MySql中新建demouser表,插入记录用于测试. (2)在Delphi7中新建 ...

  6. 给Repeater控件里添加序号的5种方法

    Repeater是我们经常用的一个显示数据集的数据控件,经常我们希望在数据前显示数据的序号,那么我们该怎么为Repeater控件添加序号呢?下面编辑为大家介绍几种常用的为Repeater控件添加序号的 ...

  7. Dbgrid控件多重选择的怪问题。BookMarkList,BookMark,使用书签,用的ADOQuery控件。100分送上,急阿!!!请高手帮忙!

    Dbgrid控件多重选择的怪问题.BookMarkList,BookMark,使用书签,用的ADOQuery控件.100分送上,急阿!!!请高手帮忙! ( 积分: 100 )<br />p ...

  8. Delphi中的DBGrid控件

    在Delphi中,DBGrid控件是一个开发数据库软件不能不使用的控件,其功能非常强大,可以配合SQL语句实现几乎所有数据报表的显示,操作也非常简单,属性.过程.事件等都非常直观,但是使用中,有时侯还 ...

  9. 背水一战 Windows 10 (67) - 控件(控件基类): DependencyObject - CoreDispatcher, 依赖属性的设置与获取, 依赖属性的变化回调

    [源码下载] 背水一战 Windows 10 (67) - 控件(控件基类): DependencyObject - CoreDispatcher, 依赖属性的设置与获取, 依赖属性的变化回调 作者: ...

随机推荐

  1. # 20155224 2016-2017-2《Java程序设计》课程总结

    20155224 2016-2017-2<Java程序设计>课程总结 每周作业链接汇总 预备作业1:我所期望的师生关系 预备作业2:我的技能与C语言学习 预备作业3:Linux的初步学习, ...

  2. 20155230 2016-2017-2 《Java程序设计》第十周学习总结

    20155230 2016-2017-2 <Java程序设计>第十周学习总结 教材学习内容总结 网络编程:就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据发 ...

  3. 20155304 2016-2017-2 《Java程序设计》实验二 Java面向对象程序设计

    实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验要求 没有Linux ...

  4. 20155308 2016-2017-2 《Java程序设计》第10周学习总结

    20155308 2016-2017-2 <Java程序设计>第10周学习总结 教材学习内容总结 网络概述 计算机网络:通过一定的物理设备将处于不同位置的计算机连接起来组成的网络,这个网络 ...

  5. NetWork——TCP的流量控制和拥塞控制

    ,然后开始执行拥塞避免算法,使拥塞窗口缓慢地线性增大. 这里为什么替换掉了慢开始算法呢,这是因为收到重复的ACK不仅仅告诉我们一个分组丢失了,由于接收方只有在收到另一个报文段时才会产生重复的ACK,所 ...

  6. 修改索引名称(mysql)

    MySQL修改索引名称. 对于MySQL 5.7及以上版本,可以执行以下命令: ALTER TABLE tbl_name RENAME INDEX old_index_name TO new_inde ...

  7. OpenGL ES学习笔记(二)——平滑着色、自适应宽高及三维图像生成

    首先申明下,本文为笔者学习<OpenGL ES应用开发实践指南(Android卷)>的笔记,涉及的代码均出自原书,如有需要,请到原书指定源码地址下载. <Android学习笔记--O ...

  8. 四、利用EnterpriseFrameWork快速开发基于WCF为中间件的三层结构系统

    回<[开源]EnterpriseFrameWork框架系列文章索引> EnterpriseFrameWork框架实例源代码下载: 实例下载 本章内容与上一张<利用Enterprise ...

  9. 1.0 Hadoop的介绍、搭建、环境

    HADOOP背景介绍 1.1 Hadoop产生背景 HADOOP最早起源于Nutch.Nutch的设计目标是构建一个大型的全网搜索引擎,包括网页抓取.索引.查询等功能,但随着抓取网页数量的增加,遇到了 ...

  10. Qt 链接报错 version `Qt_5' not found

    问题: 在Ubuntu 上发布软件包的时候,复制链接库的时候出现Qt 版本找不到的情况: ./libqxcb.so: /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so ...