TForm
Автор: Vimil Saju
Чтобы добавить дополнительную кнопку, нам прийдётся создать обработчики для следующих событий:
WM_NCPAINT;//вызывается, когда перерисовывается не клиентская область формы
WM_NCACTIVATE; вызывается, когда заголовок формы становится активныи
WM_NCLBUTTONDOWN; вызывается, когда кнопка мыши нажимается на не клиентской области
WM_NCMOUSEMOVE; вызывается, когда курсор мыши передвигается по не клиентской области
WM_MOUSEMOVE;вызывается, когда курсор мыши передвигается по клиентской области
WM_LBUTTONUP; вызывается, когда кнопка мыши отпушена в клиентской области
WM_NCLBUTTONUP; вызывается, когда кнопка мыши отпушена в не клиентской области
WM_NCLBUTTONDBLCLK; вызывается при двойном щелчке мышкой в не клиентской области
- Подробности
- Родительская категория: TForm
- Категория: Манипуляции с заголовком формы
Автор: Christian Cristofori
В примере показывается, как изменять заголовок окна (видимый в списке задач при переключении между приложениями) при минимизации окна в иконку.
Сперва необходимо определить сообщение поумолчанию:
Code: |
Const DefMsgNorm = 'MyApp version 1.0'; DefMsgIcon = 'MyApp. (Use F12 to turn of)'; |
- Подробности
- Родительская категория: TForm
- Категория: Манипуляции с заголовком формы
Как выполнить код после создания MDIChild-формы но до появления ее на экране?
Как отобразить MDIChild-форму модально?
1.Убераешь свою MDIChild форму из автосоздания: (MainMenu) Project->Options->Forms. Там её перебрасываешь в: Available forms
2. Переключаешься на свою MDIChild форму и дописываеш в описание класса(пусть например твой класс формы для MDIChild называется TForm2):
- Подробности
- Родительская категория: TForm
- Категория: MDI приложения
Note: The formDeactivate never gets called so when the form isn't active, sometimes the FormPaint isn't called. If anything causes the form to be repainted while in inactive, it draws correctly.
Примечание: formDeactivate никогда не вызывается, когда форма не активна, иногда FormPaint не называется. Если что-то вызывает форму, чтобы быть перекрашены в то время как в неактивном, он правильно рисует.
- Подробности
- Родительская категория: TForm
- Категория: Манипуляции с заголовком формы
Ваpиант 1. CoolBar.
Code: |
procedure TMainForm.SetBands(AControls: array of TWinControl; ABreaks: array of boolean); var i: integer; begin with CoolBar do begin for i:=0 to High(AControls) do begin if Bands.Count=succ(i) then TCoolBand.Create(Bands); with Bands[succ(i)] do begin if Assigned(Control) then Control.Hide; MinHeight:=AControls[i].Height; Break:=ABreaks[i]; Control:=AControls[i]; Control.Show; Visible:=true; end end; for i:=High(AControls)+2 to pred(Bands.Count) do Bands[i].Free end end; |
- Подробности
- Родительская категория: TForm
- Категория: MDI приложения
Создайте обработчик одного из сообщений WM_NC (non client - не клиентских) (посмотрите
WM_NC в Windows API help). Пример показывает как перехватить вижение мыши во всей
неклиенстской области окна (рамка и заголовок).
- Подробности
- Родительская категория: TForm
- Категория: Манипуляции с заголовком формы
Для того чтобы сделать это выполните следующие шаги:
Создайте новый проект.
Установите FormStyle формы в fsMDIForm
Разместите Image на форме и загрузите в него картинку.
Найдите { Private Declarations } в объявлении формы и добавьте следующие строки:
- Подробности
- Родительская категория: TForm
- Категория: MDI приложения
Автор: Fernando Silva
Пример показывает, как при инициализации формы происходит поиск нашего окна, а затем вычисление местоположения нужной нам кнопки в заголовке окна.
Code: |
procedure TForm1.FormCreate(Sender: TObject); var hwndHandle: THANDLE; hMenuHandle: HMENU; iPos: Integer;
begin hwndHandle := FindWindow(nil, PChar(Caption)); if (hwndHandle <> 0) then begin hMenuHandle := GetSystemMenu(hwndHandle, FALSE); if (hMenuHandle <> 0) then begin DeleteMenu(hMenuHandle, SC_CLOSE, MF_BYCOMMAND); iPos := GetMenuItemCount(hMenuHandle); Dec(iPos); { Надо быть уверенным, что нет ошибки т.к. -1 указывает на ошибку } if iPos > -1 then DeleteMenu(hMenuHandle, iPos, MF_BYPOSITION); end; end; end; |
- Подробности
- Родительская категория: TForm
- Категория: Манипуляции с заголовком формы
Code: |
procedure TCustomForm.VisibleChanging; begin if (FormStyle = fsMDIChild) and Visible then raise EInvalidOperation.Create(SMDIChildNotVisible); end; |
- Подробности
- Родительская категория: TForm
- Категория: MDI приложения
Code: |
{ Избавление от ScrollBar'ов в MDI-форме. (С) Peter Below (TeamB) } { Не надо VCL переписывать :-) }
unit MainForm;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Menus;
type TfMain = class(TForm) MainMenu1: TMainMenu; Newchild1: TMenuItem; Newchild2: TMenuItem; procedure Newchild2Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end;
var fMain: TfMain;
implementation
uses ChildForm;
{$R *.DFM}
procedure TfMain.Newchild2Click(Sender: TObject); begin with TfChild.Create(Application) do Show(); end;
function ClientWindowProc( wnd: HWND; msg: Cardinal; wparam, lparam: Integer ): Integer; stdcall; var f: Pointer; begin f := Pointer( GetWindowLong( wnd, GWL_USERDATA )); case msg of WM_NCCALCSIZE: if ( GetWindowLong( wnd, GWL_STYLE ) and (WS_HSCROLL or WS_VSCROLL)) <> 0 then SetWindowLong( wnd, GWL_STYLE, GetWindowLong( wnd, GWL_STYLE ) and not (WS_HSCROLL or WS_VSCROLL)); end; Result := CallWindowProc( f, wnd, msg, wparam, lparam ); end;
procedure TfMain.FormCreate(Sender: TObject); begin if ClientHandle <> 0 then begin if GetWindowLong( ClientHandle, GWL_USERDATA ) <> 0 then Exit; {cannot subclass client window, userdata already in use} SetWindowLong(ClientHandle, GWL_USERDATA, SetWindowLong( ClientHandle, GWL_WNDPROC, integer( @ClientWindowProc))); end;
end;
end. |
- Подробности
- Родительская категория: TForm
- Категория: MDI приложения
Если в дочерней форме MDI установить BorderStyle в bsNone, то заголовок формы не исчезнет. (Об этом сказано в хелпе). А вот следующий пример решает эту проблему:
Code: |
type ... = class(TForm) { other stuff above } procedure CreateParams(var Params: TCreateParams); override; { other stuff below } end; ... procedure tMdiChildForm.CreateParams(var Params: tCreateParams); begin inherited CreateParams(Params); Params.Style := Params.Style and (not WS_CAPTION); end; |
- Подробности
- Родительская категория: TForm
- Категория: MDI приложения
Страница 2 из 8