CheckComboBox (source Included)
http://users.otenet.gr/~tsoyran/checkcomboBox.htm
| Name | CheckComboBox (source Included) |
|---|---|
| Version | 1.7 (May 2001) for Delphi 4,5,6,7 |
| Description | This is a merge of ComboBox and CheckListBox You can Multi select Items, checking - unchecking them in the dropdownlist. For every selected,unselected item it's value is inserted,deletedin the combo box line separated by comma from the other choices. You can select/unselect all with the right click menu. You can take the result in 3 different formats (quoted) ready to use in SQL New properties
|
| Download | the component source CheckCombo.zip |
| and two demos (as I asked for) | |
| the project CHCBDemo.zip | |
| the project DemoExe.zip |
源码本地下载:其中包括有vc的CheckComboBox源码和delphi的源码:
https://files.cnblogs.com/chulia20002001/checkcombo_vc_delphi.rar
TCheckComboBox控件的载图:

以下给出TCheckedComboBox控件的delphi源代码和演示例程:
TCheckedComboBox控件源码 --- CheckCombo.pas
unit CheckCombo;
{
TCheckedComboBox ver 1.7
tested on D4,D5
ComboBox with CheckListBox
When you check/uncheck an item this is added/removed in the visual part of combo.
It has also a popup with Select all, unSelect all items with other additions
-----------------------------------------------------------------
This component was first created
20-Deceber 1999 by Tsourinakis Antonis
and code additions made by
Christian Alain Ouellet UACA (ouelletchristian@uaca.com)
------------------------------------------------------------------
Can be freely used and distributed in commercial and
private environments. You are free to copy and modify the source code.
If you want I would like this notice to be provided as is.
-----------------------------------------------------------------
feel free to contact me:
tsoyran@otenet.gr
http://users.otenet.gr/~tsoyran
-----------------------------------------------------------------
special thanks to Jan Verhoeven
email : jan1.verhoeven@wxs.nl
website: http://members.xoom.com/JanVee/jfdelphi.htm
for his help
and to any other component creator from which a get ideas
-----------------------------------------------------------------
Special Properties
CapSelectAll The caption on popupmenu item for Check All
-----------------------------------------------------------------
CapDeSelectAll The caption on popupmenu item for UnCheck All
-----------------------------------------------------------------
NotFocusColor The color when the component has no focus
-----------------------------------------------------------------
Columns Like the columns of common check box
-----------------------------------------------------------------
DropDownLines The number of dropDown lines
between MINDROPLINES and MAXDROPLINES;
They are autoarranged if the Columns are>1
-----------------------------------------------------------------
Checked[Index: Integer]
you can traverse this array to have if an
item is checked or not
-----------------------------------------------------------------
QuoteStyle of TCHBQuoteStyle = (qsNone,qsSingle,qsDouble) is the
type with which you can set the format of the selected
options in text format.
-----------------------------------------------------------------
EmptyValue the caption you want to see when none is checked
-----------------------------------------------------------------
Special Methods
procedure Clear;
-----------------------------------------------------------------
procedure SetUnCheckedAll( Sender: TObject );
procedure SetCheckedAll( Sender: TObject );
procedure SetChecked(Index: Integer; Checked: Boolean);
-----------------------------------------------------------------
function CheckedCount: integer
Returns the number of checked items
function IsChecked ( Index: integer ) : boolean;
Returns True if the Item[index] is checked
-----------------------------------------------------------------
function GetText : string;
As the component has no Caption this is the
text with all the choises separated by comma
in format depended by the value of QuoteStyle
property (see history ver 1.3)
-----------------------------------------------------------------
History:
Ver 1.1 2000/1/16
changes prompted by Kyriakos Tasos
- corrections
onenter events
onexit events
- additions
onchange event
CheckedCount integer
The dropdownlistbox closes with the ESC character
- changes
the internal glyph image name
-----------------------------------------------------------------
Ver 1.2 2000/1/31
changes prompted by Amilcar Dornelles da Costa Leite"
- corrections
SetChecked(Index: Integer; Checked: Boolean);
is now working and by code
-----------------------------------------------------------------
Ver 1.3 2000/4/8
changes prompted by Jayan Chandrasekhar, Riyadh, Saudi Arabia"
-additions
property QuoteStyle :qsNone,qsSingle,qsDouble;
so if the Selected values are
Germany,UK,USA,Russia
the GetText function returns
case qsNone -> Germany,UK,USA,Russia
case qsSingle -> 'Germany','UK','USA','Russia'
case qsDouble -> "Germany","UK","USA","Russia"
so you can use it, as Jayan noted. in SQL in
the SELECT .. IN clause
e.g.
SELECT NationID, Nation
FROM Country
WHERE Nation In ( "Germany", "UK", "USA", "Russia" )
-----------------------------------------
Ver 1.4 2000/12/26
corrected bug prompted by "Daniel Azkona Coya"
-----------------------------------------
Ver 1.5 2001/02/03
corrected the behavor that main form's caption becomes inactive
The solution prompted in borland.public.delphi.vcl.components.writing:37068
for popup forms by "Andrew Jameson" contact@softspotsoftware.com
-----------------------------------------
Ver 1.6 2001/04/07
added property EmptyValue to indicate the "empty" condition
asked from Philippe Requile
-----------------------------------------
Ver 1.6.1 2001/04/25
added property Version for my purposes (sic)
-----------------------------------------
Ver 1.7 2001/05/09
Author: Christian Alain Ouellet UACA (ouelletchristian@uaca.com)
Addition
event OnCloseUp
that enables to save the checkbox values upon close of the combo
property SortDisplay : Boolean;
To control the sorting of the text property according
to the order of Items appearance in the combobox's checkboxes
}
interface
uses
Windows, Messages, SysUtils,Buttons, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Menus,CheckLst,extctrls;
type
// added 2000/04/08
TCHBQuoteStyle = (qsNone,qsSingle,qsDouble);
TCheckedComboBox = class(TCustomPanel)
private
FCapSelAll,
FCapDeselAll : string;
FEdit : TEdit;
FButton : TSpeedButton;
FItems : TStrings;
FPrivForm : TForm;
FListBox : TCheckListBox;
FPopup : TPopupMenu;
FSelectAll : TMenuItem;
FDeSelectAll : TMenuItem;
FNotFocusColor : TColor;
FSorted : Boolean;
FQuoteStyle : TCHBQuoteStyle; // added 2000/04/08
FCheckedCount : integer;
FColumns : integer;
FSortDisplay : Boolean; // ver 1.7 2001\05\09 by Christian Alain Ouellet
FDropDownLines : integer;
FOnCloseUp : TNotifyEvent; // ver 1.7 2001\05\09 by Christian Alain Ouellet
FOnChange : TNotifyEvent;
FOnEnter : TNotifyEvent;
FOnExit : TNotifyEvent;
FEmptyValue : String; // ver 1.6
FStrResult : String; // ver 1.6
FVersion : String; // ver 1.6.1
procedure SetItems(AItems : TStrings);
procedure ToggleOnOff( Sender : TObject );
procedure KeyListBox(Sender: TObject; var Key: Word;Shift: TShiftState);
procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED;
procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED;
procedure WMSize(var Message: TWMSize); message WM_SIZE;
procedure ShowCheckList(Sender: TObject);
procedure CloseCheckList( Sender : TObject );
procedure ItemsChange(Sender : TObject);
procedure SetSorted(Value: Boolean);
procedure AutoSize;
procedure AdjustHeight;
procedure EditOnEnter(Sender: TObject);
procedure EditOnExit(Sender: TObject);
procedure SetNotFocusColor(value:TColor);
procedure SetColumns(value : integer);
procedure SetChecked(Index: Integer; Checked: Boolean);
procedure SetDropDownLines(value : integer);
function GetChecked(Index: Integer): Boolean;
procedure SetEmptyValue(value:String);// version 1.6
procedure RedrawIfNeeded; // version 1.6
procedure SetVisibleText; // version 1.6
procedure SetVersion(value:String); // version 1.6.1;
function SortTextProperty(s: String): String; // ver 1.7 2001\05\09 by Christian Alain Ouellet
procedure Change;
protected
procedure CreateWnd; override;
public
constructor Create ( AOwner : TComponent ); override;
destructor Destroy; override;
procedure Clear;
procedure SetUnCheckedAll( Sender: TObject );
procedure SetCheckedAll( Sender: TObject );
function IsChecked ( Index: integer ) : boolean;
function GetText : string;
property Checked[Index: Integer]: Boolean
read GetChecked
write SetChecked;
property CheckedCount: integer read FCheckedCount;
published
property Items: TStrings
read FItems
write SetItems;
property CapSelectAll: String
read FCapSelAll
write FCapSelAll;
property CapDeSelectAll: String
read FCapDeselAll
write FCapDeselAll;
property NotFocusColor: TColor
read FNotFocusColor
write SetNotFocusColor;
property Sorted : Boolean
read FSorted
write SetSorted default False;
property QuoteStyle : TCHBQuoteStyle // added 2000/04/08
read FQuoteStyle
write FQuoteStyle default qsNone;
property Columns : integer
read FColumns
write SetColumns default 0;
property DropDownLines: integer
read FDropDownLines
write SetDropDownLines default 6;
property EmptyValue : String // ver 1.6
read FEmptyValue
write SetEmptyvalue;
property SortDisplay : Boolean // ver 1.7
read FSortDisplay
write FSortDisPlay default False;
// events
property OnChange: TNotifyEvent
read FOnChange
write FOnChange;
property OnEnter : TNotifyEvent
read FOnEnter
write FOnEnter;
property OnExit: TNotifyEvent
read FOnExit
write FOnExit;
property OnCloseUp : TNotifyEvent
Read FOnCloseUp
Write FOnCloseUp; // ver 1.7 by Christian Alain Ouellet
// from panel
property Ctl3D;
property Cursor;
property Enabled;
property Font;
property ParentColor;
property ParentCtl3D;
property ParentFont;
property ParentShowHint;
property ShowHint;
property TabOrder;
property TabStop;
property Version :string read FVersion write SetVersion; // ver 1.6.1
property Visible;
property OnClick;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnResize;
property OnStartDrag;
end;
procedure Register;
implementation
{$R *.res}
const
Delimit = ',';
MAXSELLENGTH = 256;
MINDROPLINES = 6;
MAXDROPLINES = 10;
resourcestring
sFCapSelAll = '&Select All';
sFCapDeselAll = '&DeSelect All';
sNoMoreLength = 'There is no room for Selected';
sDefaultPrompt= '<none>';
{TCheckedComboBox}
constructor TCheckedComboBox.Create ( AOwner : TComponent );
begin
inherited Create( AOwner );
Fversion := '1.7';
FDropDownLines := MINDROPLINES;
FColumns := 0;
FQuoteStyle := qsNone; // added 2000/04/08
FCheckedCount := 0;
FNotFocusColor := clWhite;
Caption := '';
FCapSelAll := sFCapSelAll;
FCapDeselAll := sFCapDeselAll;
BevelOuter := bvLowered;
Height := 24;
Width := 121;
FEmptyValue := sDefaultPrompt; // 1.6
FStrResult := ''; // 1.6
FSortDisplay := False; // 1.7
FItems := TStringList.Create;
TStringList(FItems).OnChange := ItemsChange;
FEdit := TEdit.Create(Self);
FEdit.Parent := Self;
FEdit.ParentColor := false;
FEdit.color := clWhite;
FEdit.ReadOnly := True;
FButton := TSpeedButton.Create(Self);
with FButton do
begin
Glyph.LoadFromResourceName(HInstance, 'BTNCHECKPOPUP');
Parent := Self;
FButton.Width := 16;
FButton.Height:= Self.Height-2;
FButton.Top := Self.Top+2;
NumGlyphs := 1;
Parent := Self;
Layout := blGlyphRight;
OnClick := ShowCheckList;
end;
Fedit.Text := FEmptyValue; // 1,6
FEdit.OnEnter := EditOnEnter;
FEdit.OnExit := EditOnExit;
// Create a form with its contents
FPrivForm := TForm.Create( self );
FPrivForm.Color := clWindow;
// Create CheckListBox
FListBox := TCheckListBox.Create( FPrivForm );
FListBox.Parent := FPrivForm;
FListBox.Ctl3D := False;
FListBox.Columns := FColumns;
FListBox.Align := alClient;
FListBox.OnClickCheck := ToggleOnOff;
FListBox.OnKeyDown := KeyListBox;
// Create PopUp
FPopUp := TPopupMenu.Create( FListBox );
FSelectAll := TMenuItem.Create( FPopUp );
FSelectAll.Caption := FCapSelAll;
FDeSelectAll := TMenuItem.Create( FPopUp );
FDeSelectAll.Caption := FCapDeselAll;
FPopUp.Items.Insert( 0, FSelectAll );
FPopUp.Items.Insert( 1, FDeSelectAll );
FSelectAll.OnClick := SetCheckedAll;
FDeSelectAll.OnClick := SetUnCheckedAll;
FListBox.PopupMenu := FPopUp;
end;
destructor TCheckedComboBox.Destroy;
begin
FEdit.free;
FSelectAll.Free;
FDeSelectAll.Free;
FPopup.Free;
FButton.Free;
FListBox.Free;
FItems.Free;
FPrivForm.Free;
inherited Destroy;
end;
//====================== Show - Close List Box
procedure TCheckedComboBox.ShowCheckList( Sender : TObject );
var ScreenPoint : TPoint;
begin
if FButton.tag=1 then // Jan Verhoeven
begin
FButton.tag:=0;
exit
end;
Click;
if Fcolumns > 1 then
FDropDownLines := FlistBox.Items.Count div Fcolumns+1;
if FDropDownLines < MINDROPLINES then
FDropDownLines := MINDROPLINES;
if FDropDownLines > MAXDROPLINES then
FDropDownLines := MAXDROPLINES;
// Assign Form coordinate and show
ScreenPoint := Parent.ClientToScreen( Point( self.Left, self.Top+self.Height ) );
FSelectAll.Caption := FCapSelAll;
FDeSelectAll.Caption := FCapDeselAll;
with FPrivForm do
begin
Font := self.Font;
Left := ScreenPoint.X;
Top := ScreenPoint.Y;
Width := self.Width;
Height := ( FDropDownLines * FlistBox.ItemHeight+4{ FEdit.Height });
BorderStyle := bsNone;
OnDeactivate := CloseCheckList;
end;
if FPrivForm.Height + ScreenPoint.y > Screen.Height-20 then
FPrivForm.Top := ScreenPoint.y-FprivForm.Height-self.height ;
FPrivForm.Show;
// added 2001/02/03 to catch the innactive form caption
SendMessage(TWinControl(Self.Owner).Handle, WM_NCACTIVATE, Integer(true),0);
end;
procedure TCheckedComboBox.CloseCheckList( Sender : TObject );
var pt:TPoint;
begin
// code added by Jan Verhoeven
// check if the mouse is over the combobox button
// pt:=mouse.CursorPos;
// this doesn't work on delphi 3
GetCursorPos(pt);
pt:=FButton.ScreenToClient(pt);
with Fbutton do
begin
if (pt.x>0) and (pt.x<width) and (pt.y>0) and (pt.y<height)
then tag:=1
else tag:=0
end;
FPrivForm.Close;
// ver 1.7 Added 2001\05\09 by Christian Alain Ouellet for OnCloseUp Event
if Assigned(FOnCloseUp) then FOnCLoseUp(Sender);
end;
//===========================================
// exanines if string (part) exist in string (source)
// where source is in format part1[,part2]
function PartExist(const part, source:string):Boolean;
var m :integer;
temp1,temp2 :string;
begin
temp1 := Copy(Source,1,MAXSELLENGTH);
Result := part=temp1;
while not result do
begin
m := Pos(Delimit,temp1);
if m>0 then
temp2 := Copy(temp1,1,m-1)
else
temp2 := temp1;
Result := part=temp2;
if (Result) or (m=0) then break;
temp1 := Copy(temp1,m+1,MAXSELLENGTH);
end;
end;
{
removes a string (part) from another string (source)
when source is in format part1[,part2]
}
function RemovePart(const part, source :string):string;
var
lp,p :integer;
s1,s2:string;
begin
result := source;
s1 := Delimit+part+Delimit;
s2 := Delimit+source+Delimit;
p := Pos(s1,s2);
if p>0 then
begin
lp := Length(part);
if p=1 then
result := Copy(source,p+lp+1,MAXSELLENGTH)
else
begin
result := Copy(s2,2,p-1)+Copy(s2,p+lp+2,MAXSELLENGTH);
result := Copy(result,1,length(result)-1);
end;
end;
end;
function Add(const sub:string;var str:string):boolean;
begin
result := false;
if length(str)+length(sub)+1>= MAXSELLENGTH then
begin
ShowMessage(sNoMoreLength);
exit;
end;
if str = '' then
begin
str := sub;
result := true;
end
else
if not PartExist(sub,str) then
begin
str := str+Delimit+ sub;
result := true;
end;
end;
function Remove(const sub:string; var str:string):boolean;
var temp:string;
begin
result := false;
if str <> '' then
begin
temp := RemovePart(sub,str);
if temp<>str then
begin
str := temp;
result := true;
end;
end;
end;
function TCheckedComboBox.SortTextProperty(s: String): String;
var
i,
IndexPos : Integer;
TmpStrLst : TStringList;
begin
Result := '';
TmpStrLst := TStringList.Create;
try
TmpStrLst.CommaText := s;
TmpStrLst.Sort;
i := 0;
while TmpStrLst.Count > 0 do
begin
IndexPos := -1;
if TmpStrLst.Find(Self.Items[i], IndexPos) then
begin
if TmpStrLst.Count = 1 then
Result := Result + TmpStrLst.Strings[IndexPos]
else
Result := Result + TmpStrLst.Strings[IndexPos] + Delimit;
TmpStrLst.Delete(IndexPos);
end;
Inc(i);
end;
finally
TmpStrLst.Free;
end;
end;
procedure TCheckedComboBox.ToggleOnOff( Sender : TObject );
begin
if FListBox.Checked[FListBox.itemindex] then
begin
if Add(FListBox.Items[FListBox.itemindex],fstrResult) then
FCheckedCount := FCheckedCount + 1
end
else
if Remove(FListBox.Items[FListBox.itemindex],fstrResult) then
FCheckedCount := FCheckedCount - 1;
SetVisibleText;
Change
end;
procedure TCheckedComboBox.KeyListBox(Sender: TObject; var Key: Word;Shift: TShiftState);
begin
if key = VK_ESCAPE then
FPrivForm.Close
else
inherited
end;
// added 2000/04/08
function GetFormatedText(kind:TCHBQuoteStyle;str:string):string;
var s : string;
begin
result := str;
if length(str)>0 then
begin
s := str;
case kind of
qsSingle : result :=
''''+
StringReplace(S, Delimit, ''',''',[rfReplaceAll])+
'''';
qsDouble : result :=
'"'+
StringReplace(S, Delimit, '","',[rfReplaceAll])+
'"';
end;
end;
end;
function TCheckedComboBox.GetText : string;
begin
if FQuoteStyle = qsNone then
result := fstrResult
else
result := GetFormatedText(FQuoteStyle,fstrResult);
end;
//========================== CheckListBox
procedure TCheckedComboBox.SetDropDownLines(value : integer);
begin
if FDropDownLines<>value then
if (value>=MINDROPLINES) and (value<=MAXDROPLINES) then
FDropDownLines := value;
end;
procedure TCheckedComboBox.SetColumns(value : integer);
begin
if Fcolumns<>value then
begin
Fcolumns := value;
FListBOx.Columns := Fcolumns;
end;
end;
procedure TCheckedComboBox.SetCheckedAll( Sender : TObject );
var i:integer;
begin
fstrResult:= '';
for i:=0 to FListBox.Items.Count -1 do
begin
if not FListBox.Checked[i] then
begin
FListBox.Checked[i]:= true;
end;
if i=0 then
fstrResult := FListBox.Items[i]
else
fstrResult := fstrResult+Delimit+FListBox.Items[i];
end;
SetVisibleText;
FCheckedCount := FListBox.Items.Count;
FEdit.Repaint;
change;
end;
procedure TCheckedComboBox.SetUnCheckedAll( Sender: TObject );
var
i : integer;
begin
FCheckedCount := 0;
with FListBox do
begin
for i := 0 to Items.Count-1 do
if Checked[i] then
Checked[i] := false;
end;
fstrResult:= '';
SetVisibleText;
change;
end;
function TCheckedComboBox.IsChecked( Index: integer ) : boolean;
begin
result := FListBox.Checked[ Index ];
end;
procedure TCheckedComboBox.SetChecked(Index: Integer; Checked: Boolean);
var
ok:boolean;
begin
if index<FlistBox.Items.Count then
begin
ok:= false;
if not FListBox.Checked[Index] and checked then
begin
if Add(FListBox.Items[Index],fstrResult) then
begin
FCheckedCount := FCheckedCount + 1;
ok := true;
end;
end
else
if FListBox.Checked[Index] and not checked then
if Remove(FListBox.Items[Index],fstrResult) then
begin
FCheckedCount := FCheckedCount - 1;
ok := true;
end;
if ok then
begin
FListBox.Checked[Index]:= Checked;
SetVisibleText;
Change
end;
end;
end;
Function TCheckedComboBox.GetChecked(Index: Integer): Boolean;
begin
if index<FlistBox.Items.Count then
Result := FListBox.Checked[Index]
else
Result := false;
end;
//=========== For CheckListBox Items
procedure TCheckedComboBox.SetItems(AItems : TStrings);
begin
FItems.Assign(AItems);
end;
procedure TCheckedComboBox.ItemsChange(Sender : TObject);
begin
FlistBox.Clear;
fstrResult := '';
SetVisibleText;
FlistBox.Items.Assign(FItems);
end;
//=========== Auto Sizing routines
procedure TCheckedComboBox.CMEnabledChanged(var Message: TMessage);
begin
inherited;
FButton.Enabled := Enabled;
FEdit.Enabled := Enabled;
end;
procedure TCheckedComboBox.AutoSize;
begin
AdjustHeight;
FButton.Height := Height-2;
FEdit.Height := Height;
FEdit.width := Width - FButton.Width-3;
FButton.Left := FEdit.width+1;
end;
procedure TCheckedComboBox.AdjustHeight;
var
DC: HDC;
SaveFont: HFont;
I: Integer;
SysMetrics, Metrics: TTextMetric;
begin
DC := GetDC(0);
GetTextMetrics(DC, SysMetrics);
SaveFont := SelectObject(DC, Font.Handle);
GetTextMetrics(DC, Metrics);
SelectObject(DC, SaveFont);
ReleaseDC(0, DC);
if NewStyleControls then
begin
if Ctl3D then I := 8 else I := 6;
I := GetSystemMetrics(SM_CYBORDER) * I;
end else
begin
I := SysMetrics.tmHeight;
if I > Metrics.tmHeight then I := Metrics.tmHeight;
I := I div 4 + GetSystemMetrics(SM_CYBORDER) * 4;
end;
Height := Metrics.tmHeight + I;
end;
procedure TCheckedComboBox.CreateWnd;
begin
inherited;
AutoSize;
end;
procedure TCheckedComboBox.WMSize(var Message: TWMSize);
begin
inherited;
AutoSize;
end;
procedure TCheckedComboBox.CMFontChanged(var Message: TMessage);
begin
inherited;
AutoSize;
invalidate;
end;
//=====================
procedure TCheckedComboBox.EditOnEnter;
begin
FEdit.Color := clWhite;
if Assigned(FOnEnter) then FOnEnter(Self);
end;
procedure TCheckedComboBox.EditOnExit;
begin
Fedit.Color := FNotFocusColor;
if Assigned(FOnExit) then FOnExit(Self);
end;
procedure TCheckedComboBox.SetNotFocusColor(value:TColor);
begin
if FNotFocusColor <> Value then
begin
FNotFocusColor := Value;
Fedit.Color := value;
end;
end;
procedure TCheckedComboBox.Change;
begin
if Assigned(FOnChange) then FOnChange(Self);
end;
procedure TCheckedComboBox.Clear;
begin
fstrResult := '';
SetVisibleText;
FItems.Clear;
FListBox.Clear;
end;
procedure TCheckedComboBox.SetSorted(Value: Boolean);
begin
if FSorted <> Value then
begin
FSorted := Value;
TStringList(FItems).Sorted := FSorted;
end;
end;
// ver 1.6
procedure TCheckedComboBox.RedrawIfNeeded;
begin
if (not Focused) and IsWindowVisible(Handle) and
(not (csDesigning in ComponentState)) then
Invalidate;
end;
procedure TCheckedComboBox.SetEmptyValue(value: String);
begin
if fEmptyValue<>value then
begin
fEmptyValue:= value;
SetVisibleText;
RedrawIfNeeded;
end;
end;
procedure TCheckedComboBox.SetVisibleText;
begin
if FStrResult = '' then
FEdit.Text := FEmptyValue
else
if FSortDisplay then
FEdit.Text := SortTextProperty(FStrResult)
else
FEdit.Text := FStrResult;
end;
//===================
procedure Register;
begin
RegisterComponents('Samples', [TCheckedComboBox]);
end;
procedure TCheckedComboBox.SetVersion(value: String);
begin
// read only
end;
end.
TCheckedComboBox控件演示例程delphi 源码
UnDemoChBox.pas
unit UnDemoChBox;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, CheckCombo, StdCtrls, CheckLst, Spin;
type
TForm1 = class(TForm)
CheckedComboBox1: TCheckedComboBox;
Edit1: TEdit;
RadioButton1: TRadioButton;
Label1: TLabel;
RadioButton2: TRadioButton;
RadioButton3: TRadioButton;
Button1: TButton;
btSetChecked: TButton;
sedToCheck: TSpinEdit;
Bevel1: TBevel;
Bevel2: TBevel;
Label2: TLabel;
Label4: TLabel;
CheckBox1: TCheckBox;
Button2: TButton;
Button3: TButton;
Label5: TLabel;
Button4: TButton;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Bevel3: TBevel;
Button5: TButton;
procedure Button1Click(Sender: TObject);
procedure btSetCheckedClick(Sender: TObject);
procedure CheckedComboBox1Change(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
if RadioButton1.Checked then
CheckedComboBox1.QuoteStyle := qsNone
else if RadioButton2.Checked then
CheckedComboBox1.QuoteStyle := qsDouble
else
CheckedComboBox1.QuoteStyle := qsSingle;
Edit1.Text := CheckedComboBox1.GetText;
end;
procedure TForm1.btSetCheckedClick(Sender: TObject);
begin
if sedToCheck.Value<CheckedComboBox1.Items.count then
CheckedComboBox1.Checked[sedToCheck.Value] := true;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
if sedToCheck.Value<CheckedComboBox1.Items.count then
CheckedComboBox1.Checked[sedToCheck.Value] := false;
end;
procedure TForm1.CheckedComboBox1Change(Sender: TObject);
begin
label2.Caption := IntToStr(CheckedComboBox1.CheckedCount);
end;
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
CheckedComboBox1.SortDisplay := CheckBox1.Checked;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
CheckedComboBox1.SetCheckedAll(self);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
CheckedComboBox1.SetUnCheckedAll(self);
end;
procedure TForm1.FormShow(Sender: TObject);
begin
Label9.Caption := CheckedComboBox1.Version;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
close
end;
end.
项目文件代码:DemoChBox.dpr
program DemoChBox;
uses
Forms,
UnDemoChBox in 'UnDemoChBox.pas' {Form1},
//CheckComboSpec in 'CheckComboSpec.pas',
CheckCombo in 'CheckCombo.pas';
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
浙公网安备 33010602011771号