MDI form scrollbars

 I want to make MDI main form scrollbars to be invisible
even in that case when one or more child windows come out
from the main form border.
  But setting up to .FALSE. of main form properties HorzScrollBar.Visible and VertyScrollBar.Visible give'nt effect. Then I try to redefine Style of the main form Style:=Style and not WS_HSROLL (WS_VSCROLL) by overriding the TForm.CreateParams metod, but with the same result.
  The only exit from this situation I find is to rewrite
TForm.AlignControls directly in forms.pas. (I made the scrollbars positions out from form border and then they are invisible though present physicaly.
  Unfortunately after this I have'nt a possibility to rebuild VCL and to use some modules (such as VBX tc.) because not all modules that are referencing to forms are present in source code.
   This Is my problem and I'd like to know, is there any way
to disable at all these scrollbars without coming into VCL
source code?
  Any help will be grateful.
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Line 2389 in Forms.pas:

Here's the problem... Commenting out the scroll styles will make things work as you wanted, but then, you got the version problem when installing other components....

Here's a unit fixing it.

Have your mainform call InstallHook(Self) sometime AFTER OnShow but before OnShow of any MDI CHild. I called it in the procedure creating a new MDI child.

Remember to call RemoveHook when the app terminates.

What happens is:
Everytime a MDI child is moved out of the MDI parent's window, a undocumented?? message, value $3F, is sent to the MDICLIENT window. The defaulthandler for this message obviously resets the window style to the one specified when creating the window. Unfortunately, I could not hook this message, therefore I just located an appropriate message to hook, and set the styles I want in the hook proc.

unit ScrollFix;

  Forms, Messages, Windows;

function InstallHook (AForm : TForm) : BOOLEAN;
function RemoveHook : BOOLEAN;


// These styles will be removed from the window
  StylesToRemove = WS_VSCROLL or WS_HSCROLL;

// Globals, for faster access
  StyleFixupHook : INTEGER;

// The hook procedure
function StyleFixup (nCode : INTEGER; wParam : WORD; lParam : INTEGER) : INTEGER; stdcall;
  pcwr  : PCWPRetStruct;
  pcwr := POINTER(lParam);

// WM_WINDOWPOSCHANGING seems to work. Tried a lot, but as far
// as I find, this one's stable.
  if (pcwr^.hwnd = StyleFixupWindow)
  and (pcwr^.message = WM_WINDOWPOSCHANGING) then begin

// Modify the window style.
        GetWindowLong (StyleFixupWindow, GWL_STYLE) and not StylesToRemove
  if nCode=HC_ACTION then Result := 0 else Result := CallNextHookEx(StyleFixupHook, nCode, wParam, lParam);

function InstallHook (AForm : TForm) : BOOLEAN;
// Installs the hook if not already installed.
  Result := StyleFixupWindow=0;
  if not Result then exit;
  StyleFixupHook := SetWindowsHookEx(WH_CALLWNDPROCRET, @StyleFixup, hInstance, 0);
  Result := StyleFixupHook<>0;
  if Result then StyleFixupWindow := AForm.CLientHandle;

function RemoveHook : BOOLEAN;
// Removes the hook if installed
  Result := StyleFixupWindow<>0;
  if Result then Result := UnhookWindowsHookEx (StyleFixupHook);
  if Result then StyleFixupWindow := 0;

// Better keep this, the compiler is a bit buggy and doesn't always
// initialize globals.
  StyleFixupWindow := 0;

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
riaukamoAuthor Commented:
Please answer if it's possible what I need to make your unit
to work under Delphi 1.0?
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today

From novice to tech pro — start learning today.