Самодельный компонент
Модератор: Модераторы
Самодельный компонент
Делаю компонент наподобе комбобокса. Как реализовать список в развёрнутом состоянии так что он отображался не только на родители а перекрывал всё что есть на экране?
Примерно так:
П.С.: Из идей только использование TForm... что ни будь луче посоветуете?
Примерно так:
П.С.: Из идей только использование TForm... что ни будь луче посоветуете?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Re: Самодельный компонент
qivi писал(а):П.С.: Из идей только использование TForm...
Правильная идея...
Для образца глянь как CodeCompletion в самом Lazarus сделан. Ну или PopUp окно в RX
Re: Самодельный компонент
А не подскажете как можно уловить событие щелчка мыши за пределами формы или потерю фокуса формой? (чтоб закрыть список в случае если щёлкают не по нему)
Re: Самодельный компонент
Кто ни будь может подсказать
- Nik
- энтузиаст
- Сообщения: 573
- Зарегистрирован: 03.02.2006 23:08:09
- Откуда: Киров
- Контактная информация:
Re: Самодельный компонент
qivi писал(а):А не подскажете как можно уловить событие щелчка мыши за пределами формы или потерю фокуса формой? (чтоб закрыть список в случае если щёлкают не по нему)
FormMouseLeave пробовали ловить?
- Brainenjii
- энтузиаст
- Сообщения: 1351
- Зарегистрирован: 10.05.2007 00:04:46
Re: Самодельный компонент
OnDeactivate + Application.OnDeactivate разве не оно? 0.о
Re: Самодельный компонент
А как создать событие, что бы потом при использовании компонента назначать этому событию процедуру? В частности нужно создать компоненту потомку TWinControl событие OnChange, сам контрол как я и говорил выше это специфический список, нужно активировать это свойство на каждое его изменение.
Re: Самодельный компонент
Если список строк в вашем компоненте - наследник TStringList, то у него уже есть
public property OnChange. Просто оберните его в published property вашего контрола.
public property OnChange. Просто оберните его в published property вашего контрола.
Re: Самодельный компонент
А если мой список это динамический массив, можно всё самому сделать? Как это делается?
Re: Самодельный компонент
Тогда что-нибудь вроде
Код: Выделить всё
TMyControl = class(TWinControl)
private
...
FOnChange: TNotifyEvent;
...
function GetOnChange: TNotifyEvent;
procedure SetOnChange(AValue: TNotifyEvent);
procedure ListChanged;
public
...
procedure AddItem(const AValue: string);//Delete, Insert ,Edit и т.д.
...
published
...
property OnChange: TNotifyEvent read GetOnChange write SetOnChange;
end;
implementation
....
function TMyControl.GetOnChange: TNotifyEvent;
begin
Result := FOnChange;
end;
procedure TMyControl.SetOnChange(AValue: TNotifyEvent);
begin
FOnChange := AValue;
end;
procedure TMyControl.ListChanged;
begin
if Assigned(FOnChange) then
FOnChange(Self);
end;
procedure TMyControl.AddItem(const AValue: string);
begin
...
ListChanged;
end;
Re: Самодельный компонент
iskander спасибо огромное!
Re: Самодельный компонент
qivi писал(а):А не подскажете как можно уловить событие щелчка мыши за пределами формы или потерю фокуса формой? (чтоб закрыть список в случае если щёлкают не по нему)
По идее достаточно перекрыть
procedure WMKillFocus(var Message: TLMKillFocus); message LM_KILLFOCUS;
для вашего компонента
Код: Выделить всё
Procedure TCustomControl.WMKillFocus(Var Message: TLMKillFocus);
Begin
inherited WMKillFocus(Message);
<закрываем список>
Repaint;
End;
Допускаю, что перерисовка может не понадобиться.
Re: Самодельный компонент
Есть некоторый тип данных (record), этим типом данных представлен массив списка, хочу создать свойство возвращающие элемент списка, соответственно создаю пропертя типа этой рекорд, создаю соответствующую функцию возвращающую значение данному свойству... компилятор говорит данные типа рекорд публиковать нельзя...
Можно ли хоть как то опубликовать данные типа record? Или как реализовать свойство возвращающее данные данного типа?
Можно ли хоть как то опубликовать данные типа record? Или как реализовать свойство возвращающее данные данного типа?
- Brainenjii
- энтузиаст
- Сообщения: 1351
- Зарегистрирован: 10.05.2007 00:04:46
Re: Самодельный компонент
А обязательно объявлять свойство в Published секции? Может быть будет достаточно Public?
Re: Самодельный компонент
Наследую самодельные компоненты от: TCustomControl, TCustomPanel, TGraphicControl, во всех трёх случаях один и тот же баг: у результирующих компонентов в редакторе привязок выставляю привязки и отступы, в дизайнере всё работает, в откомпилированной программе привязки работаю отступы игнорируются (обнуляются).
Без отступов ни как, подскажите пожалуйста что я не учитываю или делаю не так?
Пример компонента:
Без отступов ни как, подскажите пожалуйста что я не учитываю или делаю не так?
Пример компонента:
У вас нет необходимых прав для просмотра вложений в этом сообщении.
