Алексей Румянцев дата публикации 03-04-2006 03:41 Выпадающий список своими руками
TRyEdit - вобщем стандартный TEdit
- property BorderDrawStyle: TBorderDrawStyle;
- bdsDefault - стандартный внешний вид
- bdsNull - без рамки
- bdsFlat - с аккуратной рамкой
- bdsFrame - с плоской рамкой
- property BorderColor: TColor; - измените цвет рамки, только в режиме bdsFlat и bdsFrame
- property BorderLeft: Boolean; - В режиме плоской рамки можете убрать левую
- property BorderTop: Boolean; - верхнюю
- property BorderRight: Boolean; - правую или
- property BorderBottom: Boolean; - нижнюю рамку.
TRyMemo - тот же TRyEdit только Multiline.
TRyBtnEdit - наследник TRyEdit с кнопкой
- property ButtonWidth: Integer; - размеры этой кнопки
- property OnEditButtonClick; - реакция на нажатие кнопки
TRyComboListBox - наследник TRyEdit
- property EditStyle: TEditStyle;
- esSimple - может иметь обычный вид TEdit'a
- esEllipsis - справа кнопка с тремя точечками
- esPickList - выпадающий список. в данном случае это TListBox
- property ButtonWidth: Integer; - размеры этой кнопки
- property PickList: TListBox; - выпадающий список. Доступен в любое время.
- property DropDownRows: Integer; - кол-во видимых строк в picklist'e
- property OnEditButtonClick; - реакция на нажатие кнопки (когда стиль esEllipsis)
- property OnDropDown; - событие до того как picklist появится на экране
- property OnCloseUp; - событие после того как элемент выбран и до того как список исчезнет с экрана. переменная text - текст который будет выведен в текстовом поле
- property ListBox...; - свойства выпадающего списка, доступные для изменения в design-time
TRyComboTreeView - наследник TRyEdit
- property EditStyle: TEditStyle;
- esSimple - может иметь обычный вид TEdit'a
- esEllipsis - справа кнопка с тремя точечками
- esPickList - выпадающий список. в данном случае это TTreeView
- property ButtonWidth: Integer; - размеры этой кнопки
- property PickList: TListBox; - выпадающий список. Доступен в любое время.
- property DropDownRows: Integer; - кол-во видимых строк в picklist'e
- property OnEditButtonClick; - реакция на нажатие кнопки (когда стиль esEllipsis)
- property OnDropDown; - событие до того как picklist появится на экране
- property OnCloseUp; - событие после того как элемент выбран и до того как список исчезнет с экрана. переменная text - текст который будет выведен в текстовом поле
- property TreeView...; - свойства выпадающего списка, доступные для изменения в design-time
TRyComboStringGrid - наследник TRyEdit
- property EditStyle: TEditStyle;
- esSimple - может иметь обычный вид TEdit'a
- esEllipsis - справа кнопка с тремя точечками
- esPickList - выпадающий список. в данном случае это TStringGrid
- property ButtonWidth: Integer; - размеры этой кнопки
- property PickList: TListBox; - выпадающий список. Доступен в любое время.
- property DropDownRows: Integer; - кол-во видимых строк в picklist'e
- property OnEditButtonClick; - реакция на нажатие кнопки (когда стиль esEllipsis)
- property OnDropDown; - событие до того как picklist появится на экране
- property OnCloseUp; - событие после того как элемент выбран и до того как список исчезнет с экрана. переменная text - текст который будет выведен в текстовом поле
- property StringGrid...; - свойства выпадающего списка, доступные для изменения в design-time
Как создать свой ComboBox на основе TRyEdit
unit MyUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, RyStdCtrls;
type
TMyPopupControl = class(любой_потомок_TWinControl'a)
protected
procedure CreateParams(var Params: TCreateParams); override;
procedure CreateWnd; override;
public
constructor Create(Owner: TComponent); override;
end;
TMyComboControl = class(TRyCustomComboPopup)
private
function GetPickList: TMyPopupControl;
protected
function InitPickList: TWinControl; override;
function GetPickListText: String; override;
procedure UpdatePickListSize(DefWidth, DefHeight: Integer;
ClientArea: Boolean); override;
procedure ListMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); override;
public или published
property PickList: TMyPopupControl read GetPickList;
end;
implementation
constructor TMyPopupControl.Create(Owner: TComponent);
begin
inherited;
ControlStyle := ControlStyle + [csNoDesignVisible];
end;
procedure TMyPopupControl.CreateParams(var Params: TCreateParams);
begin
inherited;
with Params do
begin
Style := Style or WS_BORDER;
ExStyle := WS_EX_TOOLWINDOW or WS_EX_TOPMOST;
AddBiDiModeExStyle(ExStyle);
WindowClass.Style := CS_SAVEBITS;
end;
end;
procedure TMyPopupControl.CreateWnd;
begin
inherited;
Windows.SetParent(Handle, 0);
CallWindowProc(DefWndProc, Handle, wm_SetFocus, 0, 0);
end;
function TMyComboControl.InitPickList: TWinControl;
var
Popup: TMyPopupControl;
begin
Popup := TMyPopupControl.Create(Self);
with Popup do
begin
Visible := False;
Parent := Self;
OnMouseUp := ListMouseUp;
end;
Result := Popup;
end;
procedure TMyComboControl.UpdatePickListSize(DefWidth, DefHeight: Integer;
ClientArea: Boolean);
begin
DefWidth := 150;
DefWidth := 250;
inherited;
end;
function TMyComboControl.GetPickListText: String;
begin
Result := PickList.text;
end;
function TMyComboControl.GetPickList: TMyPopupControl;
begin
Result := TMyPopupControl(inherited PickList);
end;
procedure TMyComboControl.ListMouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if then Exit;
inherited;
end;
end.
К материалу прилагаются файлы:
[TComboBox] [Создание собственных компонент]
Обсуждение материала [ 14-06-2014 09:53 ] 15 сообщений |