Содержание материала

 

Code:

unit testmain;

 

interface

 

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

ExtCtrls, StdCtrls, Buttons, ShellAPI;

 

type

TForm1 = class(TForm)

   procedure FormCreate(Sender: TObject);

private

   { Private declarations }

   FOldHeight: Integer;

   procedure WMNCRButtonDown(var Msg: TWMNCRButtonDown);

     message WM_NCRBUTTONDOWN;

public

   { Public declarations }

end;

 

var

Form1: TForm1;

 

implementation

 

{$R *.DFM}

 

procedure TForm1.FormCreate(Sender: TObject);

begin

FOldHeight := ClientHeight;

end;

 

procedure TForm1.WMNCRButtonDown(var Msg: TWMNCRButtonDown);

var

I: Integer;

begin

if (Msg.HitTest = HTCAPTION) then

   if (ClientHeight = 0) then

   begin

     I := 0;

     while (I < FOldHeight) do

     begin

       I := I + 40;

       if (I > FOldHeight) then

         I := FOldHeight;

       ClientHeight := I;

       Application.ProcessMessages;

     end;

   end

   else

   begin

     FOldHeight := ClientHeight;

     I := ClientHeight;

     while (I > 0) do

     begin

       I := I - 40;

       if (I < 0) then

         I := 0;

       ClientHeight := I;

       Application.ProcessMessages;

     end;

   end;

end;

 

end.

 


First, by way of synopsis, the roll-up/down occurs in response to a WM_NCRBUTTONDOWN message firing off and the WMNCRButtonDown procedure handling the message, telling the window to roll up/down depending upon the height of the client area. WM_NCRBUTTONDOWN fires whenever the right mouse button is clicked in a "non-client" area, such as a border, menu or, for our purposes, the caption bar of a form. (The client area of a window is the area within the border where most of the interesting activity usually occurs. In general, the Windows API restricts application code to drawing only within the client area.)

 

Delphi encapsulates the WM_NCRBUTTONDOWN in a TWMNCRButtonDown type, which is actually an assignment from a TWMNCHitMessage type that has the following structure:

Во-первых, путем синопсис, рулон-вверх/вниз происходит в ответ на WM_NCRBUTTONDOWN сообщение Отправить и WMNCRButtonDown процедура обработки сообщения, повествующие окна для того чтобы свернуть вверх/вниз в зависимости от высоты клиентской области. WM_NCRBUTTONDOWN пожаров, когда правая кнопка мыши нажата в "неклиентскую область", такие как границы, меню или, для наших целей, в строке заголовка формы. (Клиентской области окна-это область в пределах границы, где наиболее интересные активности обычно наступает. В общем, в Windows API ограничивает код приложения для рисования только в пределах клиентской области.)

В Delphi инкапсулирует WM_NCRBUTTONDOWN в Тип TWMNCRButtonDown, который фактически задание от типа TWMNCHitMessage, который имеет следующую структуру:

 

Code:

type

TWMNCHitMessage = record

   Msg: Cardinal;

   HitTest: Integer;

   XCursor: SmallInt;

   YCursor: SmallInt;

   Result: Longint;

end;

 

It's easy to create message wrappers in Delphi to deal with messages that aren't handled by an object by default. Since a right-click on the title bar of a form isn't handled by default, I had to create a wrapper. The procedure procedure WMNCRButtonDown(var Msg : TWMNCRButtonDown); message WM_NCRBUTTONDOWN; is the wrapper I created. All that goes on in the procedure is the following:

 

In order to make this work, I had to create a variable called FOldHeight and set its value at FormCreate whenever the form was to be rolled up. FOldHeight is used as a place for the form to remember what size it was before it was re-sized to 0. When a form is to be rolled up, FOldHeight is immediately set to the current ClientHeight, which means you can interactively set the form's size, and the function will always return the form's ClientHeight to what it was before you rolled it up.

 

So what use is this? Well, sometimes I don't want to iconize a window; I just want to get it out of the way so I can see what's underneath. Having the capability to roll a form up to its title bar makes it a lot easier to see underneath a window without iconizing it, then having to Alt-tab back to it. (If you are familiar with the Macintosh platform, the System 7.5 environment offers a very similar facility called a "window shade," and makes a roll-up sound when the shade goes up.)

 

Это легко создать фантики сообщение в Delphi для обработки сообщений, которые не обрабатываются объекта по умолчанию. После щелчка правой кнопкой мыши на строке заголовка формы не обрабатываться по умолчанию, мне пришлось создать оболочку. Процедура процедура WMNCRButtonDown(вар Сообщений : TWMNCRButtonDown); сообщение WM_NCRBUTTONDOWN; это фантик, который я создал. Все, что происходит в процедура заключается в следующем:

 

Для того, чтобы сделать эту работу, мне пришлось создавать переменную FOldHeight и установите его значение в FormCreate, когда форма была свернута. FOldHeight используется как место для формы, чтобы помнить, какого размера он был, прежде чем он был повторно размера до 0. Когда форма будет скататься, FOldHeight для текущего ClientHeight, а значит, вы можете в интерактивном режиме задать Размер формы, и функция будет всегда возвращать ClientHeight формы, в какой она была, прежде чем свернуть.

 

Так какая польза от этого? Ну, иногда я не хочу обожествлять окно; я просто хочу, чтобы получить его из пути, поэтому я могу видеть то, что внутри. Имея возможность свернуть форму в заголовке делает его гораздо легче увидеть под окном без iconizing его, потом Альт-таб обратно. (Если вы знакомы с платформой Macintosh, системы окружающей среды 7.5 предлагает очень похожий объект называется "штора", и делает крен-вверх звук, когда тень идет вверх.)

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить