Toon posts:

[alg] progressbar

Pagina: 1
Acties:

Verwijderd

Topicstarter
In het component dat ik ondertussen aan het fabriceren ben zit ik met een vaag probleem. Het component maakik in Delphi, maar ik denk dat dit een algemene vraag is.

Heb onderstaande structuur van mijn programma:
code:
1
2
3
4
5
6
7
TNewComponent = class
  private
    FLeesInProcedure: TLeesInProc;
    FSlaOpProcedure: TSlaOpProc;

    FStatusForm: TStatusForm;
end;

Nou zit er natuurlijk nog veel meer in, maar dit is even voor de eenvoud.

De class TLeesInProc is een algemene class waar een aantal classes van af worden geleid met verschillende InleesMethoden.
Hetzelfde geldt voor TSlaOpProc.

Als ik iets ga inlezen of ga opslaan wil ik op het statusForm een ProgressBar laten lopen. Onafhankelijk van de gekozen methode. Maar het bijwerken van de Progressbar is niet mogelijk omdat de class TLeesInProc en TSlaOpProc het StatusForm niet kennen.

Een oplossing zou kunnen zijn om het statusform uit TNewComponent te halen en in TLeesInProc en in TSlaOpProc te definieren. Maar dat vind ik geen geweldige oplossing. Voor mijn gevoel moet het beter of anders kunnen.

Met pointers etc. heb ik al een hoop geprobeerd maar ben er niets mee opgeschoten.

Weet iemand een oplossing voor dit systeempje?

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Pointer meegeven in de functie naar de progess variabele.

Als die dan veranderd zou je progressbar bij de "processmessages" geupdate moeten worden (ervan uitgaande dat je die functie gebruikt tijdens het laden.)

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Verwijderd

Ik kies dan meestal voor het Observer Pattern.

Dat betekent dat objecten zich bij een object [zeg A] kunnen aanmelden als observer. Als de status van object A verandert [bij jouw de progress] dan wordt dit aan alle observer objecten gemeld.

In jouw situatie zou je dus van TNewComponent of TStatusForm observers maken. En van TLeesInProc en TSlaOpProc observable objects.

Hier staat een uitleg over dat Pattern.

Een implementatie van het Observer Pattern kun je vinden in de VCL source bij TCustomConnection [RegisterClient, UnRegisterClient, SendConnectEvent]