Checkitm.pas
上传用户:hylc_2004
上传日期:2014-01-23
资源大小:46800k
文件大小:11k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. {*******************************************************}
  2. {                                                       }
  3. {         Delphi VCL Extensions (RX)                    }
  4. {                                                       }
  5. {         Copyright (c) 1995, 1996 AO ROSNO             }
  6. {         Copyright (c) 1997, 1998 Master-Bank          }
  7. {                                                       }
  8. {*******************************************************}
  9. unit CheckItm;
  10. interface
  11. {$I RX.INC}
  12. uses {$IFDEF WIN32} Windows, {$ELSE} WinTypes, WinProcs, {$ENDIF} Messages,
  13.   SysUtils, Classes, Controls, Forms, Menus, Graphics, StdCtrls, Placemnt,
  14.   Dialogs, RXCtrls, ExtCtrls, RTLConsts, DesignIntf, DesignEditors, VCLEditors;
  15. type
  16. { TCheckItemEditor }
  17.   TCheckItemEditor = class(TForm)
  18.   private
  19.     FEdit: TEdit;
  20.     FOkBtn: TButton;
  21.     FCancelBtn: TButton;
  22.     FComboBox: TComboBox;
  23.     FEnableBox: TCheckBox;
  24.   public
  25.     constructor Create(AOwner: TComponent); override;
  26.   end;
  27. { TCheckItemsEditor }
  28.   TCheckItemsEditor = class(TForm)
  29.     Panel2: TPanel;
  30.     DeleteBtn: TButton;
  31.     NewBtn: TButton;
  32.     EditBtn: TButton;
  33.     Panel3: TPanel;
  34.     CancelBtn: TButton;
  35.     Panel1: TPanel;
  36.     FormPlacement: TFormPlacement;
  37.     OkBtn: TButton;
  38.     Popup: TPopupMenu;
  39.     AddListBtn: TButton;
  40.     cbGrayedItem: TMenuItem;
  41.     cbCheckedItem: TMenuItem;
  42.     cbUncheckedItem: TMenuItem;
  43.     N2: TMenuItem;
  44.     EnabledItem: TMenuItem;
  45.     ClearBtn: TButton;
  46.     CheckList: TRxCheckListBox;
  47.     UpBtn: TButton;
  48.     DownBtn: TButton;
  49.     procedure EditBtnClick(Sender: TObject);
  50.     procedure NewBtnClick(Sender: TObject);
  51.     procedure DeleteBtnClick(Sender: TObject);
  52.     procedure FormShow(Sender: TObject);
  53.     procedure FormCreate(Sender: TObject);
  54.     procedure EnabledItemClick(Sender: TObject);
  55.     procedure PopupPopup(Sender: TObject);
  56.     procedure AddListBtnClick(Sender: TObject);
  57.     procedure cbGrayedItemClick(Sender: TObject);
  58.     procedure cbCheckedItemClick(Sender: TObject);
  59.     procedure cbUncheckedItemClick(Sender: TObject);
  60.     procedure ClearBtnClick(Sender: TObject);
  61.     procedure CheckListClick(Sender: TObject);
  62.     procedure UpDownBtnClick(Sender: TObject);
  63.     procedure CheckListKeyDown(Sender: TObject; var Key: Word;
  64.       Shift: TShiftState);
  65.     procedure CheckListDragDrop(Sender, Source: TObject; X, Y: Integer);
  66.     procedure CheckListDragOver(Sender, Source: TObject; X, Y: Integer;
  67.       State: TDragState; var Accept: Boolean);
  68.   private
  69.     procedure CheckButtons;
  70.   end;
  71. { CheckItems property editor }
  72.   TCheckItemsProperty = class(TClassProperty)
  73.   public
  74.     function GetAttributes: TPropertyAttributes; override;
  75.     procedure Edit; override;
  76.   end;
  77. implementation
  78. {$R *.DFM}
  79. {$IFDEF WIN32}
  80.  {$D-}
  81. {$ENDIF}
  82. uses {$IFDEF RX_D3} StrLEdit, {$ELSE} StrEdit, {$ENDIF} Consts, RxConst,
  83.   VclUtils, BoxProcs;
  84. { TCheckItemsProperty }
  85. function TCheckItemsProperty.GetAttributes: TPropertyAttributes;
  86. begin
  87.   Result := [paDialog, paReadOnly];
  88. end;
  89. procedure TCheckItemsProperty.Edit;
  90. var
  91.   Comp: TPersistent;
  92. begin
  93.   with TCheckItemsEditor.Create(Application) do
  94.   try
  95.     Comp := Self.GetComponent(0);
  96.     if Comp is TComponent then
  97.       Caption := TComponent(Comp).Name + '.' + Self.GetName
  98.     else Caption := Self.GetName;
  99.     if Comp is TRxCheckListBox then begin
  100.       CheckList.AllowGrayed := TRxCheckListBox(Comp).AllowGrayed;
  101.       CheckList.Sorted := TRxCheckListBox(Comp).Sorted;
  102.       CheckList.CheckKind := TrxCheckListBox(Comp).CheckKind;
  103.     end;
  104.     CheckList.Items := TStrings(GetOrdValue);
  105.     if ShowModal = mrOk then SetOrdValue(LongInt(CheckList.Items));
  106.   finally
  107.     Free;
  108.   end;
  109. end;
  110. { TCheckItemEditor }
  111. constructor TCheckItemEditor.Create(AOwner: TComponent);
  112. begin
  113. {$IFDEF CBUILDER}
  114.   inherited CreateNew(AOwner, 0);
  115. {$ELSE}
  116.   inherited CreateNew(AOwner);
  117. {$ENDIF}
  118.   { Form definitions }
  119.   {Left := 354;
  120.   Top := 338;}
  121.   BorderStyle := bsDialog;
  122.   Caption := 'Item editor';
  123.   ClientHeight := 92;
  124.   ClientWidth := 330;
  125.   Font.Color := clWindowText;
  126.   Font.Size := 8;
  127.   Font.Name := 'MS Sans Serif';
  128.   Font.Style := [];
  129.   Scaled := True;
  130.   Position := poScreenCenter;
  131.   { FEdit }
  132.   FEdit := TEdit.Create(Self);
  133.   with FEdit do begin
  134.     Parent := Self;
  135.     Left := 8;
  136.     Top := 12;
  137.     Width := 313;
  138.     Height := 21;
  139.     TabOrder := 0;
  140.   end;
  141.   { FOkBtn }
  142.   FOkBtn := TButton.Create(Self);
  143.   with FOkBtn do begin
  144.     Parent := Self;
  145.     Left := 168;
  146.     Top := 60;
  147.     Width := 75;
  148.     Height := 25;
  149.     Caption := ResStr(SOKButton);
  150.     Default := True;
  151.     ModalResult := mrOk;
  152.     TabOrder := 1;
  153.   end;
  154.   { FCancelBtn }
  155.   FCancelBtn := TButton.Create(Self);
  156.   with FCancelBtn do begin
  157.     Parent := Self;
  158.     Left := 246;
  159.     Top := 60;
  160.     Width := 75;
  161.     Height := 25;
  162.     Cancel := True;
  163.     Caption := ResStr(SCancelButton);
  164.     ModalResult := mrCancel;
  165.     TabOrder := 2;
  166.   end;
  167.   { FCheckBox }
  168.   FComboBox := TComboBox.Create(Self);
  169.   with FComboBox do begin
  170.     Parent := Self;
  171.     Style := csDropDownList;
  172.     Items.Add('Unchecked');
  173.     Items.Add('Checked');
  174.     Items.Add('Grayed');
  175.     Left := 8;
  176.     Top := 38;
  177.     Width := 88;
  178.     TabOrder := 3;
  179.   end;
  180.   { FEnableBox }
  181.   FEnableBox := TCheckBox.Create(Self);
  182.   with FEnableBox do begin
  183.     Parent := Self;
  184.     Left := 104;
  185.     Top := 40;
  186.     Width := 70;
  187.     Height := 17;
  188.     Caption := 'Enabled';
  189.     State := cbChecked;
  190.     TabOrder := 4;
  191.   end;
  192. end;
  193. { TCheckItemsEditor }
  194. procedure TCheckItemsEditor.FormCreate(Sender: TObject);
  195. begin
  196. {$IFDEF WIN32}
  197.   with FormPlacement do begin
  198.     UseRegistry := True;
  199.     IniFileName := SDelphiKey;
  200.   end;
  201. {$ENDIF}
  202. end;
  203. procedure TCheckItemsEditor.CheckButtons;
  204. begin
  205.   DeleteBtn.Enabled := CheckList.ItemIndex >= 0;
  206.   EditBtn.Enabled := DeleteBtn.Enabled;
  207.   UpBtn.Enabled := CheckList.ItemIndex > 0;
  208.   DownBtn.Enabled := (CheckList.ItemIndex < CheckList.Items.Count - 1)
  209.     and (CheckList.ItemIndex >= 0);
  210. end;
  211. procedure TCheckItemsEditor.EditBtnClick(Sender: TObject);
  212. var
  213.   I: Integer;
  214. begin
  215.   I := CheckList.ItemIndex;
  216.   if I >= 0 then
  217.     with TCheckItemEditor.Create(Application) do
  218.     try
  219.       if Screen.PixelsPerInch <> 96 then begin { scale to screen res }
  220.         ScaleBy(Screen.PixelsPerInch, 96);
  221.         { The ScaleBy method does not scale the font well, so set the
  222.           font back to the original info. }
  223.         Font.Name := 'MS Sans Serif';
  224.         Font.Size := 8;
  225.         Left := (Screen.Width div 2) - (Width div 2);
  226.         Top := (Screen.Height div 2) - (Height div 2);
  227.       end;
  228.       FEdit.Text := CheckList.Items[I];
  229.       FComboBox.ItemIndex := Integer(CheckList.State[I]);
  230.       FEnableBox.Checked := CheckList.EnabledItem[I];
  231.       if ShowModal = mrOk then begin
  232.         CheckList.Items[I] := FEdit.Text;
  233.         CheckList.State[I] := TCheckBoxState(FComboBox.ItemIndex);
  234.         CheckList.EnabledItem[I] := FEnableBox.Checked;
  235.       end;
  236.       Self.CheckList.ItemIndex := I;
  237.     finally
  238.       Free;
  239.     end;
  240. end;
  241. procedure TCheckItemsEditor.NewBtnClick(Sender: TObject);
  242. var
  243.   Index: Integer;
  244. begin
  245.   with TCheckItemEditor.Create(Application) do
  246.   try
  247.     FEdit.Text := '';
  248.     FComboBox.ItemIndex := Integer(clbDefaultState);
  249.     FEnableBox.Checked := clbDefaultEnabled;
  250.     if ShowModal = mrOk then begin
  251.       Index := CheckList.Items.Add(FEdit.Text);
  252.       CheckList.State[Index] := TCheckBoxState(FComboBox.ItemIndex);
  253.       CheckList.EnabledItem[Index] := FEnableBox.Checked;
  254.       CheckButtons;
  255.     end;
  256.   finally
  257.     Free;
  258.   end;
  259. end;
  260. procedure TCheckItemsEditor.DeleteBtnClick(Sender: TObject);
  261. begin
  262.   if CheckList.ItemIndex >= 0 then begin
  263.     CheckList.Items.Delete(CheckList.ItemIndex);
  264.     CheckButtons;
  265.   end;
  266. end;
  267. procedure TCheckItemsEditor.FormShow(Sender: TObject);
  268. begin
  269.   CheckButtons;
  270. end;
  271. procedure TCheckItemsEditor.EnabledItemClick(Sender: TObject);
  272. begin
  273.   CheckList.EnabledItem[CheckList.ItemIndex] :=
  274.     not CheckList.EnabledItem[CheckList.ItemIndex];
  275. end;
  276. procedure TCheckItemsEditor.PopupPopup(Sender: TObject);
  277. var
  278.   Enable: Boolean;
  279. begin
  280.   Enable := CheckList.ItemIndex >= 0;
  281.   EnabledItem.Enabled := Enable;
  282.   cbGrayedItem.Enabled := Enable;
  283.   cbCheckedItem.Enabled := Enable;
  284.   cbUncheckedItem.Enabled := Enable;
  285.   cbGrayedItem.Checked := False;
  286.   cbCheckedItem.Checked := False;
  287.   cbUncheckedItem.Checked := False;
  288.   if Enable then begin
  289.     EnabledItem.Checked := CheckList.EnabledItem[CheckList.ItemIndex];
  290.     case CheckList.State[CheckList.ItemIndex] of
  291.       cbChecked: cbCheckedItem.Checked := True;
  292.       cbUnchecked: cbUncheckedItem.Checked := True;
  293.       cbGrayed: cbGrayedItem.Checked := True;
  294.     end;
  295.   end;
  296. end;
  297. procedure TCheckItemsEditor.AddListBtnClick(Sender: TObject);
  298. var
  299.   I: LongInt;
  300. begin
  301.   with TStrEditDlg.Create(Application) do
  302.     try
  303. {$IFDEF WIN32}
  304. {$IFNDEF RX_D3}
  305.       CodeWndBtn.Visible := False;
  306. {$ENDIF}
  307. {$ENDIF}
  308.       if ShowModal = mrOk then begin
  309.         for I := 0 to Memo.Lines.Count - 1 do
  310.           if Memo.Lines[I] <> '' then
  311.             CheckList.Items.Add(Memo.Lines[I]);
  312.         CheckButtons;
  313.       end;
  314.     finally
  315.       Free;
  316.     end;
  317. end;
  318. procedure TCheckItemsEditor.cbGrayedItemClick(Sender: TObject);
  319. begin
  320.   CheckList.State[CheckList.ItemIndex] := cbGrayed;
  321. end;
  322. procedure TCheckItemsEditor.cbCheckedItemClick(Sender: TObject);
  323. begin
  324.   CheckList.State[CheckList.ItemIndex] := cbChecked;
  325. end;
  326. procedure TCheckItemsEditor.cbUncheckedItemClick(Sender: TObject);
  327. begin
  328.   CheckList.State[CheckList.ItemIndex] := cbUnchecked;
  329. end;
  330. procedure TCheckItemsEditor.ClearBtnClick(Sender: TObject);
  331. begin
  332.   CheckList.Clear;
  333. end;
  334. procedure TCheckItemsEditor.CheckListClick(Sender: TObject);
  335. begin
  336.   CheckButtons;
  337. end;
  338. procedure TCheckItemsEditor.UpDownBtnClick(Sender: TObject);
  339. var
  340.   OldIndex, NewIndex: Integer;
  341. begin
  342.   OldIndex := CheckList.ItemIndex;
  343.   if Sender = UpBtn then NewIndex := OldIndex - 1
  344.   else {if Sender = DownBtn then} NewIndex := OldIndex + 1;
  345.   CheckList.Items.Move(OldIndex, NewIndex);
  346.   CheckList.ItemIndex := NewIndex;
  347.   CheckButtons;
  348. end;
  349. procedure TCheckItemsEditor.CheckListKeyDown(Sender: TObject;
  350.   var Key: Word; Shift: TShiftState);
  351. var
  352.   Incr: Integer;
  353. begin
  354.   case Key of
  355.     VK_DELETE:
  356.       if ssCtrl in Shift then begin
  357.         DeleteBtnClick(nil);
  358.         Key := 0;
  359.       end;
  360.     VK_INSERT:
  361.       if Shift = [] then begin
  362.         AddListBtnClick(nil);
  363.         Key := 0;
  364.       end;
  365.     VK_DOWN, VK_UP:
  366.       if (ssCtrl in Shift) then begin
  367.         if Key = VK_DOWN then Incr := 1
  368.         else Incr := -1;
  369.         BoxMoveFocusedItem(CheckList, CheckList.ItemIndex + Incr);
  370.         CheckButtons;
  371.         Key := 0;
  372.       end;
  373.   end;
  374. end;
  375. procedure TCheckItemsEditor.CheckListDragDrop(Sender, Source: TObject; X,
  376.   Y: Integer);
  377. begin
  378.   if Source = CheckList then begin
  379.     BoxMoveFocusedItem(CheckList, CheckList.ItemAtPos(Point(X, Y), True));
  380.     CheckButtons;
  381.   end;
  382. end;
  383. procedure TCheckItemsEditor.CheckListDragOver(Sender, Source: TObject; X,
  384.   Y: Integer; State: TDragState; var Accept: Boolean);
  385. begin
  386.   BoxDragOver(CheckList, Source, X, Y, State, Accept, CheckList.Sorted);
  387.   if State = dsDragLeave then CheckList.DragCursor := crDrag
  388.   else if (State = dsDragEnter) and (CheckList.SelCount > 1) then
  389.     CheckList.DragCursor := crMultiDrag;
  390. end;
  391. end.