|
답변자 님이 쓰신 글 :
: 간단한 소스 입니다. 한번 보시면 사용 방법이 이해되실 겁니다.
:
: [1번, 구조체 아이템 할당]
: ==================================================================================
: void __fastcall TForm1::InitGrid()
: {
: TStringGrid *p = dynamic_cast<TStringGrid*>(FindComponent(aItem));
:
: if( p!=NULL )
: {
: p->ColWidths[0] = 60;
: p->Cells[0][0] = " 1층";
: p->Cells[0][1] = " 2층";
: p->Cells[0][2] = " 3층";
: p->Cells[0][3] = " 4층";
: p->Cells[0][4] = " 5층";
:
: // sItemObject 구조체 생성 및 각 그리드에 할당
: for( int i=0; i<p->RowCount; i++ )
: {
: for( int j=0; j<p->ColCount; j++ )
: {
: sItemObject * pItem = new sItemObject;
: pItem->bIsReg = false;
: pItem->bIsSelect = false;
: pItem->bIsAlive = false;
: pItem->szName = "N";
: if( j!=0 ) p->Cells[j][i] = pItem->szName;
: p->Objects[j][i] = (TObject*)pItem; // <---- 할당 코드, Cells 이 아닌 Objects 이용
: }
: }
: }
: }
:
: [2번 그리드에 할당된 아이템 속성에 따라 색상 변경]
: ==================================================================================
: void __fastcall TForm1::aaaDrawCell(TObject *Sender, int ACol, int ARow,
: TRect &Rect, TGridDrawState State)
: {
: TStringGrid* pGrid = dynamic_cast<TStringGrid*>(Sender);
: TCanvas * sc = pGrid->Canvas;
:
: unsigned oldalign = SetTextAlign( pGrid->Canvas->Handle, TA_CENTER );
: sItemObject * p = (sItemObject*)pGrid->Objects[ACol][ARow];
:
: if( p!=NULL )
: {
: /** @brief 단말기가 등록 됐다면 */
: if( p->bIsReg )
: {
: /** @brief 단말기가 존재하나 살아 있다면 */
: if( p->bIsAlive )
: {
: /** @brief 단말기가 선택 됐다면 */
: if( p->bIsSelect )
: {
: sc->Brush->Color = clRed;
: sc->Pen->Color = clBlack;
: sc->FillRect( Rect );
: sc->Font->Color = clWhite;
:
: }
: /** @brief 단말기가 선택 해제 됐다면 */
: else
: {
: sc->Brush->Color = clWhite;
: sc->Pen->Color = clBlack;
: sc->FillRect( Rect );
: sc->Font->Color = clBlack;
: }
: }
: }
: }
:
: /** @brief 0번 Column 색상 및 폰트 색상 정의 */
: if( ACol==0 )
: {
: sc->Brush->Color = clHighlight;
: sc->FillRect( Rect );
: sc->Font->Color = clWhite;
: }
:
: sc->TextRect( Rect, (Rect.Right+Rect.Left)/2, Rect.Top+5, pGrid->Cells[ACol][ARow] );
: SetTextAlign( pGrid->Canvas->Handle, oldalign );
: }
:
: [3번 각 그리드 마우스 클릭 시 버튼 속성 반전 처리]
: ==================================================================================
: void __fastcall TForm1::aaaMouseDown(TObject *Sender, TMouseButton Button,
: TShiftState Shift, int X, int Y)
: {
: int col, row;
: int iEvent;
:
: TStringGrid * pGrid = dynamic_cast<TStringGrid*>(Sender);
: pGrid->MouseToCell( X, Y, col, row );
: pGrid->SetFocus();
:
: if ( Button == mbLeft )
: {
: if ( col > 0 )
: {
: //<--- 구조체 정의 sItemObject => Grid 생성 sItemObject 생성, 각 그리드에 할당
: // <--- 할당 객체 주소 접근, 버튼 이벤트 갱신 처리
: sItemObject * pItem = reinterpret_cast<sItemObject*>(pGrid->Objects[col][row]);
: if( pItem!=NULL )
: {
: if( !pItem->bIsAlive ) return ;
:
: pItem->bIsSelect = !pItem->bIsSelect; // <---- 버튼 한번 클릭 시 Active, 다시 한번 클릭 시 DeActive
: pGrid->Refresh(); // <---- Grid 색상 변환 바로 업데이트, 갱신(DrawCell 함수 호출)
: }
: }
: }
: }
:
:
: 궁금자 님이 쓰신 글 :
: : 그리드로 버튼을 208개 생성 했습니다.
: :
: : 마우스로 셀을 클릭하면 힌색에서 빨강으로 바뀌고....다시 클릭하면 빨강에서 힌색으로 바뀌게....
: :
: : 그리고....제가 클릭한 건....모두 빨강으로 바뀌게 할수 있는 방법 업나요....
: :
: : 셀이 하나 밖에 빨강으로 안되네요.....하나 클릭하고....다른거 클릭하면 다른곳으로 넘어가 버림.
: :
: : //---------------------------------------------------------------------------
: : MarkBlock[13][16];
: : int xxx;
: : int preCol, preRow;
: : void __fastcall TForm1::aaaMouseDown(TObject *Sender, TMouseButton Button,
: : TShiftState Shift, int X, int Y)
: : {
: : String str;
: : long iCol, iRow;//,preCol,preRow;
: : aaa->MouseToCell(X,Y,iCol,iRow);
: : if(Shift.Contains(ssLeft)) {
: :
: : Memo1->Lines->Add(""+AnsiString((int)iRow)+"," + AnsiString((int)iCol));
: : // str = ""+AnsiString((int)iRow)+"," + AnsiString((int)iCol);
: :
: : preCol = iCol;
: : preRow = iRow;
: : }
: : }
: : //---------------------------------------------------------------------------
: :
: : void __fastcall TForm1::aaaDrawCell(TObject *Sender, int ACol, int ARow,
: : TRect &Rect, TGridDrawState State)
: : {
: :
: : if ( ACol == preCol && ARow == preRow )
: : {
: : Memo1->Lines->Add("ccc");
: : aaa->Canvas->Brush->Color = clRed;
: : aaa->Canvas->Pen->Color = clBlack;
: : aaa->Canvas->Font->Color = clBlack;
: : }
: : if(State.Contains(gdFocused)) {
: : aaa->Canvas->DrawFocusRect(Rect);
: : }
: :
: : //--가운데 정렬 텍스트
: : unsigned oldalign = SetTextAlign(aaa->Canvas->Handle, TA_CENTER);
: : aaa->Canvas->TextRect(Rect, (Rect.Right+Rect.Left)/2, Rect.Top+2,
: : aaa->Cells[ACol][ARow]);
: : SetTextAlign(aaa->Canvas->Handle, oldalign);
: : //-----
: :
: :
: : }
: : //---------------------------------------------------------------------------
|