Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.30;
Скачать: CL | DM;

Вниз

Назначение методов переменным класса во время выполнения.   Найти похожие ветки 

 
TrainerOfDolphins ©   (2006-04-11 16:39) [0]

Добрый день!
Есть класс:
Type
   TSomeClass= Class
  <…>
  У него есть метод
  Procedure SomeMethod(value:SomeType);
  End;
Также есть несколько  процедур, описанных гне-нть.
Procedure SomeProcedure1(value:SomeType);
Procedure SomeProcedure2(value:SomeType);

Var
SC1, SC2: TSomeClass;
Begin
  Создаём несколько переменных типа TSomeClass.
  SC1:= TSomeClass.Create;
  SC2:= TSomeClass.Create;
 Вопрос:
 Возможно ли написать что-то типа
 SC1.SomeMethod:= SomeProcedure1;
 SC2.SomeMethod:= SomeProcedure2;
 (Понятное дело, в таком виде это бред, но сама идея…).
End;
В общем, я хочу, чтобы у разных переменных одного класса была предусмотрена разная обработка некоторых данных.
Чую, пахнет здесь указателями, вот только не знаю, как их сюда прилепить… Подскажите, плиз…
Спасибо.


 
Anatoly Podgoretsky ©   (2006-04-11 16:41) [1]

Используй свойства


 
Сергей М. ©   (2006-04-11 16:45) [2]


> Чую, пахнет здесь указателями


Правильно чуешь.

Дело пахнет событиями - свойствами процедурного типа.


 
Джо ©   (2006-04-11 16:51) [3]

unit Unit21;

interface

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

type
 TForm21 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   procedure A (Value: string);
   procedure B (Value: string);
 public
   { Public declarations }
 end;

 TMyProc = procedure (Value: string) of object;

 TMyClass = class
 private
   FMyProc: TMyProc;
 public
   property MyProc: TMyProc read FMyProc write FMyProc;
   procedure Test;
 end;

var
 Form21: TForm21;

implementation

{$R *.dfm}

procedure TMyClass.Test;
begin
 if Assigned(FMyProc) then
   FMyProc ("Hello")
end;

procedure TForm21.A(Value: string);
begin
 ShowMessage(Value);
end;

procedure TForm21.B(Value: string);
begin
 MessageDlg(Value,mtInformation,[mbOK],-1)
end;

procedure TForm21.Button1Click(Sender: TObject);
var
 MyClass: TMyClass;
begin
 MyClass := TMyClass.Create;
 try
   MyClass.MyProc := A;
   MyClass.Test;

   MyClass.MyProc := B;
   MyClass.Test;

 finally
   MyClass.Free;
 end;
end;

end.


 
Юрий Зотов ©   (2006-04-11 16:51) [4]

> TrainerOfDolphins ©   (11.04.06 16:39)  

> я хочу, чтобы у разных переменных одного класса была предусмотрена
> разная обработка некоторых данных.

В таком случае надо для начала хотя бы ввести в класс эти переменные (правда, их принято называть полями). А в Вашем классе их нет ни одной.

type
 TSomeProcedure1 = procedure (Value: TSomeType1);
 TSomeProcedure2 = procedure (Value: TSomeType2);
 ...
 TSomeClass = сlass
 public
   FSomeProcedure1: TSomeProcedure1;
   FSomeProcedure2: TSomeProcedure2;
 end;

procedure SomeProcedure1(Value: TSomeType1);
begin
 ...
end;

procedure SomeProcedure2(Value: TSomeType2);
begin
 ...
end;

...
var
 SC: TSomeClass;
begin
 SC := TSomeClass.Create;
 SC.FSomeProcedure1 := SomeProcedure1;
 SC.FSomeProcedure2 := SomeProcedure2;
 ...


 
TrainerOfDolphins ©   (2006-04-12 10:12) [5]

Спасибо большое!
Чтобы я делал без delphimaster.ru... :)



Страницы: 1 вся ветка

Текущий архив: 2006.04.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.027 c
8-1133365011
Yozj
2005-11-30 18:36
2006.04.30
микширование на лету


2-1144937250
ViktorZ
2006-04-13 18:07
2006.04.30
Почему не складывает как люди!!!


15-1144603218
anton773
2006-04-09 21:20
2006.04.30
Новости vcl


3-1141989429
Ega23
2006-03-10 14:17
2006.04.30
Утилита osql


1-1143001881
Старик
2006-03-22 07:31
2006.04.30
DLL. Ошибка при использовании типа string в ее функциях