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

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.03 c
1-2204
sbuffoon
2004-01-20 23:52
2004.02.02
Timer


14-2303
ИдиотЪ
2004-01-12 13:25
2004.02.02
Спящий режим


3-1960
alexEagle
2004-01-09 17:51
2004.02.02
TDBGrid.ReadOnly для Lookup ов???


3-1949
hfa
2004-01-05 16:04
2004.02.02
Помогите мне с запросом! Как получить список серверов Oracle


14-2359
Kerk
2004-01-10 12:24
2004.02.02
Рождество