C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[23499] Re:TListView에서 선택된 영역의 아이템들을 반전시킬려면?
민인학 [] 773 읽음    2003-01-02 16:31
민인학 님이 쓰신 글 :
: TListView에 아이템들이 있는데..
: 선택된 영역의 아이템들을 반전시키는 방법과
: 선택된 영역의 아이템들을 위로 한칸 이동시키는 방법에
: 대해서 아시는 분 계신가요?
: 제가 지금 짜보고는 있습니다만..
: 좀 오래 걸릴것 같아 이렇게 질문에 올립니다.
: 예전에 짜 보신분이 계시면.. 답변좀 부탁드립니다.
:
: 2003년 새해 복 많이 받으세요.
: 감사합니다.

자답입니다.

// 선택된 영역을 한칸 위로 옮김
void __fastcall TIproveSelectProbingPortTree::UpButtonClick(TObject *Sender)
{
        AnsiString InstanceName;
        AnsiString Hierachy;       
        AnsiString PortName;
        AnsiString PortPosition;

        stack< int , vector<int> > SelectRows;

        for(int i = 0; i<AddListView->Items->Count; i++) {
                if(AddListView->Items->Item[i]->Selected == true) {
                        if(i==0) return;

                        InstanceName = AddListView->Items->Item[i-1]->Caption;
                        Hierachy = AddListView->Items->Item[i-1]->SubItems->Strings[0];
                        PortName = AddListView->Items->Item[i-1]->SubItems->Strings[1];
                        PortPosition = AddListView->Items->Item[i-1]->SubItems->Strings[2];

                        AddListView->Items->Item[i-1]->Caption = AddListView->Items->Item[i]->Caption;
                        AddListView->Items->Item[i-1]->SubItems->Strings[0] = AddListView->Items->Item[i]->SubItems->Strings[0];
                        AddListView->Items->Item[i-1]->SubItems->Strings[1] = AddListView->Items->Item[i]->SubItems->Strings[1];
                        AddListView->Items->Item[i-1]->SubItems->Strings[2] = AddListView->Items->Item[i]->SubItems->Strings[2];

                        AddListView->Items->Item[i]->Caption = InstanceName;
                        AddListView->Items->Item[i]->SubItems->Strings[0] = Hierachy;
                        AddListView->Items->Item[i]->SubItems->Strings[1] = PortName;
                        AddListView->Items->Item[i]->SubItems->Strings[2] = PortPosition;

                        SelectRows.push(i);
                 }
        }

        AddListView->Items->BeginUpdate();
        AddListView->ClearSelection();

        while (!SelectRows.empty()) {
                if(SelectRows.top()-1 >= 0) {
                        AddListView->Items->Item[SelectRows.top()-1]->Selected = true;
                }
                SelectRows.pop();
        }

        AddListView->Items->EndUpdate();
}

// 선택된 영역을 한칸 아래로 내림
void __fastcall TIproveSelectProbingPortTree::DownButtonClick(
      TObject *Sender)
{
        AnsiString InstanceName;
        AnsiString Hierachy;
        AnsiString PortName;
        AnsiString PortPosition;

        stack< int , vector<int> > SelectRows;

        for(int i = AddListView->Items->Count-1; i >= 0; i--) {
                if(AddListView->Items->Item[i]->Selected == true) {
                        if(i==AddListView->Items->Count-1) return;

                        InstanceName = AddListView->Items->Item[i+1]->Caption;
                        Hierachy = AddListView->Items->Item[i+1]->SubItems->Strings[0];
                        PortName = AddListView->Items->Item[i+1]->SubItems->Strings[1];
                        PortPosition = AddListView->Items->Item[i+1]->SubItems->Strings[2];

                        AddListView->Items->Item[i+1]->Caption = AddListView->Items->Item[i]->Caption;
                        AddListView->Items->Item[i+1]->SubItems->Strings[0] = AddListView->Items->Item[i]->SubItems->Strings[0];
                        AddListView->Items->Item[i+1]->SubItems->Strings[1] = AddListView->Items->Item[i]->SubItems->Strings[1];
                        AddListView->Items->Item[i+1]->SubItems->Strings[2] = AddListView->Items->Item[i]->SubItems->Strings[2];

                        AddListView->Items->Item[i]->Caption = InstanceName;
                        AddListView->Items->Item[i]->SubItems->Strings[0] = Hierachy;
                        AddListView->Items->Item[i]->SubItems->Strings[1] = PortName;
                        AddListView->Items->Item[i]->SubItems->Strings[2] = PortPosition;

                        SelectRows.push(i);
                 }
        }

        AddListView->Items->BeginUpdate();
        AddListView->ClearSelection();

        while (!SelectRows.empty()) {
                if(SelectRows.top()+1 <= AddListView->Items->Count-1) {
                        AddListView->Items->Item[SelectRows.top()+1]->Selected = true;
                }
                SelectRows.pop();
        }

        AddListView->Items->EndUpdate();
}


// 선택된 영역을 반전시킴
void __fastcall TIproveSelectProbingPortTree::ReverseButtonClick(
      TObject *Sender)
{
        int Count = 0;
       
        stack< int , vector<int> > SelectRows;
        stack< AnsiString , vector<AnsiString> > InstanceNames;
        stack< AnsiString , vector<AnsiString> > Hierachys;
        stack< AnsiString , vector<AnsiString> > PortNames;
        stack< AnsiString , vector<AnsiString> > PortPositions;

        for(int i = 0; i<AddListView->Items->Count; i++) {
                if(AddListView->Items->Item[i]->Selected == true) {
                        Count++;
                }
        }

        if(Count<2) return;

        for(int i = 0; i<AddListView->Items->Count; i++) {
                if(AddListView->Items->Item[i]->Selected == true) {
                        InstanceNames.push(AddListView->Items->Item[i]->Caption);
                        Hierachys.push(AddListView->Items->Item[i]->SubItems->Strings[0]);
                        PortNames.push(AddListView->Items->Item[i]->SubItems->Strings[1]);
                        PortPositions.push(AddListView->Items->Item[i]->SubItems->Strings[2]);
                }
        }

        for(int i = AddListView->Items->Count-1; i >= 0; i--) {
                if(AddListView->Items->Item[i]->Selected == true) {
                        SelectRows.push(i);
                }
        }

        AddListView->Items->BeginUpdate();
        AddListView->ClearSelection();

        while (!SelectRows.empty()) {
                AddListView->Items->Item[SelectRows.top()]->Caption = InstanceNames.top();
                AddListView->Items->Item[SelectRows.top()]->SubItems->Strings[0] = Hierachys.top();
                AddListView->Items->Item[SelectRows.top()]->SubItems->Strings[1] = PortNames.top();
                AddListView->Items->Item[SelectRows.top()]->SubItems->Strings[2] = PortPositions.top();

                AddListView->Items->Item[SelectRows.top()]->Selected = true;

                InstanceNames.pop();
                Hierachys.pop();
                PortNames.pop();
                PortPositions.pop();
                SelectRows.pop();
        }

        AddListView->Items->EndUpdate();
}

+ -

관련 글 리스트
23490 TListView에서 선택된 영역의 아이템들을 반전시킬려면? 민인학 623 2003/01/02
23499     Re:TListView에서 선택된 영역의 아이템들을 반전시킬려면? 민인학 773 2003/01/02
23515         Re: 아이템 네비게이션은.. 그런 방법보다는요.. 김상구.패패루 693 2003/01/03
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.