Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.04.30;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.01 c
15-1144339504
Volkodav
2006-04-06 20:05
2006.04.30
Совместимость железа


4-1139558159
Shuma
2006-02-10 10:55
2006.04.30
Вызов процедуру из EXE-файла


15-1144737070
DelphiN!
2006-04-11 10:31
2006.04.30
Есть ли уже надежные средства от декомпиляции программ на .NET?


15-1144663510
Lamer)N00b
2006-04-10 14:05
2006.04.30
стандартный шрифт блокнота?


2-1144922008
Роман87
2006-04-13 13:53
2006.04.30
"swf" файлы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский