procedure TForm1.ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
Index: Integer;
begin
SelectedText :='';
if Button = mbLeft then
with Sender as TlistBox Do <===== 요기
begin
index := ItemAtPos(Point(X,Y),True);
if index >= 0 then
begin
Begindrag(false);
SelectedText := Items.Strings[Index];
end;
end;
end;
위 소스를 보면.. with sender as Tlistbox do 란 문장이 있습니다
보통 비베에서 보면.. 저건 Sender 은 Tlistbox 다.. 이런 문장일텐데..
그렇다면.. With Serder 을 없애고 Sender as Tlistbox 를 써 준다음...
밑에 부분 부터..
procedure TForm1.ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
Index: Integer;
begin
SelectedText :='';
if Button = mbLeft then
Sender as TlistBox <===== 요기
begin
index := Sender.ItemAtPos(Point(X,Y),True); <=== 요기
if index >= 0 then
begin
Begindrag(false);
SelectedText := Sender.Items.Strings[Index]; <=== 요기
end;
end;
end;
이런 식으로 해 줘도 돼야 하지 않나요..??????
제가 오늘 처음 델파이를 해 봐서.. With문에서 Sender as TlistBox 가 뭘 뜻하는건지..
잘 모르겠네요.. 보통 책의 With문 예제를 봐도.. 걍 With 이름 do 이런 식으로 나와 있거든요... 델파이에선 Sender as Tlistbox 가 뭘 뜻하는건지..
그리고 맨 위의 소스를 With 문을 없애고 똑같은 기능을 하게 어떻게 바꿀수 있나요..
> procedure TForm1.ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
> Shift: TShiftState; X, Y: Integer);
> var
> Index: Integer;
>
> begin
> SelectedText :='';
> if Button = mbLeft then
> with Sender as TlistBox Do <===== 요기
> begin
> index := ItemAtPos(Point(X,Y),True);
> if index >= 0 then
> begin
> Begindrag(false);
> SelectedText := Items.Strings[Index];
> end;
> end;
> end;
>
> 위 소스를 보면.. with sender as Tlistbox do 란 문장이 있습니다
> 보통 비베에서 보면.. 저건 Sender 은 Tlistbox 다.. 이런 문장일텐데..
> 그렇다면.. With Serder 을 없애고 Sender as Tlistbox 를 써 준다음...
> 밑에 부분 부터..
> procedure TForm1.ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
> Shift: TShiftState; X, Y: Integer);
> var
> Index: Integer;
>
> begin
> SelectedText :='';
> if Button = mbLeft then
> Sender as TlistBox <===== 요기
> begin
> index := Sender.ItemAtPos(Point(X,Y),True); <=== 요기
> if index >= 0 then
> begin
> Begindrag(false);
> SelectedText := Sender.Items.Strings[Index]; <=== 요기
> end;
> end;
> end;
>
> 이런 식으로 해 줘도 돼야 하지 않나요..??????
> 제가 오늘 처음 델파이를 해 봐서.. With문에서 Sender as TlistBox 가 뭘 뜻하는건지..
> 잘 모르겠네요.. 보통 책의 With문 예제를 봐도.. 걍 With 이름 do 이런 식으로 나와 있거든요... 델파이에선 Sender as Tlistbox 가 뭘 뜻하는건지..
> 그리고 맨 위의 소스를 With 문을 없애고 똑같은 기능을 하게 어떻게 바꿀수 있나요..
>
WIth문은 말그대로 TypeCasting 하는 기능을 합니다.
Sender로 OOP에서 델파이의 콤퍼넌트의 최상위 Class인 TObject로 전달 함수에 전달된 것을 특정 Component로 치환 하는것이지요.
Component의 프로퍼티들을 바로 쓸려면 반드시 맞는 Component로 typecast 해줘야 합니다.
그리고 Sender As.. 는 넘겨받은 Object가 ..이면 하고 넘겨온 Component가 특정 Component인지를 검사하는 역활도 합니다.
가령 ListBox 에서 이벤트를 호출했는데 엉뚱한것으로 쓰는것을 방지하는것입니다.
도움이 되셨나요??