Q&A

  • 이해가 되질 않습니다. 도와 주세요
implementation

uses centform;



{$R *.DFM}



procedure TForm1.show1Click(Sender: TObject);

var

r : Trect;

begin

r := application.mainform.BoundsRect;

with form2 do

{form2의 크기와 위치를 계산한 후에 출력한다.}

begin

top := (((r.bottom - r.top) + height) div 2 );

left := (((r.right - r.Left) - width) div 2) + r.left;

show;

end;

end;

크기계산이 이해가 될것같으면서도 잘 되질않습니다.

고수님들 이해할수 있게 설명해주시면 감사하겠습니다.

수고하세요..

3  COMMENTS
  • Profile
    김종언 2000.12.07 04:12
    별로 좋은 프로그램은 아니네요....

    주석 달아 놓고..

    아래쪽에.. 다시 만들어놨어요.. 끝까지 보믄 이해가 갈것이요.

    이것은.. 띄울폼(form2)의 위치를 정하는 거여요...

    상하는 고정... 좌우는 form1의 중앙에 위치하게 되지요...



    implementation

    uses centform;



    {$R *.DFM}



    procedure TForm1.show1Click(Sender: TObject);

    var

    r : Trect;

    //=========== r 이 머신지는 알겄죠? rect 즉.. 사각형입니다요...





    begin

    r := application.mainform.BoundsRect;

    //=========== 이거시 머시냐.. 현재 폼의 범위를 r에다 쑤셔박았습니다요...



    //=========== 여그서부터는 폼2에다 하는 짓거리여요...

    with form2 do

    begin

    top := (((r.bottom - r.top) + height) div 2 );



    //=========== 폼2가 보여지는 위치가 어디냐...

    //=========== r.bottom 은 아까 메인폼의 미테쪽이어여

    //=========== r.top은 머시냐.. 당근 메인폼의 우에쪽이것지요...

    //=========== 아래에서 위를 빼면 머시냐.......... 그것은 노피지요....

    //=========== 즉.... 메인폼의 Height 이어요...

    //=========== 거기다가 다시 Height를 더했어요... 여기서는 form2의 높이지요..

    //=========== 그럼 현재까지의 값은.. 현재폼하고 보여줄폼의 높이를 더했지요..

    //=========== 그것을 다시 2로 나눴어요.. 여그까지 알것쮸?

    //=========== 요건 항상 높이가 일쩡하쥬...



    //=========== 머땀이 이지랄을 했당가요?

    //=========== 그냥 가볍게.. 할것이지.. 짱나게...

    //=========== 넘들이 보믄 무쟈게 복잡한것 처럼 보이네요.





    //=========== 그럼 아래껏을 보씨요.

    //=========== 그냥 메인폼의....중앙에 폼이 위치하게 하는거여요...(좌우...)



    left := (((r.right - r.Left) - width) div 2) + r.left;

    show;

    end;

    end;







    //=========== 아래 꺼슨.. 우에 꺼슬... 내맘대로 바꼬분거여요...

    //=========== 이것도 똑같은 거싱께... 한번 해보셔요..

    //=========== 우에꺼시 변수를 사용한거고.. 난 변수 사용안한거고..

    //=========== 쓰잘떼기 없는 연산이 하나 줄었어요...

    //=========== 쓸데없이 변수만들어 쓴고 쓸데없는 연산 하는

    //=========== 우에꺼 보담은.. 훨씬 나슬꺼시요...



    //=========== 자 이제 복창 하서유... 쓸모없는 연산을 없애자....

    //=========== 없애자... 없애자...



    procedure TForm1.show1Click(Sender: TObject);

    begin

    with application.mainform do

    begin

    form2.top := (((height) + form2.height) div 2 );

    form2.left := (((Width) - form2.width) div 2) + BoundsRect.left;

    end;

    form2.show;

    end;



    //=========== 아고 타이삥 뜯기 힘드요.. 그믄 열씨미 공부하씨요...

  • Profile
    타락천사 2000.12.07 05:49
    안녕하세여.. 타락임다..^^



    함 바꿔 봤습니다..



    procedure TForm1.show1Click(Sender: TObject);

    begin

    with Application.MainForm do

    begin

    Form2.Position := poScreenCenter;

    Form2.Show;

    end;

    end;



    즐푸하세여..^^



    타락천사...



  • Profile
    김종언 2000.12.07 18:08
    타락한 천사님....

    천사님이 하신거는여... 항상 화면 중앙이자나여...

    근데 첨에.. 질문 올리신님의 소스는.. 중앙이 아니에여...



    mainform의 좌우중앙에... form2가 뜨구여...

    상하는... (mainform의 높이 * from2의 높이) / 2 에요..

    절대 중앙아님...





    타락천사 wrote:

    > 안녕하세여.. 타락임다..^^

    >

    > 함 바꿔 봤습니다..

    >

    > procedure TForm1.show1Click(Sender: TObject);

    > begin

    > with Application.MainForm do

    > begin

    > Form2.Position := poScreenCenter;

    > Form2.Show;

    > end;

    > end;

    >

    > 즐푸하세여..^^

    >

    > 타락천사...

    >