Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Сокровищница
  
 

Фильтр по датам

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  13:15[Войти] | [Зарегистрироваться]

Выпадающий список своими руками

Алексей Румянцев
дата публикации 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) {это ваш "combobox"}

  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;
    {+ ваши property}
    {+ property из TRyEdit и TRyCustomComboPopup}
  end;

implementation

{ TMyPopupControl }

constructor TMyPopupControl.Create(Owner: TComponent);

begin
  inherited;
  ControlStyle := ControlStyle + [csNoDesignVisible]; {выпадающий список не
  виден в design-time}
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;

{ TMyComboControl }

function TMyComboControl.InitPickList: TWinControl;
var
  Popup: TMyPopupControl;
begin
  {в этой функции вы создаёте свой контрол, выставляете его свойства, ...}

  Popup := TMyPopupControl.Create(Self);
  with Popup do
  begin
    Visible := False; {обязательные property}

    Parent := Self;
    OnMouseUp := ListMouseUp; {обязательный event}
  end;
  Result := Popup;
end;

procedure TMyComboControl.UpdatePickListSize(DefWidth, DefHeight: Integer;
  ClientArea: Boolean);
begin
  { перед тем как список показажется на экране
    вы можете здесь изменить его размеры
    DefWidth и DefHeight - это размеры по-умолчанию, измените их при желании}

  DefWidth := 150;
  DefWidth := 250;

  inherited;
end;

function TMyComboControl.GetPickListText: String;
begin
  { перед закрытием списка вызывается эта функция
    с вопросом какой текст возвращать edit'у-владельцу }

  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
  { если по какой-то причине, после того как произошёл щелчёк по списку
    вы не хотите его закрывать (например щёлкнули по пустому месту в списке),
    просто вызовите exit, иначе inherited; }

  if {причина} then Exit;

  inherited;
end;
end.


К материалу прилагаются файлы:


Смотрите также материалы по темам:
[TComboBox] [Создание собственных компонент]

 Обсуждение материала [ 14-06-2014 09:53 ] 15 сообщений
  
Время на сайте: GMT минус 5 часов

Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
Функция может не работать в некоторых версиях броузеров.

Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

 
© При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
Все используемые на сайте торговые марки являются собственностью их производителей.

Яндекс цитирования