home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1998 January / Pcwk0198.iso / Dcomplib / BWCCDEL.LZH / BWCCDEL.PAS < prev    next >
Pascal/Delphi Source File  |  1997-03-22  |  20KB  |  782 lines

  1. unit Bwccdel; {BWCC Delphi Controls
  2.                Author: Xiao Luo  }
  3.  
  4.  
  5.  
  6. {You can use this program in any application you want without
  7.  notice the author of this program.  You may freely distrubute 
  8.  this program as long as it's author is presented clearly as 
  9.  the original author.  You may also change this program and reproduce
  10.  newer verison for this program as long as it's free.}
  11.  
  12.  {Supported by DragonsoftMedia Inc. Xiao Luo (C) 1996,1997}
  13.  
  14.  
  15.  
  16. interface
  17.  
  18. uses
  19.   SysUtils,
  20.   WinTypes,
  21.   WinProcs,
  22.   Messages,
  23.   Classes,
  24.   Graphics,
  25.   Controls,
  26.   Forms,
  27.   Dialogs,
  28.   Menus,
  29.   StdCtrls;
  30.  
  31. const
  32.  idhelp=998;
  33.  
  34.  BBS_BITMAP=$8000;
  35.  BBS_PARENTNOTIFY=$2000;
  36.  BBS_OWNERDRAW=$1000;
  37.  BBM_SETBITS=BM_SETSTYLE+10;
  38.  BBN_SETFOCUS=BN_DOUBLECLICKED + 10;
  39.  BBN_SETFOCUSMOUSE=BN_DOUBLECLICKED + 11;
  40.  BBN_GOTATAB=BN_DOUBLECLICKED + 12;
  41.  BBN_GOTABTAB=BN_DOUBLECLICKED + 13;
  42.  BBN_MOUSEENTER=BN_DOUBLECLICKED + 14;
  43.  BBN_MOUSELEAVE=BN_DOUBLECLICKED + 14;
  44.  
  45.  BSS_GROUP=1;
  46.  BSS_HDIP=2;
  47.  BSS_VDIP=3;
  48.  BSS_HBUMP=4;
  49.  BSS_VBUMP=5;
  50.  BSS_RGROUP=6;
  51.  
  52.  BSS_CAPTION=$8000;
  53.  BSS_CTLCOLOR=$4000;
  54.  BSS_NOPREFIX=$2000;
  55.  BSS_LEFT=0;
  56.  BSS_CENTER=$0100;
  57.  BSS_RIGHT=$0200;
  58.  BSS_ALIGNMASK=$030;
  59.  
  60. var
  61.   loaderror:integer;
  62.  
  63.  
  64. type
  65.   Eloadlibraryerror=class(Exception);
  66.   TDefStyle=(DefualtButton, PushButton);
  67.   TSTATE=(Highlighted,Normal);
  68.   TBWCCButtonKind=(WordOnly,
  69. OK,Cancel,About,Retry,Ignore,Yes,No,
  70. Help);
  71.  
  72.  
  73.   TBorBtn=class(TButtonControl)
  74.     private
  75.       CurrentKind:TDefStyle;
  76.       CurrentState:TSTATE;
  77.       CurrentBWCCKind:TBWCCButtonKind;
  78.       FDefault: Boolean;
  79.       FCancel: Boolean;
  80.       FActive: Boolean;
  81.       FReserved: Byte;
  82.       FModalResult: TModalResult;
  83.       function GetKind:TBWCCButtonKind;
  84.       procedure SetKind(Value:TBWCCButtonKind);
  85.       procedure SetDefault(Value: Boolean);
  86.       procedure CMDialogKey(var Message: TCMDialogKey); message CM_DIALOGKEY;
  87.       procedure CMDialogChar(var Message: TCMDialogChar); message CM_DIALOGCHAR;
  88.       procedure CMFocusChanged(var Message: TCMFocusChanged); message CM_FOCUSCHANGED;
  89.       procedure CNCommand(var Message: TWMCommand); message CN_COMMAND;
  90.     protected
  91.       procedure CreateParams(var Params: TCreateParams); override;
  92.       procedure CreateWnd; override;
  93.       procedure SetButtonStyle(ADefault: Boolean); virtual;
  94.     public
  95.       procedure SetBits(Bit1,Bit2,Bit3:HBitmap);
  96.       constructor Create(AOwner: TComponent); override;
  97.       procedure Click; override;
  98.    published
  99. {      property kind read getkind; write setkind;}
  100.       property Kind:TBWCCButtonKind read GetKind write SetKind;
  101.     property Cancel: Boolean read FCancel write FCancel default False;
  102.     property Caption;
  103.     property Default: Boolean read FDefault write SetDefault default False;
  104.     property DragCursor;
  105.     property DragMode;
  106.     property Enabled;
  107.     property Font;
  108.     property ModalResult: TModalResult read FModalResult write FModalResult default 0;
  109.     property ParentFont;
  110.     property ParentShowHint;
  111.     property PopupMenu;
  112.     property ShowHint;
  113.     property TabOrder;
  114.     property TabStop default True;
  115.     property Visible;
  116.     property OnClick;
  117.     property OnDragDrop;
  118.     property OnDragOver;
  119.     property OnEndDrag;
  120.     property OnEnter;
  121.     property OnExit;
  122.     property OnKeyDown;
  123.     property OnKeyPress;
  124.     property OnKeyUp;
  125.     property OnMouseDown;
  126.     property OnMouseMove;
  127.     property OnMouseUp;
  128.     property OnDBlClick;
  129.   end;
  130.  
  131.   TBorRadio = class(TButtonControl)
  132.   private
  133.     FAlignment: TLeftRight;
  134.     FChecked: Boolean;
  135.     procedure SetAlignment(Value: TLeftRight);
  136.     procedure WMSetFocus(var Message: TWMSetFocus); message WM_SETFOCUS;
  137.     procedure CMCtl3DChanged(var Message: TMessage); message CM_CTL3DCHANGED;
  138.     procedure CMDialogChar(var Message: TCMDialogChar); message CM_DIALOGCHAR;
  139.     procedure CNCommand(var Message: TWMCommand); message CN_COMMAND;
  140.   protected
  141.     procedure SetChecked(Value: Boolean);
  142.     procedure CreateParams(var Params: TCreateParams); override;
  143.     procedure CreateWnd; override;
  144.   public
  145.     constructor Create(AOwner: TComponent); override;
  146.   published
  147.     property Alignment: TLeftRight read FAlignment write SetAlignment default taRightJustify;
  148.     property Caption;
  149.     property Checked: Boolean read FChecked write SetChecked default False;
  150.     property Color;
  151.     property DragCursor;
  152.     property DragMode;
  153.     property Enabled;
  154.     property Font;
  155.     property ParentColor;
  156.     property ParentCtl3D;
  157.     property ParentFont;
  158.     property ParentShowHint;
  159.     property PopupMenu;
  160.     property ShowHint;
  161.     property TabOrder;
  162.     property TabStop;
  163.     property Visible;
  164.     property OnClick;
  165.     property OnDblClick;
  166.     property OnDragDrop;
  167.     property OnDragOver;
  168.     property OnEndDrag;
  169.     property OnEnter;
  170.     property OnExit;
  171.     property OnKeyDown;
  172.     property OnKeyPress;
  173.     property OnKeyUp;
  174.     property OnMouseDown;
  175.     property OnMouseMove;
  176.     property OnMouseUp;
  177.   end;
  178.  
  179.  
  180.   TBorCheck = class(TButtonControl)
  181.   private
  182.     FAlignment: TLeftRight;
  183.     FAllowGrayed: Boolean;
  184.     FState: TCheckBoxState;
  185.     FReserved: Byte;
  186.     function GetChecked: Boolean;
  187.     procedure SetAlignment(Value: TLeftRight);
  188.     procedure SetChecked(Value: Boolean);
  189.     procedure SetState(Value: TCheckBoxState);
  190.     procedure WMSetFocus(var Message: TWMSetFocus); message WM_SETFOCUS;
  191.     procedure CMCtl3DChanged(var Message: TMessage); message CM_CTL3DCHANGED;
  192.     procedure CMDialogChar(var Message: TCMDialogChar); message CM_DIALOGCHAR;
  193.     procedure CNCommand(var Message: TWMCommand); message CN_COMMAND;
  194.   protected
  195.     procedure Toggle; virtual;
  196.     procedure CreateParams(var Params: TCreateParams); override;
  197.     procedure CreateWnd; override;
  198.   public
  199.     constructor Create(AOwner: TComponent); override;
  200.   published
  201.     property State: TCheckBoxState read FState write SetState default cbUnchecked;
  202.     property Alignment: TLeftRight read FAlignment write SetAlignment default taRightJustify;
  203.     property AllowGrayed: Boolean read FAllowGrayed write FAllowGrayed default False;
  204.     property Caption;
  205.     property Checked: Boolean read GetChecked write SetChecked stored False;
  206.     property Color;
  207.     property Ctl3D;
  208.     property DragCursor;
  209.     property DragMode;
  210.     property Enabled;
  211.     property Font;
  212.     property ParentColor;
  213.     property ParentCtl3D;
  214.     property ParentFont;
  215.     property ParentShowHint;
  216.     property PopupMenu;
  217.     property ShowHint;
  218.     property TabOrder;
  219.     property TabStop default true;
  220.     property Visible;
  221.     property OnClick;
  222.     property OnDragDrop;
  223.     property OnDragOver;
  224.     property OnEndDrag;
  225.     property OnEnter;
  226.     property OnExit;
  227.     property OnKeyDown;
  228.     property OnKeyPress;
  229.     property OnKeyUp;
  230.     property OnMouseDown;
  231.     property OnMouseMove;
  232.     property OnMouseUp;
  233.   end;
  234.  
  235.  TShadeStyle=(Group,Raisedgroup,Hdip,Vdip,HBump,VBump);
  236.  TBorShade=Class(TCustomControl)
  237.   protected
  238.     FStyle:TShadeStyle;
  239.     function GetStyle:TShadeStyle;
  240.     procedure SetStyle(value:TShadeStyle);
  241.     procedure CreateParams(var Params: TCreateParams); override;
  242.   public
  243.     constructor Create(AOwner: TComponent); override;
  244.   published
  245.     property Style:TShadeStyle read GetStyle write SetStyle;
  246.     property Ctl3D;
  247.     property Align;
  248.     property Caption;
  249.     property Color;
  250.     property DragCursor;
  251.     property DragMode;
  252.     property Enabled;
  253.     property Font;
  254.     property ParentColor;
  255.     property ParentCtl3D;
  256.     property ParentFont;
  257.     property ParentShowHint;
  258.     property PopupMenu;
  259.     property ShowHint;
  260.     property TabOrder;
  261.     property TabStop;
  262.     property Visible;
  263.     property OnClick;
  264.     property OnDblClick;
  265.     property OnDragDrop;
  266.     property OnDragOver;
  267.     property OnEndDrag;
  268.     property OnEnter;
  269.     property OnExit;
  270.     property OnMouseDown;
  271.     property OnMouseMove;
  272.     property OnMouseUp;
  273.   end;
  274.  
  275. function LoadDIBbitmap(Instance:word;Name:PChar):TBitmap;
  276. function  BWCCVersion:single;
  277. procedure BWCCRegister(hinst:word);
  278. function  BWCCIntlInit(language:word):boolean;
  279. function  BWCCIntlTerm: boolean;
  280. function  BWCCGetVersion:integer;
  281. function  BWCCGetPattern:word;
  282. function  BWCCmessagebox(WndParent: HWND; Txt,Caption: PChar; TextType: Word): Integer;
  283. procedure GetBWCCBitmap(Name:string;Assignto:Tbitmap);
  284.  
  285. procedure register;
  286.  
  287. var
  288.   OldExitProc:Pointer;
  289. implementation
  290.  
  291. function LoadDIBbitmap(Instance:word;Name:PChar):Tbitmap;
  292. const
  293.   BM = $4D42;  {Bitmap type identifier}
  294. var
  295.   Bmp: TBitmap;
  296.   BMF: TBitmapFileHeader;
  297.   HResInfo: THandle;
  298.   MemHandle: THandle;
  299.   Stream: TMemoryStream;
  300.   ResPtr: PByte;
  301.   ResSize: Longint;
  302. begin
  303.   BMF.bfType := BM;
  304.   {Find, Load, and Lock the Resource containing BITMAP_1}
  305.   HResInfo := FindResource(Instance, Name, RT_Bitmap);
  306.   MemHandle := LoadResource(HInstance, HResInfo);
  307.   ResPtr := LockResource(MemHandle);
  308.  
  309.   {Create a Memory stream, set its size, write out the bitmap
  310.    header, and finally write out the Bitmap                  }
  311.   Stream := TMemoryStream.Create;
  312.   ResSize := SizeofResource(HInstance, HResInfo);
  313.   Stream.SetSize(ResSize + SizeOf(BMF));
  314.   Stream.Write(BMF, SizeOf(BMF));
  315.   Stream.Write(ResPtr^, ResSize);
  316.  
  317.   {Free the resource and reset the stream to offset 0}
  318.   FreeResource(MemHandle);
  319.   Stream.Seek(0, 0);
  320.  
  321.   {Create the TBitmap and load the image from the MemoryStream}
  322.   Bmp := TBitmap.Create;
  323.   Bmp.LoadFromStream(Stream);
  324.   result.assign(BMP);
  325.   Bmp.Free;
  326.   Stream.Free;
  327. end;
  328.  
  329.   {$f+}
  330.   procedure BWCCRegister(hinst:word);
  331.   external 'BWCC';
  332.   {$f-}
  333.  
  334.   {$f+}
  335.   function  BWCCIntlInit(language:word):boolean;
  336.   external 'BWCC';
  337.   {$f-}
  338.  
  339.   {$f+}
  340.   function  BWCCIntlTerm: boolean;
  341.   external 'BWCC';
  342.   {$f-}
  343.  
  344.   {$f+}
  345.   function  BWCCGetVersion:integer;
  346.   external 'BWCC';
  347.   {$f-}
  348.  
  349.   function BWCCversion:single;
  350.    var a:word;
  351.        b:single;
  352.   begin
  353.     a:=BWCCgetversion;
  354.     b:=a div 256;
  355.     b:=b+ a mod 256;
  356.     BWCCVersion:=b;
  357.   end;
  358.  
  359.   {$f+}
  360.   function  BWCCGetPattern:word;
  361.   external 'BWCC';
  362.   {$f-}
  363.  
  364.   {$f+}
  365.   function  BWCCmessagebox(WndParent: HWND; Txt,Caption: PChar; TextType: Word): Integer;
  366.   external 'BWCC';
  367.   {$f-}
  368.  
  369.   {$f+}
  370.   Procedure GetBWCCbitmap(Name:string;Assignto:Tbitmap);
  371.   Var
  372.    a:HBitmap;
  373.    b:Pchar;
  374.   begin
  375.     getmem(b,sizeof(name));
  376.     strpcopy(b,name);
  377.     a:=loadbitmap(loaderror,b);
  378.     assignto.handle:=a;
  379.     deleteobject(a);
  380.     freemem(b,sizeof(name));
  381.   end;
  382.  
  383. constructor TBorBtn.Create(AOwner: TComponent);
  384. begin
  385.   inherited Create(AOwner);
  386.   ControlStyle := [csSetCaption, csOpaque, csDoubleClicks];
  387.   Width := 89;
  388.   Height := 33;
  389.   TabStop := True;
  390.   CurrentBWCCKind:=Kind;
  391.   SetKind(CurrentBWCCKind);
  392. end;
  393.  
  394. procedure TBorBtn.Click;
  395. var
  396.   Form: TForm;
  397. begin
  398.   Form := GetParentForm(Self);
  399.   if Form <> nil then Form.ModalResult := ModalResult;
  400.   inherited Click;
  401. end;
  402.  
  403. procedure TBorBtn.SetButtonStyle(ADefault: Boolean);
  404. const
  405.   BS_MASK = $000F;
  406. var
  407.   Style: Word;
  408. begin
  409.   if HandleAllocated then
  410.   begin
  411.     if ADefault then Style := BS_DEFPUSHBUTTON else Style := BS_PUSHBUTTON;
  412.     if GetWindowLong(Handle, GWL_STYLE) and BS_MASK <> Style then
  413.       SendMessage(Handle, BM_SETSTYLE, Style, 1);
  414.   end;
  415. end;
  416.  
  417. procedure TBorBtn.SetDefault(Value: Boolean);
  418. begin
  419.   FDefault := Value;
  420.   if HandleAllocated then
  421.     with GetParentForm(Self) do
  422.       Perform(CM_FOCUSCHANGED, 0, Longint(ActiveControl));
  423. end;
  424.  
  425. procedure TBorBtn.CreateParams(var Params: TCreateParams);
  426. const
  427.   ButtonStyles: array[Boolean] of LongInt = (BS_PUSHBUTTON, BS_DEFPUSHBUTTON);
  428. begin
  429.   inherited CreateParams(Params);
  430.   CreateSubClass(Params, 'borbtn');
  431.   with Params do Style := Style or ButtonStyles[FDefault];
  432. end;
  433.  
  434. procedure TBorBtn.CreateWnd;
  435. begin
  436.   inherited CreateWnd;
  437.   FActive := FDefault;
  438. end;
  439.  
  440. procedure TBorBtn.CNCommand(var Message: TWMCommand);
  441. begin
  442.   if Message.NotifyCode = BN_CLICKED then Click;
  443. end;
  444.  
  445. procedure TBorBtn.CMDialogKey(var Message: TCMDialogKey);
  446. begin
  447.   with Message do
  448.     if  (((CharCode = VK_RETURN) and FActive) or
  449.       ((CharCode = VK_ESCAPE) and FCancel)) and
  450.       (KeyDataToShiftState(Message.KeyData) = []) and CanFocus then
  451.     begin
  452.       Click;
  453.       Result := 1;
  454.     end else
  455.       inherited;
  456. end;
  457.  
  458. procedure TBorBtn.CMDialogChar(var Message: TCMDialogChar);
  459. begin
  460.   with Message do
  461.     if IsAccel(CharCode, Caption) and CanFocus then
  462.     begin
  463.       Click;
  464.       Result := 1;
  465.     end else
  466.       inherited;
  467. end;
  468.  
  469. procedure TBorBtn.CMFocusChanged(var Message: TCMFocusChanged);
  470. begin
  471.   with Message do
  472.     if Sender is TBorBtn then
  473.       FActive := Sender = Self
  474.     else
  475.       FActive := FDefault;
  476.   SetButtonStyle(FActive);
  477.   inherited;
  478. end;
  479.  
  480.  
  481.   procedure TBorBtn.SetBits(bit1,bit2,bit3:HBitmap);
  482.     type a=array[0..2] of Hbitmap;
  483.     var
  484.        bits:a;
  485.        Bitsp:^a;
  486.     begin
  487.        new(bitsp);
  488.        Bits[0] := bit1;
  489.        Bits[1] := bit2;
  490.        Bits[2] := bit3;
  491.        bitsp:=addr(bits);
  492.        Perform(BBM_SETBITS, 0, longint(bitsp));
  493.    end;
  494.  
  495.    function TBorBtn.GetKind:TBWCCbuttonKind;
  496.    begin
  497.      Result:=CurrentBWCCKind;
  498.    end;
  499.  
  500.    procedure TBorBtn.SetKind(Value:TBWCCbuttonKind);
  501.    var bit1,bit2,bit3:HBitmap;
  502.        i:integer;
  503.    begin
  504.       CurrentBWCCKind:=Value;
  505.       bit1:=0;
  506.       bit2:=0;
  507.       bit3:=0;
  508.       if CurrentBWCCKind=WordOnly then begin
  509.       i:=1999;
  510.       bit1:=loadbitmap(loaderror,makeintresource(i));
  511.       i:=3000+999;
  512.       bit2:=loadbitmap(loaderror,makeintresource(i));
  513.       i:=5000+999;
  514.       bit3:=loadbitmap(loaderror,makeintresource(i));
  515.       SetBits(bit1,bit2,bit3);
  516.       end
  517.       else
  518.       begin
  519.       if value<>Help then begin
  520.       i:=1000+ord(Value);
  521.       bit1:=loadbitmap(loaderror,makeintresource(i));
  522.       i:=3000+ord(Value);
  523.       bit2:=loadbitmap(loaderror,makeintresource(i));
  524.       i:=5000+ord(Value);
  525.       bit3:=loadbitmap(loaderror,makeintresource(i));
  526.       SetBits(bit1,bit2,bit3);
  527.       caption:='';
  528.       end
  529.       else
  530.       begin
  531.       i:=1000+idhelp;
  532.       bit1:=loadbitmap(loaderror,makeintresource(i));
  533.       i:=3000+idhelp;
  534.       bit2:=loadbitmap(loaderror,makeintresource(i));
  535.       i:=5000+idhelp;
  536.       bit3:=loadbitmap(loaderror,makeintresource(i));
  537.       SetBits(bit1,bit2,bit3);
  538.       caption:='';
  539.       end;
  540.       end;
  541.      Refresh;
  542.    end;
  543.  
  544. constructor TBorRadio.Create(AOwner: TComponent);
  545. begin
  546.   inherited Create(AOwner);
  547.   Width := 113;
  548.   Height := 17;
  549.   ControlStyle := [csSetCaption, csDoubleClicks];
  550.   FAlignment := taRightJustify;
  551. end;
  552.  
  553. procedure TBorRadio.SetAlignment(Value: TLeftRight);
  554. begin
  555.   if FAlignment <> Value then
  556.   begin
  557.     FAlignment := Value;
  558.     RecreateWnd;
  559.   end;
  560. end;
  561.  
  562. procedure TBorRadio.SetChecked(Value: Boolean);
  563.  
  564. procedure TurnSiblingsOff;
  565.   var
  566.     I: Integer;
  567.     Sibling: TControl;
  568.   begin
  569.     if Parent <> nil then
  570.       with Parent do
  571.         for I := 0 to ControlCount - 1 do
  572.         begin
  573.           Sibling := Controls[I];
  574.           if (Sibling <> Self) and (Sibling is TBorRadio) then
  575.             TBorRadio(Sibling).SetChecked(False);
  576.         end;
  577.   end;
  578.  
  579. begin
  580.   if FChecked <> Value then
  581.   begin
  582.     FChecked := Value;
  583.     TabStop := Value;
  584.     if HandleAllocated then
  585.       SendMessage(Handle, BM_SETCHECK, Cardinal(Checked), 0);
  586.     if Value then
  587.     begin
  588.       TurnSiblingsOff;
  589.       Click;
  590.     end;
  591.   end;
  592. end;
  593.  
  594. procedure TBorRadio.CreateParams(var Params: TCreateParams);
  595. const
  596.   Alignments: array[TLeftRight] of LongInt = (BS_LEFTTEXT, 0);
  597. begin
  598.   inherited CreateParams(Params);
  599.   CreateSubClass(Params, 'borradio');
  600.   with Params do
  601.     Style := Style or BS_RADIOBUTTON or BBS_PARENTNOTIFY or Alignments[FAlignment];
  602. end;
  603.  
  604. procedure TBorRadio.CreateWnd;
  605. begin
  606.   inherited CreateWnd;
  607.   SendMessage(Handle, BM_SETCHECK, Cardinal(FChecked), 0);
  608. end;
  609.  
  610. procedure TBorRadio.WMSetFocus(var Message: TWMSetFocus);
  611. begin
  612.     inherited;
  613. end;
  614.  
  615. procedure TBorRadio.CMCtl3DChanged(var Message: TMessage);
  616. begin
  617.   RecreateWnd;
  618. end;
  619.  
  620. procedure TBorRadio.CMDialogChar(var Message: TCMDialogChar);
  621. begin
  622.   with Message do
  623.     if IsAccel(Message.CharCode, Caption) and CanFocus then
  624.     begin
  625.       SetFocus;
  626.       Result := 1;
  627.     end else
  628.       inherited;
  629. end;
  630.  
  631. procedure TBorRadio.CNCommand(var Message: TWMCommand);
  632. begin
  633.   case Message.NotifyCode of
  634.     BN_CLICKED: SetChecked(True);
  635.     BN_DOUBLECLICKED: DblClick;
  636.   end;
  637. end;
  638.  
  639. constructor TBorCheck.Create(AOwner: TComponent);
  640. begin
  641.   inherited Create(AOwner);
  642.   Width := 97;
  643.   Height := 17;
  644.   TabStop := True;
  645.   ControlStyle := [csSetCaption, csDoubleClicks];
  646.   FAlignment := taRightJustify;
  647.   FState := cbUnchecked;
  648. end;
  649.  
  650. procedure TBorCheck.Toggle;
  651. begin
  652.   case State of
  653.     cbUnchecked:
  654.       if AllowGrayed then State := cbGrayed else State := cbChecked;
  655.     cbChecked: State := cbUnchecked;
  656.     cbGrayed: State := cbChecked;
  657.   end;
  658. end;
  659.  
  660. function TBorCheck.GetChecked: Boolean;
  661. begin
  662.   Result := State = cbChecked;
  663. end;
  664.  
  665. procedure TBorCheck.SetAlignment(Value: TLeftRight);
  666. begin
  667.   if FAlignment <> Value then
  668.   begin
  669.     FAlignment := Value;
  670.     RecreateWnd;
  671.   end;
  672. end;
  673.  
  674. procedure TBorCheck.SetChecked(Value: Boolean);
  675. begin
  676.   if Value then State := cbChecked else State := cbUnchecked;
  677. end;
  678.  
  679. procedure TBorCheck.SetState(Value: TCheckBoxState);
  680. begin
  681.   if FState <> Value then
  682.   begin
  683.     FState := Value;
  684.     if HandleAllocated then
  685.       SendMessage(Handle, BM_SETCHECK, Cardinal(FState), 0);
  686.     Click;
  687.   end;
  688. end;
  689.  
  690. procedure TBorCheck.CreateParams(var Params: TCreateParams);
  691. const
  692.   Alignments: array[TLeftRight] of LongInt = (BS_LEFTTEXT, 0);
  693. begin
  694.   inherited CreateParams(Params);
  695.   CreateSubClass(Params, 'borcheck');
  696.   with Params do
  697.     Style := Style or BS_3STATE or BBS_PARENTNOTIFY or Alignments[FAlignment];
  698. end;
  699.  
  700. procedure TBorCheck.CreateWnd;
  701. begin
  702.   inherited CreateWnd;
  703.   SendMessage(Handle, BM_SETCHECK, Cardinal(FState), 0);
  704. end;
  705.  
  706. procedure TBorCheck.WMSetFocus(var Message: TWMSetFocus);
  707. begin
  708.   if Ctl3D and (Ctl3DBtnWndProc <> nil) then UpdateWindow(Handle);
  709.   inherited;
  710. end;
  711.  
  712. procedure TBorCheck.CMCtl3DChanged(var Message: TMessage);
  713. begin
  714.   RecreateWnd;
  715. end;
  716.  
  717. procedure TBorCheck.CMDialogChar(var Message: TCMDialogChar);
  718. begin
  719.   with Message do
  720.     if IsAccel(CharCode, Caption) and CanFocus then
  721.     begin
  722.       SetFocus;
  723.       if Focused then Toggle;
  724.       Result := 1;
  725.     end else
  726.       inherited;
  727. end;
  728.  
  729. procedure TBorCheck.CNCommand(var Message: TWMCommand);
  730. begin
  731.   if Message.NotifyCode = BN_CLICKED then Toggle;
  732. end;
  733.  
  734. constructor TBorshade.Create(Aowner:TComponent);
  735. begin
  736.   inherited create(AOWNER);
  737.   Width:=50;
  738.   Height:=50;
  739.   FStyle:=Group;
  740. end;
  741.  
  742. procedure Tborshade.CreateParams(var Params:
  743. TCreateParams);
  744. begin
  745.   inherited CreateParams(Params);
  746.   CreateSubClass(Params, 'borshade');
  747.   with Params do
  748.     Style := Style or Ord(FStyle)+1 or BSS_Caption;
  749. end;
  750.  
  751. function Tborshade.GetStyle:TShadeStyle;
  752. begin
  753.  result:=Fstyle;
  754. end;
  755.  
  756. procedure Tborshade.SetStyle(Value:TShadeStyle);
  757. begin
  758.  FStyle:=Value;
  759.  Recreatewnd;
  760. end;
  761.  
  762. procedure register;
  763.   begin
  764.     registercomponents('BWCC',[TBorBtn]);
  765.     registercomponents('BWCC',[TBorRadio]);
  766.     registercomponents('BWCC',[TBorCheck]);
  767.     registercomponents('BWCC',[TBorShade]);
  768.   end;
  769.  
  770.   procedure BWCCExitProc;far;
  771.   begin
  772.     ExitProc:=OldExitProc;
  773.     If LoadError>=32 then FreeLibrary(Loaderror);
  774.   end;
  775. initialization
  776.   loaderror:=loadlibrary('BWCC.DLL');
  777.   if loaderror<HINSTANCE_ERROR then
  778.     raise Eloadlibraryerror.create('Cannot Load Library!');
  779.    OldExitProc:=ExitProc;
  780.    ExitProc:=@BWCCExitProc;
  781. end.
  782.