скрыть

скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Google  
 

Скрыть окна IDE во время проектирования



Оформил: DeeCo

//**************************************** 
// Paste into AutoHideIDE.dpk 
//**************************************** 
package AutoHideIDE;

 {$R *.res}
 {$ALIGN 8}
 {$ASSERTIONS ON}
 {$BOOLEVAL OFF}
 {$DEBUGINFO ON}
 {$EXTENDEDSYNTAX ON}
 {$IMPORTEDDATA ON}
 {$IOCHECKS ON}
 {$LOCALSYMBOLS ON}
 {$LONGSTRINGS ON}
 {$OPENSTRINGS ON}
 {$OPTIMIZATION ON}
 {$OVERFLOWCHECKS OFF}
 {$RANGECHECKS OFF}
 {$REFERENCEINFO ON}
 {$SAFEDIVIDE OFF}
 {$STACKFRAMES OFF}
 {$TYPEDADDRESS OFF}
 {$VARSTRINGCHECKS ON}
 {$WRITEABLECONST OFF}
 {$MINENUMSIZE 1}
 {$IMAGEBASE $400000}
 {$DESIGNONLY}
 {$IMPLICITBUILD OFF}

 requires
   rtl,
   vcl;
 contains
   AutoHide in 'AutoHide.pas';
 end.



 //**************************************** 
// Paste into AutoHide.pas 
//**************************************** 
unit AutoHide;

 interface

 uses
   Windows, Messages, SysUtils, Classes, Controls, Forms;

 type
   TAutoHider = class(TObject)
   protected
     procedure DelphiOnMessage(var Msg: TMsg; var Handled: Boolean);
     procedure MyDockDrop(Sender: TObject; Source: TDragDockObject; X, Y: Integer);
     procedure MyDestroy(Sender: TObject);
   public
     OldDockDrop: TDockDropEvent;
     OldDestroy: TNotifyEvent;

     Delphi: TApplication;
     Bar_Top: TForm;
     Bar_Left: TForm;
     ObjInspector: TForm;
     DockHost: TForm;

     Bar_Top_Rect: TRect;
     Bar_Left_Rect: TRect;

     F_AtTop: Boolean;
     F_AtLeft: Boolean;

     procedure Init_Bar_Left;
     procedure Bar_Left_Visible(val: Boolean);
     procedure Bar_Top_Visible(Value: Boolean);
   end;

 var
   AutoHider: TAutoHider;

 implementation

 { TAutoHide }

 procedure Restore_Bar_Left;
 begin
   AutoHider.ObjInspector.OnDockDrop := nil;

   if AutoHider.DockHost <> nil then
    begin
     AutoHider.DockHost.OnDestroy := nil;
   end;
   AutoHider.Bar_Left.BoundsRect := AutoHider.Bar_Left_Rect;
 end;

 procedure Restore_Bar_Top;
 begin
   AutoHider.Bar_Top.BoundsRect := AutoHider.Bar_Top_Rect;
 end;

 procedure InitAutoHider(Value: Boolean);
 begin
   if Value then
    begin
     AutoHider.Delphi  := Application;
     AutoHider.Bar_Top := TForm(Application.FindComponent('AppBuilder'));
     if AutoHider.Bar_Top <> nil then
      begin
       AutoHider.Bar_Top_Rect := AutoHider.Bar_Top.BoundsRect;

       AutoHider.ObjInspector  := AutoHider.Bar_Top.FindComponent('PropertyInspector')
         as TForm;
       AutoHider.Bar_Left_Rect := AutoHider.ObjInspector.BoundsRect;

       AutoHider.OldDockDrop := AutoHider.ObjInspector.OnDockDrop;
       AutoHider.ObjInspector.OnDockDrop := AutoHider.MyDockDrop;

       AutoHider.DockHost := nil;
       AutoHider.Init_Bar_Left;

       AutoHider.F_AtTop          := True;
       AutoHider.F_AtLeft         := True;
       AutoHider.Delphi.OnMessage := AutoHider.DelphiOnMessage;
     end;
   end
    else
    begin
     Restore_Bar_Left;
     Restore_Bar_Top;
   end;
 end;

 procedure TAutoHider.Bar_Top_Visible(Value: Boolean);
 begin
   if Value = F_AtTop then Exit;

   if Value then
    begin
     Bar_Top.Top := 0;
     Bar_Top.Show;
   end
    else
    begin
     Bar_Top.Top := -Bar_Top.Height + 3;
   end;

   F_AtTop := Value;
 end;

 procedure TAutoHider.Bar_Left_Visible(val: Boolean);
 begin
   if val = F_AtLeft then Exit;

   if val then
    begin
     Bar_Left.Left   := 0;
     Bar_Left.Top    := 0;
     Bar_Left.Height := Screen.WorkAreaHeight;
     Bar_Left.Show;
   end
    else
    begin
     Bar_Left.Left := -Bar_Left.Width + 3;
   end;

   F_AtLeft := val;
 end;

 procedure TAutoHider.DelphiOnMessage(var Msg: TMsg; var Handled: Boolean);
 begin
   if not Delphi.Active then Exit;
   if (Msg.message = WM_LBUTTONDOWN) then Exit;

   if (Msg.message = WM_MOUSEMOVE) or (Msg.message = WM_NCMOUSEMOVE) then
    begin
     if F_AtTop then
       if Mouse.CursorPos.Y > Bar_Top.Height + 50 then
        begin
         Bar_Top_Visible(False);
       end;
     if not F_AtTop then
       if Mouse.CursorPos.Y < 3 then
        begin
         Bar_Top_Visible(True);
       end;

     if F_AtLeft then
       if (Mouse.CursorPos.x > Bar_Left.Width + 50) and (not Bar_left.Active) then
        begin
         Bar_Left_Visible(False);
       end;
     if not F_AtLeft then
       if Mouse.CursorPos.X < 3 then
        begin
         Bar_Left_Visible(True);
       end;
   end;
 end;

 procedure TAutoHider.MyDestroy(Sender: TObject);
 begin
   if Sender is TApplication then
    begin
     Bar_Top_Visible(False);
     Bar_Left_Visible(False);
   end
    else
    begin
     if Assigned(OldDestroy) then OldDestroy(Sender);
     DockHost := nil;
     Bar_Left := ObjInspector;
   end;
 end;

 procedure TAutoHider.Init_Bar_Left;
 begin
   if (Delphi.FindComponent('TabDockHostForm') as TForm) <> nil then
     DockHost := Delphi.FindComponent('TabDockHostForm') as TForm
   else if (Delphi.FindComponent('JoinDockForm') as TForm) <> nil then
     DockHost := Delphi.FindComponent('JoinDockForm') as TForm;

   if DockHost <> nil then
    begin
     DockHost.Top       := 0;
     DockHost.Height    := Screen.WorkAreaHeight;
     OldDestroy         := DockHost.OnDestroy;
     DockHost.OnDestroy := MyDestroy;
     Bar_Left           := DockHost;
   end
    else
    begin
     Bar_Left := ObjInspector;
   end;
 end;

 procedure TAutoHider.MyDockDrop(Sender: TObject; Source: TDragDockObject; X,
   Y: Integer);
 begin
   if Assigned(OldDockDrop) then  OldDockDrop(Sender, Source, X, Y);
   Init_Bar_Left;
 end;

 initialization
   AutoHider := TAutoHider.Create;
   InitAutoHider(True);

 finalization
   InitAutoHider(False);
   AutoHider.Delphi.OnMessage := nil;
   AutoHider.Free;
 end.





Copyright © 2004-2016 "Delphi Sources". Delphi World FAQ




Группа ВКонтакте   Ссылка на Twitter   Группа на Facebook