Q&A

  • dbgrid에서 multiselect(shitf+mouse)구현하기
dbgrid를 multiselect 옵션을 선택하게 되면 마우시+ctrl키 조합과

shift+화살표키가 사용되는데요..

shift+마우스 , ctrl+마우스 , shift+pageup , pagedown을

구현하려면 어떻게 해야 하나요??

이렇게 구현된 multiselect의 내용을(즉, db의 특정 데이타를)

clipbord나 엑셀로 보내려고 하거든요..



2  COMMENTS
  • Profile
    신호성 1999.12.10 03:04
    김주석 wrote:

    > dbgrid를 multiselect 옵션을 선택하게 되면 마우시+ctrl키 조합과

    > shift+화살표키가 사용되는데요..

    > shift+마우스 , ctrl+마우스 , shift+pageup , pagedown을

    > 구현하려면 어떻게 해야 하나요??

    > 이렇게 구현된 multiselect의 내용을(즉, db의 특정 데이타를)

    > clipbord나 엑셀로 보내려고 하거든요..

    >





    아래 함수는 제가 사용하고 있는 함수 입니다.

    변수명을 조금 바꿨는데 오타가 없다면 잘 수행될겁니다.

    북마크를 비교해서 처리하는데요

    내용은 자세히 보시면 이해될겁니다.





    var

    first_pos : TBookmark;



    // Multi Select처리

    procedure gf_shift_select_process(DBGrid:TDBGrid);

    var

    direction : Integer;

    temp_pos : TBookmark;

    this_pos : TBookmark;

    begin

    with (DBGrid.DataSource.DataSet as TDBDataSet) do

    begin



    if IsEmpty then Exit;



    if (dgMultiSelect in DBGrid.Options) then

    begin

    if GetKeyState(VK_SHIFT) < short(0) then

    begin

    this_pos := GetBookmark;



    Direction := CompareBookmarks(first_pos,this_pos);

    if Direction = 0 then Exit;



    GotoBookMark(first_pos);



    while (not EOF) and (not BOF) do

    begin

    DBGrid.SelectedRows.CurrentRowSelected := True;

    if Direction > 0 then

    prior

    else

    Next;

    temp_pos := GetBookmark;

    if CompareBookmarks(temp_pos,this_pos) = 0 then break;

    end;

    FreeBookmark(this_pos);

    FreeBookmark(first_pos);

    FreeBookmark(temp_pos);

    end;

    first_pos := GetBookmark;

    end;

    end;

    end;





    // ***********************************************************************



    procedure TfrmAAEditParentBWC.dbg_browseCellClick(Column: TColumn);

    begin

    gf_shift_select_process(dbg_browse);

    end;







  • Profile
    길호전 1999.12.21 05:26
    신호성 wrote:

    > 김주석 wrote:

    > > dbgrid를 multiselect 옵션을 선택하게 되면 마우시+ctrl키 조합과

    > > shift+화살표키가 사용되는데요..

    > > shift+마우스 , ctrl+마우스 , shift+pageup , pagedown을

    > > 구현하려면 어떻게 해야 하나요??

    > > 이렇게 구현된 multiselect의 내용을(즉, db의 특정 데이타를)

    > > clipbord나 엑셀로 보내려고 하거든요..

    > >

    >

    >

    > 아래 함수는 제가 사용하고 있는 함수 입니다.

    > 변수명을 조금 바꿨는데 오타가 없다면 잘 수행될겁니다.

    > 북마크를 비교해서 처리하는데요

    > 내용은 자세히 보시면 이해될겁니다.

    >

    >

    > var

    > first_pos : TBookmark;

    >

    > // Multi Select처리

    > procedure gf_shift_select_process(DBGrid:TDBGrid);

    > var

    > direction : Integer;

    > temp_pos : TBookmark;

    > this_pos : TBookmark;

    > begin

    > with (DBGrid.DataSource.DataSet as TDBDataSet) do

    > begin

    >

    > if IsEmpty then Exit;

    >

    > if (dgMultiSelect in DBGrid.Options) then

    > begin

    > if GetKeyState(VK_SHIFT) < short(0) then

    > begin

    > this_pos := GetBookmark;

    >

    > Direction := CompareBookmarks(first_pos,this_pos);

    > if Direction = 0 then Exit;

    >

    > GotoBookMark(first_pos);

    >

    > while (not EOF) and (not BOF) do

    > begin

    > DBGrid.SelectedRows.CurrentRowSelected := True;

    > if Direction > 0 then

    > prior

    > else

    > Next;

    > temp_pos := GetBookmark;

    > if CompareBookmarks(temp_pos,this_pos) = 0 then break;

    > end;

    > FreeBookmark(this_pos);

    > FreeBookmark(first_pos);

    > FreeBookmark(temp_pos);

    > end;

    > first_pos := GetBookmark;

    > end;

    > end;

    > end;

    >

    >

    > // ***********************************************************************

    >

    > procedure TfrmAAEditParentBWC.dbg_browseCellClick(Column: TColumn);

    > begin

    > gf_shift_select_process(dbg_browse);

    > end;

    >

    >

    >

    참고삼아서 말씀드린다면 dbgrid의 multiselect에서

    shift키를 이용한 다중선택은 shift+방향키(키보드)만 구현이 되고

    ctrl키는 안되고



    마우스로 다중선택을 할려면

    ctrl키를 누르면 마우스로 선택을 해야하고

    shift키를누른 상태에서 마우스로 다중선택은 되지않습니다.