Thread View: pl.comp.lang.delphi
3 messages
3 total messages
Started by konsul675
Wed, 24 Aug 2016 13:19
Delphi Callback
Author: konsul675
Date: Wed, 24 Aug 2016 13:19
Date: Wed, 24 Aug 2016 13:19
43 lines
2311 bytes
2311 bytes
Delphi XE2
Jest Forma i obiekt x
Obiekt X jest zmienną formy.
i chcę aby poprzez obiekt sterować paskiem postępu znajdującego się na formie.
Chcę zarejestrować callback (funkcja formy) formy w obiekcie X.
Robię to tak
w obiekcie x
type
TPozycjaProgressBAR = procedure(max : Integer; position : Integer);
TBasePlanKont = class(TComponent)
...
function RejestrujProcedurePozycjaProgressBAR(PozycjaProgressBAR : TPozycjaProgressBAR):boolean;
...
end;
implementation
...
function TPlanKont.RejestrujProcedurePozycjaProgressBAR(
PozycjaProgressBAR: TPozycjaProgressBAR): boolean;
begin
FPozycjaProgressBAR:=PozycjaProgressBAR;
end;
...
if assigned(FPozycjaProgressBAR) then
FPozycjaProgressBAR(1integer,2Integer);
...
end;
nstępnie w Formie
Tworzę obiekt i rejestruję funkcję, następnie obiekt x wykonuje funkcję i podaje mi dwa Integery i to działa.
Problem w tym że w funkcji zwrotnej nie mam namiaru na prawidłową formę, ponieważ tworzona jest ona poprzez Application.CreateForm.
Moje pytanie :
jak należny skonstruować typ funkcji aby można było zarejestrować funkcję składową formy i jak ją rejestrować w obiekcie X ? Jak to poprawnie zrobic?
Re: Delphi Callback
Author: jh
Date: Wed, 24 Aug 2016 21:26
Date: Wed, 24 Aug 2016 21:26
92 lines
3171 bytes
3171 bytes
W dniu 2016-08-24 o 15:19, konsul675@gmail.com pisze:
> Jest Forma i obiekt x
> Obiekt X jest zmienną formy.
> i chcę aby poprzez obiekt sterować paskiem postępu znajdującego się na formie.
>
> Chcę zarejestrować callback (funkcja formy) formy w obiekcie X.
> Robię to tak
>
> w obiekcie x
> type
> TPozycjaProgressBAR = procedure(max : Integer; position : Integer);
TPozycjaProgressBAR = procedure(Sender: TObject; max : Integer; position
: Integer) of object;
Czyli:
type
TProgressCallback = procedure(Sender: TObject; const AMax, APosition:
Integer) of object;
TMyObject = class(TComponent)
private
FProgressCallback: TProgressCallback;
public
constructor Create(AOwner:TComponent); override;
procedure RegisterCallback(AProgressCallback: TProgressCallback);
procedure ObjectProgress(const AMax, APosition: Integer);
end;
TForm3 = class(TForm)
pbMain: TProgressBar;
btnTest: TButton;
procedure FormCreate(Sender: TObject);
procedure btnTestClick(Sender: TObject);
private
FMyObject: TMyObject;
procedure FormProgress(Sender: TObject; const AMax, APosition:
Integer);
public
property MyObject: TMyObject read FMyObject;
end;
implementation
{ TMyObject }
constructor TMyObject.Create(AOwner:TComponent);
begin
inherited Create(AOwner);
FProgressCallback := nil;
end;
procedure TMyObject.RegisterCallback(AProgressCallback: TProgressCallback);
begin
FProgressCallback := AProgressCallback;
end;
procedure TMyObject.ObjectProgress(const AMax, APosition: Integer);
begin
if Assigned(FProgressCallback) then
FProgressCallback(Self, AMax, APosition);
end;
{ TForm3 }
procedure TForm3.FormCreate(Sender: TObject);
begin
FMyObject := TMyObject.Create(Self);
FMyObject.RegisterCallback(FormProgress);
end;
procedure TForm3.FormProgress(Sender: TObject; const AMax, APosition:
Integer);
begin
pbMain.Max := AMax;
pbMain.Position := APosition;
end;
procedure TForm3.btnTestClick(Sender: TObject);
var
NewMax, NewPosition: Integer;
begin
NewMax := Random(1000);
NewPosition := Random(NewMax);
MyObject.ObjectProgress(NewMax, NewPosition);
end;
jh
Re: Delphi Callback
Author: konsul41
Date: Thu, 25 Aug 2016 06:46
Date: Thu, 25 Aug 2016 06:46
24 lines
1740 bytes
1740 bytes
W dniu 24-08-2016 o 23:26, jh pisze: > W dniu 2016-08-24 o 15:19, konsul675@gmail.com pisze: >> Jest Forma i obiekt x >> Obiekt X jest zmienną formy. >> i chcę aby poprzez obiekt sterować paskiem postępu znajdującego się na >> formie. >> >> Chcę zarejestrować callback (funkcja formy) formy w obiekcie X. >> Robię to tak >> >> w obiekcie x >> type >> TPozycjaProgressBAR = procedure(max : Integer; position : Integer); > > TPozycjaProgressBAR = procedure(Sender: TObject; max : Integer; position > : Integer) of object; Brakowało "of object;" na końcu. Dziękuję za podpowiedź. --- Ta wiadomość została sprawdzona na obecność wirusów przez oprogramowanie antywirusowe Avast. https://www.avast.com/antivirus
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads