Форум: "Основная";
Текущий архив: 2004.02.02;
Скачать: [xml.tar.bz2];
Внизсоздание своего события в компоненте. Найти похожие ветки
← →
MadGhost (2004-01-19 23:18) [0]Здравствуйте знатоки!!! Вопрос у меня такой. Создаю я компоненту для удобства, в принципе, класс, но пробую компоненту, так значит.
Есть класс, значит который обрабатывает какой то массив данных, есть свойство CountLD показывающее количество массива положим, вот, хочу чтобы каждый цикл, вызывал какое то событие в моем классе. Для чего это надо: например обрабатываем массив, операция эта довольно длительная, и я хочу чтобы у пользователя была информация о процессе, вывести я его хочу например в ProgressBar который ясно в класс не положишь, так вот, я хочу чтобы в классе в цикле вызывалось это событие, в котором бы я обновлял содержимое ProgressBar. Кто нибудь опишите на пальцах в двух словах как это сделать?
← →
Юрий Федоров (2004-01-19 23:48) [1]1. Описываем тип события (или берем существующий, если уже есть подходящий)
type
TMyNotifyEvent = procedure(Sender: TObject) of object;
2. Заводим приватное поле этого типа в классе, и публикуемое св-во свойство
TMycomponent = class(TComponent)
private
...
FOnProgress: TMyNotifyEvent;
...
published
...
property OnProgress: TMyNotifyEvent read FOnProgress write FOnProgress;
...
end;
3. В нужном месте цикла вызываем
...
if Assigned(FOnProgress) when FOnProgress(Self);
...
← →
MadGhost (2004-01-20 08:07) [2]Большое, при большое спасибо!!!
только вот че то не заработало :(
привожу код примера который я попробовал сделать, видимо руки кривые, подскажите откуда растут?
unit Repview;
interface
uses
Windows, Messages, SysUtils, Classes;
type
TMyNotifyEvent=procedure(Sender:TObject) of object;
type
TRepview = class(TComponent)
private
{ Private declarations }
FOnProgress:TMyNotifyEvent;
i:integer;
protected
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
property OnProgress:TMyNotifyEvent read FOnProgress write FOnProgress;
property Progress:integer read i write i;
procedure Cycle;
function ReadI:integer;
constructor Create;
end;
procedure Register;
implementation
constructor TRepview.Create;
begin
//
end;
procedure TRepview.Cycle;
var
k:integer;
begin
for k:=0 to 1000 do
begin
i:=k;
if Assigned(FOnProgress) then FOnProgress(Self);
end;
end;
function TRepview.ReadI:integer;
begin
Result:=i;
end;
procedure Register;
begin
RegisterComponents("Standard", [TRepview]);
end;
end.
а вот программа которая пытается воспользоваться компонентом.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Repview, ComCtrls, StdCtrls;
type
TForm1 = class(TForm)
ProgressBar1: TProgressBar;
Repview1: TRepview;
Button1: TButton;
procedure Repview1Progress(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Repview1Progress(Sender: TObject);
begin
ProgressBar1.Position:=Repview1.ReadI;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Repview1:=TRepview.Create;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Repview1.Cycle;
end;
end.
← →
MBo (2004-01-20 08:41) [3]ты не назанчил обработчик
procedure TForm1.FormCreate(Sender: TObject);
begin
Repview1:=TRepview.Create;
Repview1.OnProgress:=Repview1Progress;
end;
← →
MadGhost (2004-01-20 09:24) [4]бааааааллллььььььшшшшшооооооеееееееееееее прррииибааалььььшшшшоееее СПАСИБО. ответившим.
← →
Семен Сорокин (2004-01-20 09:51) [5]2MadGhost
в дополнение к [3]
за собой надо убирать :)
procedure TForm1.FormDestroy(Sender: TObject);
begin
Repview1.Free
end;
← →
MadGhost (2004-01-20 12:14) [6]спасибо пребольшущее ;) всем.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.02.02;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c