Contributor: PA VAN LONKHUYZEN


{****************************************************************}
{Delphi 2.0 only                                                 }
{AddBtn95 derives TRadioButton95 and TCheckBox95 from            }
{                 TRadioButton And TCheckBox to Give them the    }
{                 Additional Formatting Functionality found in   }
{                 Windows 95                                     }
{Added or changed properties :                                   }
{  Alignment  : How the Text next to the button is aligned       }
{  AlignmentBtn : Where the Button is positioned                 }
{  LikePushButton : Does the control look Like a Push Button?    }
{  VerticalAlignment : Where the text and button are positioned  }
{  WordWrap : Wrap the text if the box is to narrow              }
{****************************************************************}
{Ver 1.0                                                         }
{Copyright(c) 1996 PA van Lonkhuyzen                             }
{e-mail : peterv@global.co.za                                    }
{****************************************************************}

unit addbtn95;

interface

uses
  Windows,  StdCtrls, Classes, controls;

type
  TVAlignment = (vaTop,vaBottom,vaCenter);
  TCheckBox95 = class(TCheckBox)
  private
   fAlignment : TAlignment;
   fAlignmentBtn : TLeftRight;
   fLikePushButton : Boolean;
   fVerticalAlignment : TVAlignment;
   fWordWrap : Boolean;
  protected
    procedure createparams(var Params: TCreateParams); override;
    Procedure SetLikePushButton(ALikePushButton : Boolean);
    Procedure SetWordWrap(AWordWrap : Boolean);
    Procedure SetAlignment(AAlignment : TAlignment);
    Procedure SetAlignmentBtn(AAlignmentBtn : TLeftRight);
    Procedure SetVerticalAlignment(AVerticalAlignment : TVAlignment);
  public
    { Public declarations }
  published
   Property Alignment : TAlignment Read fAlignment Write SetAlignment;
   Property AlignmentBtn : TLeftRight Read fAlignmentBtn Write SetAlignmentBtn;
   Property LikePushButton : Boolean Read fLikePushButton Write SetLikePushButton;
   Property VerticalAlignment : TVAlignment Read fVerticalAlignment Write SetVerticalAlignment;
   Property WordWrap : Boolean Read fWordWrap Write SetWordWrap;
end;

  TRadioButton95 = class(TRadioButton)
  private
   fAlignment : TAlignment;
   fAlignmentBtn : TLeftRight;
   fLikePushButton : Boolean;
   fVerticalAlignment : TVAlignment;
   fWordWrap : Boolean;
  protected
    procedure createparams(var Params: TCreateParams); override;
    Procedure SetLikePushButton(ALikePushButton : Boolean);
    Procedure SetWordWrap(AWordWrap : Boolean);
    Procedure SetAlignment(AAlignment : TAlignment);
    Procedure SetAlignmentBtn(AAlignmentBtn : TLeftRight);
    Procedure SetVerticalAlignment(AVerticalAlignment : TVAlignment);
  public
    { Public declarations }
  published
   Property Alignment : TAlignment Read fAlignment Write SetAlignment;
   Property AlignmentBtn : TLeftRight Read fAlignmentBtn Write SetAlignmentBtn;
   Property LikePushButton : Boolean Read fLikePushButton Write SetLikePushButton;
   Property VerticalAlignment : TVAlignment Read fVerticalAlignment Write SetVerticalAlignment;
   Property WordWrap : Boolean Read fWordWrap Write SetWordWrap;
end;

procedure Register;

implementation
procedure TRadioButton95.createparams(var Params: TCreateParams);
begin
  Inherited createparams(Params);
  params.style:=params.style and not(BS_LEFT or BS_RIGHT or BS_CENTER OR
                                     BS_LEFTTEXT or BS_RIGHTBUTTON OR
                                     BS_TOP OR BS_BOTTOM OR BS_VCENTER);
  case fVerticalAlignment of
    vaTop : params.style:=params.style or BS_TOP;
    vaBottom : params.style:=params.style or BS_BOTTOM;
    else
      params.style:=params.style or BS_VCENTER;
  end;
  if fAlignmentBtn=taRightJustify then
    params.style:=params.style or BS_RIGHTBUTTON;
  case fAlignment of
    taLeftJustify : params.style:=params.style or BS_LEFT;
    taRightJustify : params.style:=params.style or BS_RIGHT;
    else params.style:=params.style or BS_CENTER;
  End;
  if fLikePushButton then
    params.style:=params.style or bs_pushLike;
  if fwordwrap then
    params.style:=params.style or bs_MultiLine;

end;


Procedure TRadioButton95.SetAlignment(AAlignment : TAlignment);
Begin
   If (AAlignment <> fAlignment) then
   begin
     fAlignment := AAlignment;
     recreatewnd;
   end;
End;


Procedure TRadioButton95.SetAlignmentBtn(AAlignmentBtn : TLeftRight);
Begin
   If (AAlignmentBtn <> fAlignmentBtn) then
   begin
     fAlignmentBtn := AAlignmentBtn;
     recreatewnd;
   end;
End;

Procedure TRadioButton95.SetLikePushButton(ALikePushButton : Boolean);
Begin
   If (ALikePushButton <> fLikePushButton) then
   begin
     fLikePushButton := ALikePushButton;
     recreatewnd;
   end;
End;

Procedure TRadioButton95.SetWordWrap(AWordWrap : Boolean);
Begin
   If (AWordWrap <> fWordwrap) then
   begin
     fWordwrap := AWordWrap;
     recreatewnd;
   end;
End;


Procedure TRadioButton95.SetVerticalAlignment(AVerticalAlignment : TVAlignment);
Begin
   If (AVerticalAlignment <> fVerticalAlignment) then
   begin
     fVerticalAlignment := AVerticalAlignment;
     Recreatewnd;
   end;
End;

procedure TCheckBox95.createparams(var Params: TCreateParams);
begin
  Inherited createparams(Params);
  params.style:=params.style and not(BS_LEFT or BS_RIGHT or BS_CENTER OR
                                     BS_LEFTTEXT or BS_RIGHTBUTTON OR
                                     BS_TOP OR BS_BOTTOM OR BS_VCENTER);
  case fVerticalAlignment of
    vaTop : params.style:=params.style or BS_TOP;
    vaBottom : params.style:=params.style or BS_BOTTOM;
    else
      params.style:=params.style or BS_VCENTER;
  end;    
  if fAlignmentBtn=taRightJustify then
    params.style:=params.style or BS_RIGHTBUTTON;
  case fAlignment of
    taLeftJustify : params.style:=params.style or BS_LEFT;
    taRightJustify : params.style:=params.style or BS_RIGHT;
    else params.style:=params.style or BS_CENTER;
  End;
  if fLikePushButton then
    params.style:=params.style or bs_PushLike;
  if fwordwrap then
    params.style:=params.style or bs_MultiLine;

end;


Procedure TCheckBox95.SetAlignment(AAlignment : TAlignment);
Begin
   If (AAlignment <> fAlignment) then
   begin
     fAlignment := AAlignment;
     recreatewnd;
   end;
End;


Procedure TCheckBox95.SetAlignmentBtn(AAlignmentBtn : TLeftRight);
Begin
   If (AAlignmentBtn <> fAlignmentBtn) then
   begin
     fAlignmentBtn := AAlignmentBtn;
     recreatewnd;
   end;
End;

Procedure TCheckBox95.SetLikePushButton(ALikePushButton : Boolean);
Begin
   If (ALikePushButton <> fLikePushButton) then
   begin
     fLikePushButton := ALikePushButton;
     recreatewnd;
   end;
End;

Procedure TCheckBox95.SetWordWrap(AWordWrap : Boolean);
Begin
   If (AWordWrap <> fWordwrap) then
   begin
     fWordwrap := AWordWrap;
     recreatewnd;
   end;
End;


Procedure TCheckBox95.SetVerticalAlignment(AVerticalAlignment : TVAlignment);
Begin
   If (AVerticalAlignment <> fVerticalAlignment) then
   begin
     fVerticalAlignment := AVerticalAlignment;
     Recreatewnd;
   end;
End;

procedure Register;
begin
  RegisterComponents('Win95', [TCheckBox95,TRadioButton95]);
end;

end.