Конференция "KOL" » выдвигающаяся форма [Delphi, Windows]
 
  • RusSun © (20.08.10 22:57) [0]
    Доброе время суток!
    Вопрос такой форма выдвигается, но обратно задвигается скачками.
    Как поправить?
    Вот код:

    program Project1;

    uses
     windows,messages,
     kol;
    type  TOnEvent = procedure( Sender: PObj )of object;
    {$R *.res}
    var
    form,form2,Btn1,Btn2:PControl;

    //область для процедур
    procedure form2Show( Dummy : Pointer; Sender: PControl );
    begin
    Animatewindow(form2.Handle,1000,Aw_hor_Positive or AW_SLIDE or AW_ACTIVATE)
    end;
    procedure clickbtn1(Dummy:Pointer;Sender:PControl; var mouse:TMouseEventData);
    begin
    if not Assigned( Form2 ) then
       NewForm(  Applet ,'Form2');
     Form2.Show;
    end;
    procedure Close_form2(Dummy:Pointer;Sender: PControl; var Accept: Boolean);
    begin
    Accept := FALSE;

    Animatewindow(form2.Handle,1000,AW_HOR_NEGATIVE or AW_SLIDE or AW_HIDE);
       Form2.Hide;
      // Accept := true;
       btn1.Focused:=true;

    end;
    procedure clickbtn2(Dummy:Pointer;Sender:PControl; var mouse:TMouseEventData);
    begin
    sendmessage(form2.Handle,wm_close,0,0)
    end;

    Begin
    form:=NewForm(Applet,'form').SetSize(611,412).setposition(336,107);
    //.centeronparent.Tabulate;
    Btn1 := NewButton( form, 'Btn1' ).SetPosition( 32,112 ).SetSize( 121, 0 );
    Btn2 := NewButton( form, 'Btn2' ).SetPosition( 32,160 ).SetSize( 121, 0 );
    form2:=NewForm(Applet,'form2').SetSize(323,218).setposition(509,127);
    form2.Color:= 16744448;
    //область для работы
    Btn1.OnClick:=TonEvent(MakeMethod(nil,@clickbtn1));
    Btn2.OnClick:=TonEvent(MakeMethod(nil,@clickbtn2));
    Form2.onShow :=  TOnEvent(MakeMethod(nil,@form2Show));
    form2.OnClose:=TOnEventAccept(MakeMethod(nil,@Close_form2));
    Run(form);
    end.

  • RusSun © (23.08.10 18:54) [1]
    //область для процедур
    function WINDOWPOS(Dummy:pointer;var Msg: tagMSG; var Rslt: Integer): Boolean;
    begin
     Result := FALSE;
     if Msg.message = WM_PAINT then
     begin
       Rslt := 0;
       Result := TRUE;
     end
       else
     if Msg.message = WM_WINDOWPOSCHANGED or WM_WINDOWPOSCHANGING then
     begin
       Rslt := 1;
       Result := TRUE;
       Form.Invalidate;
       form.Update;
     end;
    end;

    Form2.OnMessage :=TonMessage(MakeMethod(nil,@WINDOWPOS));

    только кнопка не работает:)
  • Vladimir Kladov © (24.08.10 15:58) [2]
    Параметров много наверное.
  • RusSun © (24.08.10 20:20) [3]
    procedure clickbtn2(Dummy:Pointer;Sender:PControl; var mouse:TMouseEventData);
    begin
    sendmessage(form2.Handle,wm_close,0,0)
    end;

    эта кнопка не работает:)
  • Vladimir Kladov © (25.08.10 21:22) [4]
    Нет Aplet'а.
  • RusSun © (27.08.10 20:27) [5]
    Applet := NewApplet('form');
    form:=NewForm(Applet,'form').SetSize(611,412).setposition(336,107);


    ...
    Run(Applet);



    Тогда форма появляется без нажатия на кнопку:)
    и при нажатии на кнопку
    btn2


    не плавно скользит влево, а просто закрывается.
    Хотя обработчик  form2.OnClose есть, он его не видит вовсе.

    И вот такой вопрос форма выдвигается и должна передать фокус кнопке, но это происходит лишь после события form2.OnClose.
    Ожидалось другое. Форма выдвигается.Что-то делаем на ней. Теряет форкус после определенных действии. Нажимаем вторую кнопку и задвигаем форму.
  • Vladimir Kladov © (27.08.10 20:37) [6]
    Вы же ее сами создали видимой до нажатия на кнопку, почему она не должна показываться.

    У меня под вин7 закрывается плавно и открывается потом тоже плавно, Close_form2 отрабатывает. Правда чтобы увидеть эту плавность надо раздвинуть окна на экране, чтобы первая форма не заслоняла вторую.
  • RusSun © (27.08.10 21:41) [7]
    Понял:)
    form2.Visible:=false;
    form2.StayOnTop:=true;


    Спасибо:)
 
Конференция "KOL" » выдвигающаяся форма [Delphi, Windows]
Есть новые Нет новых   [120352   +29][b:0][p:0.001]