Q&A

  • ctrlsize 좀 가르쳐 주세요..
안녕하세요.

최용일님께서 작성하신 ctrlsize를 보고 작업을 하고 있읍니다.(감사.. 감사..)



저는 패널을 동적으로 생성(갯수는 정해져 있지 않음)시켜서 크기조절과 이동을 하고 있는데요. 근데. 한 패널에 포커스가 가 있을때 그 패널을 없애려고 하는데.. 그걸 모르겠어요.



선택한 패널을 FindComponent로 찾으면 못찾는데요.. 패널은 생성될때 임의로 제가 정해주고 있구요..

제가 FindComponent를 잘못 써서 그런거 같기도 하고요..



TempPanel := (form1.FindComponent(panelname) as TPanel);

TempPanel.free; --> TempPanel는 TPanel로 선언되어 있고요..



소스에는 FControl이 선택한 컴포넌트의 이름이 나오던데..

panelname := FControl.name로 컴포넌트의 이름이 저장되는데..



뭐가 문제죠?



동적으로 컴포넌트를 생성할 때 제가 임의로 컴포넌트 이름을 지정하는게 어디에 따로 등록이 되야 하나요??



제 생각엔 Findcomponent가 컴포넌트를 못찾는거 같기도 하고요..



이거 어떻게 해야하죠???



아시는 분은 꼭 좀 알려주세요.. 바쁘시더라도.. 감사합니다.

3  COMMENTS
  • Profile
    최용일 2001.11.03 21:34
    안녕하세요. 최용일입니다.



    흠~ 그거 제가 만든거는 아니구요... Marco Cantu가 만든것을 약간 손본거뿐입니다...



    제가 볼때는 이상이 없을거 같구요... 동적으로 생성하실때 이름을 정해주시지 않은거



    같네요... 컴포넌트 이름을 정해주시지 않으면 FindComponent로 찾지 못하거든요...



    var

    Panel: TPanel;

    begin

    Panel := TPanel.Create(Self);

    ......

    Panel.Name := 'MyPanel; // 아마두 이부분이 빠진거 같네요...

    Panel.Parent := Self;

    .....

    end;



    혹시 발생할지 모를 예외를 피하기 위해서 nil검사를 해주세요...



    TempPanel := TPanel(Form1.FindComponent(PanelName));

    if TempPanel <> nil then

    TempPanel.Free;



    ^^ 항상 즐코하세요...



    박수진 wrote:

    > 안녕하세요.

    > 최용일님께서 작성하신 ctrlsize를 보고 작업을 하고 있읍니다.(감사.. 감사..)

    >

    > 저는 패널을 동적으로 생성(갯수는 정해져 있지 않음)시켜서 크기조절과 이동을 하고 있는데요. 근데. 한 패널에 포커스가 가 있을때 그 패널을 없애려고 하는데.. 그걸 모르겠어요.

    >

    > 선택한 패널을 FindComponent로 찾으면 못찾는데요.. 패널은 생성될때 임의로 제가 정해주고 있구요..

    > 제가 FindComponent를 잘못 써서 그런거 같기도 하고요..

    >

    > TempPanel := (form1.FindComponent(panelname) as TPanel);

    > TempPanel.free; --> TempPanel는 TPanel로 선언되어 있고요..

    >

    > 소스에는 FControl이 선택한 컴포넌트의 이름이 나오던데..

    > panelname := FControl.name로 컴포넌트의 이름이 저장되는데..

    >

    > 뭐가 문제죠?

    >

    > 동적으로 컴포넌트를 생성할 때 제가 임의로 컴포넌트 이름을 지정하는게 어디에 따로 등록이 되야 하나요??

    >

    > 제 생각엔 Findcomponent가 컴포넌트를 못찾는거 같기도 하고요..

    >

    > 이거 어떻게 해야하죠???

    >

    > 아시는 분은 꼭 좀 알려주세요.. 바쁘시더라도.. 감사합니다.

  • Profile
    장덕권 2001.11.05 19:23
    최용일 wrote:

    > 안녕하세요. 최용일입니다.

    >

    > 흠~ 그거 제가 만든거는 아니구요... Marco Cantu가 만든것을 약간 손본거뿐입니다...

    >

    > 제가 볼때는 이상이 없을거 같구요... 동적으로 생성하실때 이름을 정해주시지 않은거

    >

    > 같네요... 컴포넌트 이름을 정해주시지 않으면 FindComponent로 찾지 못하거든요...

    >

    > var

    > Panel: TPanel;

    > begin

    > Panel := TPanel.Create(Self);

    > ......

    > Panel.Name := 'MyPanel; // 아마두 이부분이 빠진거 같네요...

    > Panel.Parent := Self;

    > .....

    > end;

    >

    > 혹시 발생할지 모를 예외를 피하기 위해서 nil검사를 해주세요...

    >

    > TempPanel := TPanel(Form1.FindComponent(PanelName));

    > if TempPanel <> nil then

    > TempPanel.Free;

    >

    > ^^ 항상 즐코하세요...

    >

    > 박수진 wrote:

    > > 안녕하세요.

    > > 최용일님께서 작성하신 ctrlsize를 보고 작업을 하고 있읍니다.(감사.. 감사..)

    > >

    > > 저는 패널을 동적으로 생성(갯수는 정해져 있지 않음)시켜서 크기조절과 이동을 하고 있는데요. 근데. 한 패널에 포커스가 가 있을때 그 패널을 없애려고 하는데.. 그걸 모르겠어요.

    > >

    > > 선택한 패널을 FindComponent로 찾으면 못찾는데요.. 패널은 생성될때 임의로 제가 정해주고 있구요..

    > > 제가 FindComponent를 잘못 써서 그런거 같기도 하고요..

    > >

    > > TempPanel := (form1.FindComponent(panelname) as TPanel);

    > > TempPanel.free; --> TempPanel는 TPanel로 선언되어 있고요..

    > >

    > > 소스에는 FControl이 선택한 컴포넌트의 이름이 나오던데..

    > > panelname := FControl.name로 컴포넌트의 이름이 저장되는데..

    > >

    > > 뭐가 문제죠?

    > >

    > > 동적으로 컴포넌트를 생성할 때 제가 임의로 컴포넌트 이름을 지정하는게 어디에 따로 등록이 되야 하나요??

    > >

    > > 제 생각엔 Findcomponent가 컴포넌트를 못찾는거 같기도 하고요..

    > >

    > > 이거 어떻게 해야하죠???

    > >

    > > 아시는 분은 꼭 좀 알려주세요.. 바쁘시더라도.. 감사합니다.



    관심갖어 주셔서 감사합니다.

    제가 컴포넌트를 생성할 때의 소스입니다.



    NEW_Panel1 :=TPanel.Create(self);

    NEW_Panel1.Parent := Form1;

    NEW_Panel1.Name := 'Panel_' + inttostr(indexcount);

    NEW_Panel1.Top := PnlTop + PnlHeight;

    NEW_Panel1.Left := PnlLeft;

    NEW_Panel1.Width := PnlWidth;

    NEW_Panel1.Height := PnlHeight;

    NEW_Panel1.Caption :=EdtName1.text +' '+ '('+ EdtUpper1.text + ')';

    NEW_Panel1.tag := indexcount;

    NEW_Panel1.OnClick := PanelsClick;



    Name 속성은 주고 있거든요.. 근데 Name을 그냥 Panel1, panel2,.. 이런식으로 주면 에러가나면서 이미 그런 판넬이 존재한다고 나오고요..

    미치겠읍니다.

  • Profile
    장덕권 2001.11.05 19:32
    Form2 화면에서 Form1화면에 생성을 하려니 아래 문장(1번)을 (2번)문장으로 바꿔야 하는군요..



    NEW_Panel1 :=TPanel.Create(self); -> 1번

    NEW_Panel1 :=TPanel.Create(Form1); -> 2번