🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.delphi
3 messages
3 total messages Started by konsul675 Wed, 24 Aug 2016 13:19
Delphi Callback
#345164
Author: konsul675
Date: Wed, 24 Aug 2016 13:19
43 lines
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
#345165
Author: jh
Date: Wed, 24 Aug 2016 21:26
92 lines
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
#345166
Author: konsul41
Date: Thu, 25 Aug 2016 06:46
24 lines
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