Самодельный компонент

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: Самодельный компонент

Сообщение qivi » 24.09.2012 10:54:23

Не могу преодолеть этот баг :( !
Постом выше описана проблема, вот пример компонента:

Код: Выделить всё
unit RUS_test;

{$mode objfpc}{$H+}

interface

uses
  Controls,Classes,Graphics;

type

  TRUS_T=class(TGraphicControl)
  protected
    procedure Paint;override;
  public
    constructor Create(AOwner:TComponent);override;
  published
    property Constraints;
    property Align;
    property Anchors;
    property Height;
    property Width;
  end;

procedure Register;

implementation

constructor TRUS_T.Create(AOwner:TComponent);
begin
  inherited Create(AOwner);
  Width:=100;
  Height:=30;
end;

procedure TRUS_T.Paint;
begin
  Canvas.Pixels[0,0]:=$000000ff;
  Canvas.Pixels[Width-1,Height-1]:=$000000ff;
  inherited Paint;
end;

//============================================================================//

procedure Register;
begin
  RegisterComponents('RUS Controls',[TRUS_T]);
end;

end.


Очень прошу, помогите пожалуйста!
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Самодельный компонент

Сообщение Light13 » 24.09.2012 12:36:15

Есть подозрение, что нужно объявить property BorderSpacing;
Код: Выделить всё
published
    property Constraints;
    property Align;
    property Anchors;
    property BorderSpacing;
    property Height;
    property Width;


Ide похоже может до него добраться для отрисовки при редактировании формы, но не может сохранить скрытое свойство в файл формы.

Сейчас проверял на своем компоненте, вроде помогло.
Аватара пользователя
Light13
постоялец
 
Сообщения: 127
Зарегистрирован: 17.07.2009 07:50:10
Откуда: Челябинск

Re: Самодельный компонент

Сообщение qivi » 24.09.2012 13:32:32

Light13 СПАСИБО ОГРОМНОЕ!!!!!!!! ЭТО ОНО!!!!!!!!!
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Самодельный компонент

Сообщение Light13 » 24.09.2012 13:46:21

Кстати, это касается всех свойств.

Если их не делать pablished, то они при запуске будут со значениями по-умолчанию.
Аватара пользователя
Light13
постоялец
 
Сообщения: 127
Зарегистрирован: 17.07.2009 07:50:10
Откуда: Челябинск

Re: Самодельный компонент

Сообщение qivi » 24.09.2012 15:06:46

Я собственно и не знал какое свойство отвечает за отступы, думал они так же относятся к property Anchors;
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Самодельный компонент

Сообщение VirtUX » 25.09.2012 14:52:29

qivi писал(а):Можно ли хоть как то опубликовать данные типа record?

делайте структуру наследником TPersistent
Код: Выделить всё
TMyData = class(TPersistent)
private
...
public
property Data1: string read FData1 write SetData1;
property Data2: integer read FData2 write SetData2;
...
end;

TMyClass = class(TWinControl)
...
published
property MyData: TMyData read FMyData write SetMyData;
...
end;

тогда в инспекторе будет раскрываться список параметров

Добавлено спустя 3 минуты 47 секунд:
не забудьте (по необходимости отображать в DisignTime изменения) в SetData1 и прочих предусмотреть OnChange. Именно внутри наследника TPersistent нужно вызывать Invalidate!!!

Добавлено спустя 4 минуты 51 секунду:
Код: Выделить всё
procedure TMyData.SetData1(AValue: string);
begin

  if FData1 <> AVAlue then FData1 := AValue;
...
  if Assigned(OnChange) then OnChange;

end;


Добавлено спустя 2 минуты 2 секунды:
а в конструкторе TMyClass определяем OnChange
Код: Выделить всё
constructor Create(AOwner: TWinControl);
begin
...
  FMyData.OnChange := @Invalidate;
...
end;
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Пред.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 215

Рейтинг@Mail.ru