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
[49049] Re:Re:TPageControl, TStringGrid, TPageControl 관련질문
pd [kmshts] 1535 읽음    2007-04-25 02:10
11.PNG 10.8KB 2-1 .원래화면입니다.
22.PNG 10.6KB 2-2. 이정도되고 더이상 줄어들지않게하는게 저의 의도입니다.
33.PNG 9.5KB 2-3. 그런데 이정도내려갑니다.
44.PNG 11.5KB 2-4. 그리고 올리면 아예 컴포넌트가 사라져버립니다.
허정주 님이 쓰신 글 :
: pd 님이 쓰신 글 :
: : 폼으로 뭐좀 만들려고하는데 빌더는 첨써봐서 어려움이 생기네요..
: : 이하에 질문이 많은데.. 어렵지않는 궁금증같습니다.
: : 해결좀 해주세요.
: :
: : 1.
: : 모든 RAD도구에서 접근방법은 두가지가있는것같습니다.
: : 오브젝트 인스펙터로하는방법과
: : 코딩으로하는방법이있는데
: :
: : PageControl1->Pages[0]->Caption= "캡션";
: : 이것을 오브젝트 인스펙터에서 바로 쓸수있는방법은 없을까요?
: PageControl1 에서 Pages[0] 이면 맨 처음 페이지를 선택하고 페이지 안쪽을 클릭 해서
: TTabSheet 를 선택한 뒤, Caption 속성을 "캡션" 으로 고쳐줍니다.
이부분을 제가 햇갈릴수밖에없었습니다.
이유는 PageControl을 이용해놓고 그위에 StringGrid->Align=alClient; 이렇게 줘버렸습니다
(오브젝트인스펙터에서 줘버렸음)
때문에 아무리 클릭을 해도 TTabSheet를 선택이안되니 저는 제방법이 틀린지알았습니다.
지금해보니까 StringGrid를 선택하고 ESC를 한번누르거나 오브젝트 트리뷰를 이용해서 접근하는방법도있었네요
어쨌던 지금은 이방법은 알려주신대로 해결되었습니다.
고맙습니다.

:
: : -----------------------------------
: : 2.
: : 스플리터를 페이지 컨트롤 위에 달았습니다.
: : 그런데 스플리터를 사용하니까 텝을 닫아버리네요.
: : 텝공간은 스플리터로부터 보호를 하고싶은데 어떻게 해야합니까?
설명이 부족한듯싶어 스샷을 찍어 올렸습니다.

: : -----------------------------------
: : 3.
: : 도움말에서 이런예제를 보면
: : __property Classes::TStrings* Cols[int Index] = {read=GetCols, write=SetCols};
: : 제일뒤쪽의  {read=GetCols, write=SetCols}; 이부분은 무슨의미입니까?
: 해당 프로퍼티를 통한 접근 방법을 제시합니다.
: read 에는 읽어오는 방법을, write 에는 쓰는 방법입니다.
: 여기에는 변수가 직접 올 수도 있고, 예제처럼(추측컨데) 함수가 올 수도 있습니다.
: 이 함수는 read 의 경우 프로퍼티 속성과 같은 형을 반환하고 매개변수는 없어야 하고
: write 의 경우는 인자값으로 매개변수와 같은 형을 받아야 합니다.
:
좀어려운내용이네요.. 선뜻이해하기힘든부분같습니다.
첨접하는 개념이라서 그런지..

: : -----------------------------------
: : 4.
: : TStringGrid 좌우정렬방법은 어떻게 해야하나요?
: 이건 잘 모르겠네요.
: 다음은 API 를 이용해 TEdit 중앙정렬 하는 코드입니다.
: 참고해서 한번해보세요.
: 될꺼같진 않지만;;
: void __fastcall SetAlignCenter( TEdit *Edt )
: {
:     // TEdit 컨트롤의 텍스트 중앙정렬
:     SetWindowLong(
:         Edt->Handle,
:         GWL_STYLE,
:         GetWindowLong( Edt->Handle, GWL_STYLE ) | ES_CENTER
:     );
:     Edt->Repaint();
: }
6번과 좀햇갈릴수있지만..
위 스샷을 보면 제가 지워놓은 노란 컬럼부분이 중앙정렬로 오게하고싶습니다.
또 이하의 데이터들도 중앙정렬로하고싶은데..
이렇게 복잡한 코드말고 오브젝트인스펙터에서 처리되는건없을까요?

:
: : -----------------------------------
: : 5.
: : TStatusBar의 중앙정렬
: : TStatusBar의 자동으로 상태줄맞춤
: 각 패널에 Alignment 속성이 있습니다.
: 상태줄 맞춤은 뭔지 모르겠네요.

이부분은 이런식으로 폼로딩시 삽입 처리해버렸습니다.
// StatusBar1 설정.
#define _SB_NUM_ 10   //여기서만 쓸것이다.
  AnsiString bartext[ _SB_NUM_ ]={"♡♡♡♡","","♤♤♤♤","","★★★★","","♣♣♣♣",""};
  for(int i=0;i<_SB_NUM_;i++)
  {
    StatusBar1->Panels->Insert(i);
    StatusBar1->Panels->Items[i]->Alignment=taCenter;
    StatusBar1->Panels->Items[i]->Width=80;
    StatusBar1->Panels->Items[i]->Text=bartext[i];
  }
실제 코드 중간에 define를 해버리고 그냥 이런식으로 처리해버렸는데
오류는 안나는데 퍼포먼스같은걸따졌을때나 잠재적오류 가능성등을 전혀 고려하지않았습니다.
한마디로 적절한표현인지모르겠네요

:
: : -----------------------------------
: : 6.
: : TStringGrid의 클릭시 정렬방법
: 이건 아마 셀 값을 직접 접근해서 정렬 알고리즘을 적용해야하지 않을까요?

이것은 데이터들의 정렬방법입니다.
중요한건 정렬방법이아니라. 고정된 셀을 클릭할수있는가입니다.
이고정된 셀을 클릭하면 정렬알고리즘을 사용해야겠는데.. 아직까진 생각만하고있습니다.

스샷에서 노란색으로 된부분은 고정된 칼럼부분입니다.
이부분을 클릭시 정렬이되게해야하는데 클릭자체도 되지않습니다.

:
: : -----------------------------------
: : 7.
: : TPageControl을 사용해서 처음에 "제목없음"이라는 텝을 넣고싶습니다.
: : 어떤방법으로 넣는지 알고싶습니다.
: 디자인시에 하는 방법은 1번을 참고하시고
: 런타임 생성은 빌더 도움말 예제를 참고하세요 아래에 적겠습니다.
: 탭시트 생성후 PageControl 속성에 해당 PageControl 을 넣어 연결합니다.
: 동적 생성된 탭시트는 명시적으로 삭제를 해주어야 하나봅니다 ~_~
:
: #include <Comctrls.hpp>
: TPageControl* ppc;
: TTabSheet* pts[MAXTABS];
: const char * ppcTabTitles[] = { "ShortString", "Orders", "Items", "Parts" };
: int iTabTitles = sizeof(ppcTabTitles)/sizeof(ppcTabTitles[0]);
:
: void __fastcall TForm1::FormCreate(TObject *Sender)
:
: {
:     ppc = new TPageControl(this);
:     ppc->Parent = this;
:     ppc->Align = alClient;
:     for (int i=0;i<iTabTitles;i++)
:   {
:         pts[i] = new TTabSheet(this);
:         pts[i]->PageControl = ppc;
:         pts[i]->Name = AnsiString("pts") + ppcTabTitles[i];
:         pts[i]->Caption = ppcTabTitles[i];
:   }
: }
:
: void __fastcall TForm1::FormDestroy(TObject *Sender)
:
: {
:   for (int i=0;i<iTabTitles;i++)
:         delete pts[i];
:     delete ppc;
: }
답변고맙습니다. 그런데 PageControl이아니라 TabControl을 말씀드리려고했었습니다.
제가아는바에의하면 PageControl은 텝마다 화면을 달리 구성할수있고
TabControl은 텝마다 동일한 화면이지만 그데이터만 달리하는걸로알고있습니다.
때문에 후자의 퍼포먼스가 전자보다 훨씬 낫다는 생각도하고있습니다.

잘못된부분이있는지와 관련예를 부탁드립니다.

스샷에서 상단의 스트링그리드부분을 하단처럼 해주려합니다.
하지만 하단은 PageControl로사용되고 첫번째패널은 다른컨트롤을 넣을것이고
두번째를 저와같이 디자인하였습니다.
상단의 TabControl을 어떻게 처리하는게 좋을지 궁금합니다.

+ -

관련 글 리스트
49047 TPageControl, TStringGrid, TPageControl 관련질문(수정 6회) pd 1212 2007/04/24
49050     Re:TPageControl, TStringGrid, TPageControl 관련질문(수정 6회) 장성호 1683 2007/04/25
49048     Re:TPageControl, TStringGrid, TPageControl 관련질문(수정 6회) 아루스 1274 2007/04/24
49049         Re:Re:TPageControl, TStringGrid, TPageControl 관련질문 pd 1535 2007/04/25
49060             Re:Re:Re:TPageControl, TStringGrid, TPageControl 관련질문 이정구 1227 2007/04/25
49053             Re:Re:Re:TPageControl, TStringGrid, TPageControl 관련질문 아루스 1792 2007/04/25
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.