Q&A

  • 동적생성컴포넌트 제거하는 법좀~?
procedure TForm1.Img1MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

var

TempRect: TRect;

myEdit : TEdit;

begin

myEdit := TEdit.Create(Main);

with myEdit do

begin

Left := ImgBox.Left + X;

Top := ImgBox.Top + Y;

Width := 40;

Parent := Main;

Tag := 1;

Global_X := X;

Global_Y := Y;

Setfocus;

end;

end;





procedure TMain.FormKeyPress(Sender: TObject; var Key: Char);

var

I: Integer;

Temp: TComponent;

begin

if key = #27 then

begin

for I := ComponentCount - 1 downto 0 do

begin

Temp := Components[I];

if Temp is TEdit then

RemoveComponent(Temp);

end;

end;

end;





위와 같이 이미지를 클릭했을때 동적으로 버튼을 생성했습니다.

그리고 폼에서 ESC키를 누르면 생성한 버튼을 제거하려 합니다.

그런데 잘 되지 않습니다.

컴포넌트 제거하는 방법좀 알려주세요~~

4  COMMENTS
  • Profile
    최용일 2001.09.25 19:16
    안녕하세요. 최용일입니다.



    폼의 KeyPreview속성을 True로 해놓고 다음과 같이 코딩하세요...



    procedure TMain.FormKeyPress(Sender: TObject; var Key: Char);

    var

    I: Integer;

    Temp: TComponent;

    begin

    if key = #27 then

    begin

    for I := ControlCount - 1 downto 0 do

    begin

    Temp := Controls[I];

    if Temp is TEdit then

    begin

    Temp.Free;

    end;

    end;

    end;

    end;



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



    델프리 wrote:

    > procedure TForm1.Img1MouseDown(Sender: TObject; Button: TMouseButton;

    > Shift: TShiftState; X, Y: Integer);

    > var

    > TempRect: TRect;

    > myEdit : TEdit;

    > begin

    > myEdit := TEdit.Create(Main);

    > with myEdit do

    > begin

    > Left := ImgBox.Left + X;

    > Top := ImgBox.Top + Y;

    > Width := 40;

    > Parent := Main;

    > Tag := 1;

    > Global_X := X;

    > Global_Y := Y;

    > Setfocus;

    > end;

    > end;

    >

    >

    > procedure TMain.FormKeyPress(Sender: TObject; var Key: Char);

    > var

    > I: Integer;

    > Temp: TComponent;

    > begin

    > if key = #27 then

    > begin

    > for I := ComponentCount - 1 downto 0 do

    > begin

    > Temp := Components[I];

    > if Temp is TEdit then

    > RemoveComponent(Temp);

    > end;

    > end;

    > end;

    >

    >

    > 위와 같이 이미지를 클릭했을때 동적으로 버튼을 생성했습니다.

    > 그리고 폼에서 ESC키를 누르면 생성한 버튼을 제거하려 합니다.

    > 그런데 잘 되지 않습니다.

    > 컴포넌트 제거하는 방법좀 알려주세요~~

  • Profile
    델프리 2001.09.25 19:21
    procedure TForm1.Img1MouseDown(Sender: TObject; Button: TMouseButton;

    Shift: TShiftState; X, Y: Integer);

    var

    myEdit : TEdit;

    begin

    myEdit := TEdit.Create(Main);

    with myEdit do

    begin

    Left := ImgBox.Left + X;

    Top := ImgBox.Top + Y;

    Width := 40;

    Parent := Main;

    Tag := 1;

    OnKeyPress := EditKeyPress; -> 여기서 삭제

    end;

    end;





    procedure TMain.EditKeyPress(Sender: TObject; var Key: Char);

    begin

    if key = #27 then

    begin

    if TEdit(Sender).Text = '' then

    begin

    TEdit(Sender).Free; // 여기서 에러가 나요...

    end;

    end;

    end;



    KeyPress이벤트에서 Free가 되지 않는데 어떻게 삭제를 하면 되나요?

  • Profile
    델프리 2001.09.25 19:20


    최용일 wrote:

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

    >

    > 폼의 KeyPreview속성을 True로 해놓고 다음과 같이 코딩하세요...

    >

    > procedure TMain.FormKeyPress(Sender: TObject; var Key: Char);

    > var

    > I: Integer;

    > Temp: TComponent;

    > begin

    > if key = #27 then

    > begin

    > for I := ControlCount - 1 downto 0 do

    > begin

    > Temp := Controls[I];

    > if Temp is TEdit then

    > begin

    > Temp.Free; // 여기서 에러가

    > end;

    > end;

    > end;

    > end;

    >

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

    >

    > 델프리 wrote:

    > > procedure TForm1.Img1MouseDown(Sender: TObject; Button: TMouseButton;

    > > Shift: TShiftState; X, Y: Integer);

    > > var

    > > TempRect: TRect;

    > > myEdit : TEdit;

    > > begin

    > > myEdit := TEdit.Create(Main);

    > > with myEdit do

    > > begin

    > > Left := ImgBox.Left + X;

    > > Top := ImgBox.Top + Y;

    > > Width := 40;

    > > Parent := Main;

    > > Tag := 1;

    > > Global_X := X;

    > > Global_Y := Y;

    > > Setfocus;

    > > end;

    > > end;

    > >

    > >

    > > procedure TMain.FormKeyPress(Sender: TObject; var Key: Char);

    > > var

    > > I: Integer;

    > > Temp: TComponent;

    > > begin

    > > if key = #27 then

    > > begin

    > > for I := ComponentCount - 1 downto 0 do

    > > begin

    > > Temp := Components[I];

    > > if Temp is TEdit then

    > > RemoveComponent(Temp);

    > > end;

    > > end;

    > > end;

    > >

    > >

    > > 위와 같이 이미지를 클릭했을때 동적으로 버튼을 생성했습니다.

    > > 그리고 폼에서 ESC키를 누르면 생성한 버튼을 제거하려 합니다.

    > > 그런데 잘 되지 않습니다.

    > > 컴포넌트 제거하는 방법좀 알려주세요~~

  • Profile
    최용일 2001.09.26 09:14
    잘 되는데요... 제가 직접 실행해보고 올린건데요... 이상하군요...



    델프리 wrote:

    >

    > 최용일 wrote:

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

    > >

    > > 폼의 KeyPreview속성을 True로 해놓고 다음과 같이 코딩하세요...

    > >

    > > procedure TMain.FormKeyPress(Sender: TObject; var Key: Char);

    > > var

    > > I: Integer;

    > > Temp: TComponent;

    > > begin

    > > if key = #27 then

    > > begin

    > > for I := ControlCount - 1 downto 0 do

    > > begin

    > > Temp := Controls[I];

    > > if Temp is TEdit then

    > > begin

    > > Temp.Free; // 여기서 에러가

    > > end;

    > > end;

    > > end;

    > > end;

    > >

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

    > >

    > > 델프리 wrote:

    > > > procedure TForm1.Img1MouseDown(Sender: TObject; Button: TMouseButton;

    > > > Shift: TShiftState; X, Y: Integer);

    > > > var

    > > > TempRect: TRect;

    > > > myEdit : TEdit;

    > > > begin

    > > > myEdit := TEdit.Create(Main);

    > > > with myEdit do

    > > > begin

    > > > Left := ImgBox.Left + X;

    > > > Top := ImgBox.Top + Y;

    > > > Width := 40;

    > > > Parent := Main;

    > > > Tag := 1;

    > > > Global_X := X;

    > > > Global_Y := Y;

    > > > Setfocus;

    > > > end;

    > > > end;

    > > >

    > > >

    > > > procedure TMain.FormKeyPress(Sender: TObject; var Key: Char);

    > > > var

    > > > I: Integer;

    > > > Temp: TComponent;

    > > > begin

    > > > if key = #27 then

    > > > begin

    > > > for I := ComponentCount - 1 downto 0 do

    > > > begin

    > > > Temp := Components[I];

    > > > if Temp is TEdit then

    > > > RemoveComponent(Temp);

    > > > end;

    > > > end;

    > > > end;

    > > >

    > > >

    > > > 위와 같이 이미지를 클릭했을때 동적으로 버튼을 생성했습니다.

    > > > 그리고 폼에서 ESC키를 누르면 생성한 버튼을 제거하려 합니다.

    > > > 그런데 잘 되지 않습니다.

    > > > 컴포넌트 제거하는 방법좀 알려주세요~~