Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-2310
VID
2004-01-11 17:26
2004.02.02
Настройки Windows2000


1-2214
new
2004-01-20 16:40
2004.02.02
copy


3-2037
Bolek
2004-01-09 17:39
2004.02.02
Доступ к данным


1-2223
NewB
2004-01-20 16:41
2004.02.02
Загрузка и выполнение exe-модуля


14-2355
Can_kill
2004-01-10 05:31
2004.02.02
Паскаль





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский