Форум: "Начинающим";
Текущий архив: 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