Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Избавление от скролов в MDI форме

Delphi , Программа и Интерфейс , 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.
Взято из http://forum.sources.ru

Привет! Я переведу текст на русский язык:

Это фрагмент кода Delphi, демонстрирующий, как удалить полосы прокрутки из формы MDI (Многодокументный интерфейс) в Windows. Код использует функцию SetWindowLong для подклассирования клиентского окна формы MDI и переопределения ее обработки определенных сообщений.

Вот разбивка кода:

  1. Класс TfMain определяется как наследник класса TForm, представляющего основную форму приложения.
  2. В процедуре FormCreate код проверяет, является ли клиентский хэндл (хэндл окна формы MDI) валидным и не был ли уже подклассирован. Если нет, то он настраивает подклассирование с помощью функции SetWindowLong с параметром GWL_USERDATA, установленным в 0.
  3. Процедура ClientWindowProc вызывается всякий раз, когда сообщение отправляется клиентскому окну. В этом случае она проверяет, является ли это сообщение WM_NCCALCSIZE, которое указывает на то, что окно нужно перерисовать. Если окно имеет полосы прокрутки (как указано в его стиле), код удаляет их, модифицируя стиль окна с помощью функции SetWindowLong.
  4. Процедура Newchild2Click вызывается при клике элемента меню, создавая и отображая новое дочернее окно.

Альтернативное решение заключается в использовании встроенной поддержки Delphi для форм MDI, например, установкой свойств ClientHeight и ClientWidth клиентского окна формы MDI для удаления полос прокрутки. Однако данный кодник предлагает более низкоуровневый подход, позволяющий иметь больше контроля над поведением формы MDI.

Обратите внимание, что комментарий "Не надо VCL переписывать :-)" (Перевод: 'Нет необходимости переписывать VCL') указывает, что автор aware о том, что модификация VCL (библиотеки компонентов Delphi) может быть сложной и ошибочной задачей. Предлагая workaround с помощью SetWindowLong, автор предлагает альтернативное решение, которое avoids модификацию VCL сама по себе.

Избавление от скролов в MDI-форме: в статье описывается способ уменьшения количества полос прокрутки в многооконной интерфейсе (MDI) без изменения кода VCL.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: MDI приложения ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 10:58:36/0.0062909126281738/0