Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Дублирование свойства родительского компонента, Добавить свойство-ссылка на существующее 
:(
    Опции темы
Susel
Дата 2.3.2005, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 27.3.2004

Репутация: нет
Всего: нет



Например, хочу в объекте, кот. является наследником TEdit, определить свойство Value значение которого всегда будет совпадать со свойством Text. Если для свойства Value определить и read и write как методы, то при простом обращении к нему всё работает, но при получении значения через RTTI - оно пустое... Как можно реализовать это по другому, так чтобы Value полностью ссылалось на Text?
PM MAIL   Вверх
Snowy
Дата 2.3.2005, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Может так получится:
Код

property Value: TCaption read GetText write SetText;

PM MAIL   Вверх
Snowy
Дата 2.3.2005, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Если нет, то придется все самому...
Код

type
 TMyEdit=class(TEdit)
   privete
     function GetValue: TCaption;
     procedure SetValue(const v: TCaption);
   published
     property Value: TCaption read GetText write SetText;
 end;

function TMyEdit.GetValue: TCaption;
begin
 result:=Text;
end;

procedure TMyEdit.SetValue(const v: TCaption);
begin
 Text:=v;
end;


PM MAIL   Вверх
Susel
Дата 2.3.2005, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 27.3.2004

Репутация: нет
Всего: нет



Ну я же написал, что если сделать и read и write через методы - то свойство Value содержит пустую строку при обращении к нему через RTTI!!!
PM MAIL   Вверх
Snowy
Дата 2.3.2005, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Вот накидал простенький пример. На форму кидаем стандартный батон и делаем ему свойство OnClick. Далее следующий код:
Код

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure FormCreate(Sender: TObject);
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

type
 TMyEdit=class(TEdit)
   private
     function GetValue: TCaption;
     procedure SetValue(const v: TCaption);
   published
     property Value: TCaption read GetValue write SetValue;
 end;

var
 Form1: TForm1;
 e1:    TMyEdit;

implementation

{$R *.dfm}

function TMyEdit.GetValue: TCaption;
begin
 result:=Text;
end;

procedure TMyEdit.SetValue(const v: TCaption);
begin
 Text:=v;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 e1:=TMyEdit.Create(Form1);
 e1.Left:=20; e1.Top:=8; e1.Width:=80;
 e1.Text:='Test';
 e1.ParentWindow:=Form1.Handle;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowMessage(e1.Value);
end;

end.

Нормальное обращение к Value. Можно набрать любой текст в едите, и нажать батон. Все работает.
PM MAIL   Вверх
Susel
Дата 2.3.2005, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 27.3.2004

Репутация: нет
Всего: нет



Блин.... Как же ещё объяснить.... Данная реализация позволяет работать со свойством объекта при обращении на прямую.... Но через RTTI - нечего не выйдет, Value будет пустым, а Text будет равно 'Test'....
PM MAIL   Вверх
ningen
Дата 2.3.2005, 15:25 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











у меня лично всё работает.
GetStrProp(ed, 'Value') возвращает 'Test'.

  Вверх
Snowy
Дата 2.3.2005, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



А если
property Value: TCaption read GetValue write SetValue;
засунуть не в published, а в public?
PM MAIL   Вверх
Susel
Дата 2.3.2005, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 27.3.2004

Репутация: нет
Всего: нет



Всем спасибо, всё работает.... просто я кроме всего прочего пытался свойство Value объявить как Variant............
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1120 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.