2008-12-19 3 views
5

Tôi có một hình thức mà không chú thích, sử dụng Nhấn đúp để tối đa hóa: Mã trông như thế này:cách chính xác để tối đa hóa hình thức trong delphi (không có chú thích)

procedure xxxxxx; 
begin 
    if Form1.WindowState=wsNormal then 
     begin 
     Form1.WindowState:=wsMaximized; 
     Form1.SetBounds(0,0,screen.Width,screen.Height-getHeightOfTaskBar); 
     end 
     else 
     begin 
     Form1.WindowState:=wsNormal; 
     end; 

     ShowTrayWindow; 
end; 
function getHeightOfTaskBar : integer; 
var hTaskBar:HWND; 
    rect : TRect; 
begin 
    hTaskbar := FindWindow('Shell_TrayWnd', Nil); 
    if hTaskBar<>0 then 
     GetWindowRect(hTaskBar, rect); 

    Result:=rect.bottom - rect.top; 
end; 

này hoạt động tốt, ngoại trừ việc tôi phải con số thanh tác vụ ở đâu để đặt lại SetBounds ...

Cách chính xác để thực hiện việc này là gì?

Cảm ơn.

Trả lời

9

Âm thanh ổn nhưng cũng giống như Drejc chỉ ra, thanh tác vụ có thể xuất hiện bất cứ nơi nào, vì vậy quá có thể sidebars cập cảng khác như Google Desktop, Winamp, vv

Thay vào đó có lẽ sử dụng giống như Screen.WorkAreaRect để có được những khu vực khách hàng của màn hình. Ví dụ.

with Screen.WorkAreaRect do 
    Form1.SetBounds(Left, Top, Right - Left, Bottom - Top); 
+2

Tốt nhưng điều này chỉ hoạt động với màn hình chính. Để tối đa hóa nó trên màn hình hiện tại, bạn sẽ cần phải làm như sau: với Screen.MonitorFromWindow (Form1.Handle) .WorkAreaRect làm Form1.SetBounds (Trái, Trên, Phải - Trái, Dưới - Trên); – Name

0

Một gợi ý bổ sung. Thanh tác vụ cũng có thể được đặt ở bên phải hoặc bên trái của màn hình (không chỉ trên cùng và dưới cùng). Vì vậy, bạn cũng phải tìm ra vị trí của thanh tác vụ.

Tôi khuyên bạn nên xem xét triển khai Delphi của SetWidnowState. Trong Delphi7 nó là một phần của mã:

procedure TCustomForm.SetWindowState(Value: TWindowState); 
const 
    ShowCommands: array[TWindowState] of Integer = 
    (SW_SHOWNORMAL, SW_MINIMIZE, SW_SHOWMAXIMIZED); 
begin 
    if FWindowState <> Value then 
    begin 
    FWindowState := Value; 
    if not (csDesigning in ComponentState) and Showing then 
     ShowWindow(Handle, ShowCommands[Value]); 
    end; 
end; 

Các ShowWindow là một Win32 gọi thư viện:

function ShowWindow; external user32 name 'ShowWindow'; 

nơi user32 = 'user32.dll'; nếu tôi không nhầm. Vì vậy, đào sâu vào thư viện này, có thể có một số thông tin của TaskBar ở đâu đó.