음...
지난번에 팁란에 쓴 SetZOrderPosition 관한 부분은 잘못된 부분이 있었습니다.
private 로 변수가 아니라 함수같은경우 access하기 쉽지 않더라구요
SetZOrderPosition를 쓰는 방법으로
첫째로
박지훈.임프님이 소개해준 방법으로 ***.hpp 파일을 수정해서 쓰는 방법입니다.
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=21
//Controls.hpp 파일
void __fastcall SetParentFont(bool Value);
void __fastcall SetShowHint(bool Value);
void __fastcall SetParentShowHint(bool Value);
void __fastcall SetPopupMenu(Menus::TPopupMenu* Value);
void __fastcall SetText(const AnsiString Value);
void __fastcall SetTop(int Value);
void __fastcall SetVisible(bool Value);
void __fastcall SetWidth(int Value);
public: //다음과 같이 SetZOrderPosition 메소듣 public으로 수정해버린다.
void __fastcall SetZOrderPosition(int Position);
private:
void __fastcall UpdateAnchorRules(void);
void __fastcall WriteIsControl(Classes::TWriter* Writer);
두번째 방법은
SetZOrderPosition 함수를 직접 구현하는 방법입니다.
아래는 제가 작성한 코드입니다.
//C++Builder버젼
void __fastcall SetZOrderPosition3(TWinControl *wParent,TControl *Ctrl, int Position)
{
TList *cList=new TList;
for(int i=wParent->ControlCount -1 ; i>=0 ; i--)
if( wParent->Controls[i]!=Ctrl )cList->Add( wParent->Controls[i]);
if(Position>=wParent->ControlCount)cList->Add(Ctrl);
else cList->Insert(Position,Ctrl);
for(int i=0 ;i< cList->Count;i++)
((TControl*)cList->Items[i])->Parent=NULL;
for(int i=cList->Count -1; i>=0;i--)
((TControl*)cList->Items[i])->Parent=wParent;
delete cList;
}
//------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int idx=StrToIntDef(Edit1->Text,0);
TControl *Ctrl=(TControl *)FindComponent(Edit2->Text);
if( Ctrl==NULL)return;
SetZOrderPosition3(this,Ctrl,idx);
}
//Delphi 버젼
procedure SetZOrderPosition3(wParent: TWinControl ; Ctrl:TControl; Position: Integer);
var
I, Count: Integer;
cList: TList;
bAddCtrl: boolean;
begin
cList:=TList.Create;
for i:=wParent.ControlCount -1 downto 0 do
begin
if wParent.Controls[i]<>Ctrl then
cList.Add( wParent.Controls[i]);
end;
if(Position>=wParent.ControlCount) then
cList.Add(Ctrl)
else
cList.Insert(Position,Ctrl);
for i:=0 to cList.Count -1 do
begin
TControl(cList.Items[i]).Parent:=nil;
end;
for i:=cList.Count -1 downto 0 do
begin
TControl(cList.Items[i]).Parent:=wParent;
end;
cList.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
idx: Integer;
ctrl: TControl;
begin
idx:=StrToIntDef(Edit1.Text,0);
ctrl:=TControl(FindComponent(Edit2.Text));
if not Assigned(ctrl) then Exit;
SetZOrderPosition3(self,ctrl,idx);
end;
그럼...
안정혁.덱스터 님이 쓰신 글 :
: 혹시 SetZOrderPosition의 사용법에 대해서 아시는분 있으면
: 사용법에 대해서 좀 알려주세요
: BDS2006의 헬프에는 언급도 없고
: 팁&트릭란에 장성호님이 게시한 내용을 봐서는 잘모르겠네요
: 무작정 어떻게든 써볼려구 하니
: TControl::SetZOrderPosition not Accessible 에러 나오는데
: 혹시라도 써보신분 있으면 좀 알려주세요
|