Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.07.2011, 21:40   #1
vsrmis
Пользователь
 
Регистрация: 09.12.2010
Сообщений: 26
По умолчанию Переопределение метода для каждого экземпляря класса

Сделал приблизительно так

Код:
TUser = class 

FValue :Integer;
procedure SetValue(AValue:Integer);
function GetValue:Integer;
property Value:Integer read GetValue write SetValue;
procedure onValueChanged;virtual;

end;

procedure TUser.SetValue(AValue:Integer);
begin
FValue = AValue;
onValueChanged;
end;


procedure TUser.onValueChanged;
begin

end;
Потом для каждого экземпляра класса нужно переопределить метод onValueChanged, в данном случае чтоб выводил кое какие данные в свой Memo

Сначала думал сделать так

Код:

var 
User1:TUser1
User2:TUser1

begin
procedure User1.onValueChanged;override;
begin
//блаблабла
end;
end.
но нет , так сделать нельзя. Ка организовать подобный функционал?
vsrmis вне форума Ответить с цитированием
Старый 29.07.2011, 21:44   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вам нужен аналог событий компонентов, ибо они не привязаны к классам(не считая специализированных классов), посмотрите как это делается в сорцах компонентов.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.07.2011, 22:13   #3
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

или можно так:

Код:
TMyUser = class(TUser)
private
  f_someData: string;
protected
  procedure onValueChanged(); override;
public
  constructor Create(const someData: string);
end;

{ TMyUser }

procedure TMyUser.onValueChanged(); 
begin
  inherited onValueChanged();
  //
  Memo.Text := f_someData; // "чтоб выводил кое какие данные в свой Memo"
end;

constructor Create (const someData: string);
begin
  f_someData := someData;
  //
  inherited Create();
end;
и потом создаём 2 юзера, каждый со своими "кое какие данными" для вывода в Мемо:

Код:
var
  user1, user2: TMyUser;
begin
  user1 := TMyUser.Create('Кое-какие данные для юзера №1');
  user2 := TMyUser.Create('Кое-какие данные для юзера №2');
  //  ...
end;
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 29.07.2011, 22:36   #4
vsrmis
Пользователь
 
Регистрация: 09.12.2010
Сообщений: 26
По умолчанию

Надо чтоб у разных юзеров разные Мемо были
vsrmis вне форума Ответить с цитированием
Старый 29.07.2011, 23:04   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну можно еще передавать мемо в конструктор.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.07.2011, 23:15   #6
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

Воспользуйтесь созданным свойством в классе TUser

Код:
property OnChange: TNotifyEvent read FOnChange wtite FOnChange;
////// 
procedure TUser.SetValue(AValue:Integer);
begin
  FValue = AValue;
  if Assigned(FOnChange) then
    FOnChange(Self); // Тем самым передаёте класс в обработчик
end;
ReportCube вне форума Ответить с цитированием
Старый 01.08.2011, 15:21   #7
vsrmis
Пользователь
 
Регистрация: 09.12.2010
Сообщений: 26
По умолчанию

Цитата:
Сообщение от ReportCube Посмотреть сообщение
Воспользуйтесь созданным свойством в классе TUser

Код:
property OnChange: TNotifyEvent read FOnChange wtite FOnChange;
////// 
procedure TUser.SetValue(AValue:Integer);
begin
  FValue = AValue;
  if Assigned(FOnChange) then
    FOnChange(Self); // Тем самым передаёте класс в обработчик
end;
Не совсем то что я хотел, но сделали менно так, работает спасибо.
vsrmis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прототип метода класса. VintProg Общие вопросы Delphi 24 08.07.2011 12:06
Реализация метода Push для динамического класса Mixim Общие вопросы .NET 1 21.11.2010 11:12
Переопределение конструктора класса RFbager Общие вопросы C/C++ 2 12.11.2010 14:17
Переопределение оператора умножения для класса. Умножение числа на класс. capta1n Общие вопросы C/C++ 2 06.03.2010 16:50
Адрес метода класса? VintProg Общие вопросы Delphi 6 27.09.2009 13:10