Конференция "KOL" » Форма на вообще весь экран
 
  • Vinum (21.05.08 22:56) [0]
    Здравствуйте. Делаю так:

    begin
    fs:=not(fs); //fullscreen
    if fs then
    begin
     form1.form.StayOnTop:=true;
     fh:=form1.form.Height;
     fw:=form1.form.Width;
     fl:=form1.form.Left;
     ft:=form1.form.Top;
     form1.form.Left:=0;
     form1.form.Top:=0;
     form1.form.Width:=screenwidth;
     form1.form.Height:=screenheight;
     form1.form.HasBorder:=false;
     form1.form.HasCaption:=false;
    end else
    begin
     form1.form.StayOnTop:=false;
     form1.form.Left:=fl;
     form1.form.Top:=ft;
     form1.form.Width:=fw;
     form1.form.Height:=fh;
     form1.form.HasBorder:=true;
     form1.form.HasCaption:=true;
    end;
    end;



    Код работает, но не всегда правильно, а именно тогда, когда сначала максимизируешь форму, а потом ее фуллскрин делаешь, таскбар не исчезает, ну и форма неправильные размеры принимает.
    С этим что-нибудь можно поделать?
  • Дмитрий К © (22.05.08 00:08) [1]
    Как вариант:
    program testMouseWheel;

    uses
     Windows, KOL;

    var Form, PB: PControl;

    procedure FormMouseWheel(Dummy, Sender: PControl; var Mouse: TMouseEventData);
    var zDelta: SmallInt; r:TRect; p: TPoint;
    begin
     GetWindowRect(PB.Handle, r);
     GetCursorPos(p);
     if PointInRect(p, r) then
     begin
       zDelta := HiWord(Mouse.Shift);
       if zDelta < 0 then
       begin
         PB.Width := PB.Width - 10;
         PB.Height := PB.Height - 10;
       end
       else begin
         PB.Width := PB.Width + 10;
         PB.Height := PB.Height + 10;
       end;
     end;
    end;

    procedure PBPaint(Dummy, Sender: PControl; DC: HDC);
    begin
     Sender.Canvas.FillRect(Sender.ClientRect);
    end;

    var wp: TWindowPlacement; FullScreened: Boolean; (***)

    procedure FullScreen(Undo: Boolean); (***)
    begin
     if Undo then
     begin
       Form.Style := Form.Style or (WS_CAPTION or WS_THICKFRAME);
       SetWindowPlacement(Form.Handle, @wp);
       FullScreened := False;
     end
     else begin
       wp.length := SizeOf(wp);
       GetWindowPlacement(Form.Handle, @wp);
       Form.Style := Form.Style and not (WS_CAPTION or WS_THICKFRAME);
       Form.BoundsRect := MakeRect(0, 0, ScreenWidth, ScreenHeight);
       FullScreened := True;
     end;
    end;

    procedure FormKeyUp(Dummy, Sender: PControl; var Key: Longint; Shift: DWORD); (***)
    begin
     if (Key = VK_F11) and (Shift and (MK_ALT or MK_CONTROL or MK_SHIFT) = 0) then
     begin
       FullScreen(FullScreened);
     end;
    end;

    begin
     Form := NewForm(nil, 'test');
     PB := NewPaintBox(Form);
     PB.Style := PB.Style or WS_BORDER;
     PB.Canvas.Brush.Color := clRed;
     PB.OnPaint := TOnPaint(MakeMethod(nil, @PBPaint));
     Form.OnMouseWheel := TOnMouse(MakeMethod(nil, @FormMouseWheel));
     Form.ExStyle := Form.ExStyle or WS_EX_LAYERED;
     Form.OnKeyUp := TOnKey(MakeMethod(nil, @FormKeyUp)); (***)
     SetLayeredWindowAttributes(Form.GetWindowHandle, clRed, 200, LWA_COLORKEY or LWA_ALPHA);

     Run(Form);
    end.


    Все что относится к развертыванию формы помечено '(***)'.
  • Vinum (22.05.08 08:19) [2]
    Дмитрий К, большое спасибо
 
Конференция "KOL" » Форма на вообще весь экран
Есть новые Нет новых   [134431   +15][b:0][p:0.001]