아 진짜 대단하십니다; ㄷㄷㄷ
어떤원리인지 초보자인 저는 살짝 어렵지만;;ㄷㄷ
일단 완벽하게 구동되네요 흠.....진짜 복받으실꺼에요
앞으로 많은 도움 또 부탁드리겠습니다 감사합니다 정말 감사합니다 정성훈님 ^^
정성훈.해미 님이 쓰신 글 :
: 당연히 두 그리드에 같이 걸면 이벤트가 무한 반복되어 스택오버플로루가 납니다.
:
: 한쪽 이벤트가 동작중일 때 다른쪽이 동작 안하게 하면 됩니다.
:
: 여러가지 방법이 있습니다.
:
: [머리 안쓰고 하는 간단한 방법]
: 헤더에 또는 전역 변수 하나를 선언합니다.
:
:
: bool Flag = false;
:
:
:
: void __fastcall TForm1::AdvStringGrid1SelectCell(TObject *Sender, int ACol, int ARow, bool &CanSelect)
: {
: if(Flag) return;
: Flag = true;
:
: AdvStringGrid2->Col = ACol;
: AdvStringGrid2->Row = ARow;
:
: Flag = false;
: }
: void __fastcall TForm1::AdvStringGrid2SelectCell(TObject *Sender, int ACol, int ARow, bool &CanSelect)
: {
: if(Flag) return;
: Flag = true;
:
: AdvStringGrid1->Col = ACol;
: AdvStringGrid1->Row = ARow;
:
: Flag = false;
: }
:
: 빌더링 님이 쓰신 글 :
: : 알려주신대로 하니 정말 정말 잘됩니다 그런데...
: : void __fastcall TForm1::AdvStringGrid1SelectCell(TObject *Sender, int ACol, int ARow, bool &CanSelect)
: : {
: : AdvStringGrid2->Col = ACol;
: : AdvStringGrid2->Row = ARow;
: : }
: : void __fastcall TForm1::AdvStringGrid2SelectCell(TObject *Sender, int ACol, int ARow, bool &CanSelect)
: : {
: : AdvStringGrid1->Col = ACol;
: : AdvStringGrid1->Row = ARow;
: : }
: :
: : 이렇게 해서 A , B 그리드 둘다 해주니...허걱 폼이 멈춰버리네요... 당연한 결과인거 같기는한데..
: : 어떻게해야 A ,B 그리드 둘다 상대 Col, Row 를 컨트롤 할수 있게 할까요 ㅜㅜ
: : 이벤트를 다른걸 써야할까요 ?ㅜㅜ 움
: :
: :
: : 정성훈.해미 님이 쓰신 글 :
: : : 안녕하세요.
: : : 정성훈.해미입니다.
: : :
: : : 오전 내내 답글 등록이 안되서 삽질하다가 이제 올립니다.ㅋ
: : :
: : :
: : : 두 그리드를 동시에 움직이는것은 의외로 쉽습니다.
: : :
: : : 그리드의 기본 속성 Col, Row를 이용하면 됩니다.
: : :
: : : 그리드의 기본인 Col, Row는 간단하면서 유용합니다.
: : :
: : : [방법]
: : : 1번 그리드의 셀이 선택될 때 Col, Row값을 2번 그리드에 넣으면 됩니다.
: : : 나머지는 이동, 스크롤등은 그리드 컨트롤에서 알아서 합니다.
: : :
: : :
: : : void __fastcall TForm1::AdvStringGrid1SelectCell(TObject *Sender, int ACol, int ARow, bool &CanSelect)
: : : {
: : : AdvStringGrid2->Col = ACol;
: : : AdvStringGrid2->Row = ARow;
: : : }
: : :
: : :
: : : 빌더링 님이 쓰신 글 :
: : : : 에구 아래 이문제에 대해서 질문올렸다가 스스로 답을 찾아낸줄알고 적용했더니...
: : : : 완전 에러였네요...
: : : :
: : : : 그래서 다시한번 도움을 청해봅니다.. ㅜㅜ 이런 비슷한 부분의 질문이나 예제가 검색이 힘드네요 에구
: : : :
: : : : 제가 폼위에 AdvStringGrid가 두개가 위아래로 있습니다.
: : : : 둘다 똑같은 구조이죠 같은 컬럼 같은 테이블이죠...
: : : :
: : : : 그래서 위는 A 아래는 B라고 잡았습니다.
: : : :
: : : : 여기서 제가 하고싶은것은.... A에서 컨트롤 하는 것이 그대로 B도 적용되는것입니다.
: : : : 그리고 B에서 컨트롤 하는것은 A에서 그대로 움직이구요...말인 즉슨..
: : : :
: : : : A에서 마우스 휠을 죽 돌리면 FIX된 ROW는 그대로 있고 나머지 RowCount만큼 위아래로 움직이는데요.....
: : : : 이 행동이 B도 같이 되는 것입니다. 그래서 A에서 특정 Col의 특정 Row에 셀선택이 되었을때...
: : : : B도 동일한 포커스가 되는것입니다. 물론 이건 제가 해결을 했는데...
: : : :
: : : : 문제점 1 : 마우스휠로 위아래 스크롤할떄는 같이 움직이지 않는다..
: : : : 문제점 2 : 방향키로 그리드에서 움직였을때 선택된 Row는 같이 보여지나 스크롤이 같이 되지 않는다...
: : : :
: : : : 일단 제가 처리한 부분은
: : : :
: : : : __fastcall TForm1::TForm1(TComponent* Owner)
: : : : : TForm(Owner)
: : : : {
: : : :
: : : : }
: : : : //---------------------------------------------------------------------------
: : : : void __fastcall TForm1::AdvStringGrid7SelectCell(TObject *Sender, int ACol, int ARow,
: : : : bool &CanSelect)
: : : : {
: : : : for (int i = 0; i<35; i++)
: : : : {
: : : : for (int j = 1; j < 20; j++)
: : : : {
: : : : AdvStringGrid7->Colors[j][i+2] = clGrayText;
: : : : AdvStringGrid8->Colors[j][i+2] = clGrayText;
: : : : }
: : : : }
: : : :
: : : : for (int i = 0; i<35; i++)
: : : : {
: : : : AdvStringGrid7->Colors[ACol][i+2] = clAppWorkSpace;
: : : : AdvStringGrid8->Colors[ACol][i+2] = clAppWorkSpace;
: : : : }
: : : : for (int i = 1; i<20; i++)
: : : : {
: : : : AdvStringGrid7->Colors[i][ARow] = clAppWorkSpace;
: : : : AdvStringGrid8->Colors[i][ARow] = clAppWorkSpace;
: : : : }
: : : : AdvStringGrid7->Colors[ACol][ARow] = clWhite;
: : : : AdvStringGrid8->Colors[ACol][ARow] = clWhite;
: : : :
: : : : for(int i=0; i<32; i++)
: : : : {
: : : : for(int j=0; j<19; j++)
: : : : {
: : : : if (AdvStringGrid7->Cells[19][i+2] == "1")
: : : : for(int j=0; j<19; j++) AdvStringGrid7->Colors[j+1][i+2] = clYellow;
: : : :
: : : : if (AdvStringGrid8->Cells[19][i+2] == "1")
: : : : for(int j=0; j<19; j++) AdvStringGrid8->Colors[j+1][i+2] = clYellow;
: : : : }
: : : : }
: : : : }
: : : : //---------------------------------------------------------------------------
: : : : void __fastcall TForm1::AdvStringGrid8SelectCell(TObject *Sender, int ACol, int ARow,
: : : : bool &CanSelect)
: : : : {
: : : : for (int i = 0; i<35; i++)
: : : : {
: : : : for (int j = 1; j < 20; j++)
: : : : {
: : : : AdvStringGrid7->Colors[j][i+2] = clGrayText;
: : : : AdvStringGrid8->Colors[j][i+2] = clGrayText;
: : : : }
: : : : }
: : : :
: : : : for (int i = 0; i<35; i++)
: : : : {
: : : : AdvStringGrid7->Colors[ACol][i+2] = clAppWorkSpace;
: : : : AdvStringGrid8->Colors[ACol][i+2] = clAppWorkSpace;
: : : : }
: : : : for (int i = 1; i<20; i++)
: : : : {
: : : : AdvStringGrid7->Colors[i][ARow] = clAppWorkSpace;
: : : : AdvStringGrid8->Colors[i][ARow] = clAppWorkSpace;
: : : : }
: : : : AdvStringGrid7->Colors[ACol][ARow] = clWhite;
: : : : AdvStringGrid8->Colors[ACol][ARow] = clWhite;
: : : :
: : : : for(int i=0; i<32; i++)
: : : : {
: : : : for(int j=0; j<19; j++)
: : : : {
: : : : if (AdvStringGrid7->Cells[19][i+2] == "1")
: : : : for(int j=0; j<19; j++) AdvStringGrid7->Colors[j+1][i+2] = clYellow;
: : : :
: : : : if (AdvStringGrid8->Cells[19][i+2] == "1")
: : : : for(int j=0; j<19; j++) AdvStringGrid8->Colors[j+1][i+2] = clYellow;
: : : : }
: : : : }
: : : : }
: : : :
: : : : 이렇게 하여 서로 같은 라인과 선택된 셀은 처리를 햇는데 같이 스크롤 하는게 진짜 난감하네요 ㅜㅜ
: : : : 마우스휠로 하였을때나...키로 움직였을때....스크롤을 어떻게 동기화 해야할까요 ㅜㅜ
: : : : 한폼에 두 그리드에 동시에 SetFocus()는 안되더군요...
: : : : (SetFocus때문에 그리드에서 자동 스크롤이 되는거 같거든요...)
: : : : 고수님의 조언 기다려봅니다