Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Создание редактора для свойства наследника TCollection

358
20 апреля 2004 года
moonmike
423 / / 18.10.2002
Есть у меня самописный компонент(служит для отображения связей между таблицами в БД). Рисуется эта связь по ломаной линии. Ломаную описывает свойство типа TRelationNodes = class(TCollection). Решил написать редактор для этого свойства. Сам редактор должен(по моей задумке) выглядеть следующим образом:

Код для него вот такой:
Цитата:

unit RelEdit;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, Grids, ExtCtrls, DesignIntf,DesignEditors;

type

TRelationPointEditor = class(TPropertyEditor)
public
function GetAttributes: TPropertyAttributes; override;
procedure Edit; override;
function GetValue: string; override;
end;

TfrmRelationPointEditor = class(TForm)
StringGrid1: TStringGrid;
Panel1: TPanel;
bbtnAddRow: TBitBtn;
bbtnDeleteRow: TBitBtn;
bbtnUpRow: TBitBtn;
bbtnDownRow: TBitBtn;
bbtnOk: TBitBtn;
bbtnCancel: TBitBtn;
procedure bbtnAddRowClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure bbtnDeleteRowClick(Sender: TObject);
procedure bbtnUpRowClick(Sender: TObject);
procedure bbtnDownRowClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

procedure Register;
implementation

uses Relation, TableShape;

procedure Register;
begin
RegisterPropertyEditor(TypeInfo(TRelationNodes), TRelation, '', TRelationPointEditor);
RegisterComponents('Moonmike', [TRelation]);
RegisterComponents('Moonmike', [TTableShape]);
end;


{$R *.dfm}

procedure TfrmRelationPointEditor.bbtnAddRowClick(Sender: TObject);
begin
StringGrid1.RowCount := StringGrid1.RowCount + 1;
with StringGrid1 do
begin
Cells[0, RowCount - 1] := IntToStr(RowCount - 1);
Cells[1, RowCount - 1] := '';
Cells[2, RowCount - 1] := '';
end
end;

procedure TfrmRelationPointEditor.FormCreate(Sender: TObject);
begin
StringGrid1.Cells[1,0] := 'X';
StringGrid1.Cells[2,0] := 'Y';
StringGrid1.Cells[0,1] := '1';
StringGrid1.Cells[0,2] := '2';
end;

procedure TfrmRelationPointEditor.bbtnDeleteRowClick(Sender: TObject);
var aRow, RowNum: integer;
begin
RowNum := StringGrid1.Row;
if StringGrid1.RowCount > 3 then
begin
for aRow := RowNum + 1 to StringGrid1.RowCount - 1 do
begin
StringGrid1.Rows[aRow - 1].Assign(StringGrid1.Rows[aRow]);
StringGrid1.Cells[0, aRow - 1] := IntToStr(aRow - 1);
end;
StringGrid1.RowCount := StringGrid1.RowCount - 1;
end
else Application.MessageBox('Не может быть меньше двух точек!','Фигня получается.', MB_OK+MB_ICONEXCLAMATION);
end;

procedure TfrmRelationPointEditor.bbtnUpRowClick(Sender: TObject);
begin
if StringGrid1.Row <> 1 then
begin
StringGrid1.RowCount := StringGrid1.RowCount + 1;
StringGrid1.Rows[StringGrid1.RowCount - 1].Assign(StringGrid1.Rows[StringGrid1.Row - 1]);
StringGrid1.Rows[StringGrid1.Row - 1].Assign(StringGrid1.Rows[StringGrid1.Row]);
StringGrid1.Cells[0, StringGrid1.Row - 1] := IntToStr(StringGrid1.Row - 1);
StringGrid1.Rows[StringGrid1.Row].Assign(StringGrid1.Rows[StringGrid1.RowCount - 1]);
StringGrid1.Cells[0, StringGrid1.Row] := IntToStr(StringGrid1.Row);
StringGrid1.RowCount := StringGrid1.RowCount - 1;
StringGrid1.Row := StringGrid1.Row - 1;
end
end;

procedure TfrmRelationPointEditor.bbtnDownRowClick(Sender: TObject);
begin
if StringGrid1.Row < (StringGrid1.RowCount - 1) then
begin
StringGrid1.RowCount := StringGrid1.RowCount + 1;
StringGrid1.Rows[StringGrid1.RowCount - 1].Assign(StringGrid1.Rows[StringGrid1.Row + 1]);
StringGrid1.Rows[StringGrid1.Row + 1].Assign(StringGrid1.Rows[StringGrid1.Row]);
StringGrid1.Cells[0, StringGrid1.Row + 1] := IntToStr(StringGrid1.Row + 1);
StringGrid1.Rows[StringGrid1.Row].Assign(StringGrid1.Rows[StringGrid1.RowCount - 1]);
StringGrid1.Cells[0, StringGrid1.Row] := IntToStr(StringGrid1.Row);
StringGrid1.RowCount := StringGrid1.RowCount - 1;
StringGrid1.Row := StringGrid1.Row + 1;
end
end;

{ TRelationPointEditor }

procedure TRelationPointEditor.Edit;
var
Form: TfrmRelationPointEditor;
begin
Form := TfrmRelationPointEditor.Create(Application);
try
if Form.ShowModal = mrOk then
ShowMessage('Срабатывает');
finally
Form.Free;
end;
end;

function TRelationPointEditor.GetAttributes: TPropertyAttributes;
begin
Result := inherited GetAttributes + [paDialog];
end;
function TRelationPointEditor.GetValue: string;
begin
//
end;

end.


Никак не могу понять, как коллекцию точек загрузить в форму редактора=(Подскажите плз.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог