[C++ builder] Automatisch code uitvoeren na opgebouwd form

Pagina: 1
Acties:

  • Peetman
  • Registratie: Oktober 2001
  • Laatst online: 22-08 20:14
Ik moet voor mijn werk een applicatie bouwen, die wat files van lotus notes gaat kopieren. Deze files kunnen alleen gekopieerd worden zodra notes is afgesloten. Nu heb ik een console appje gemaakt dat deze taak op zich goed uitvoert: Notes pollen of het nog live is en het progje runt verder zodra notes is afgesloten.

Nu wilde ik er een windows progje van gaan maken omdat dat er wat netter uitziet. Nu wilde ik zodra mijn main form is opgebouwd automatisch de code gaan uitvoeren om notes te gaan pollen. Alleen kan ik geen goed form event vinden om dit af te handelen. OnShow en OnPaint vinden plaats voordat de tekst op het form staat.
Is er een andere manier om de code op het juiste moment te gaan uitvoeren?

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 22-08 17:28

alienfruit

the alien you never expected

Je zou een background thread kunnen maken, waar je kijkt of Lotus Notes reeds al is afgesloten. Zodoende heeft je main form geen last hiervan.

Overigens zou ik de functies wel uitvoeren in de event OnShow ipv. OnPaint omdat OnPaint bij elke paint trigger van het venster (verplaatsen, vergroten e.d.) wordt getriggered

[ Voor 39% gewijzigd door alienfruit op 09-05-2003 14:55 ]


  • mjax
  • Registratie: September 2000
  • Laatst online: 28-07 20:20
Je zou een timertje kunnen zetten, die na een paar milliseconden (eenmalig) afgaat en die dan de pollcode uitvoert. Dat zou net genoeg tijd moeten zijn om het form op te bouwen.

  • Peetman
  • Registratie: Oktober 2001
  • Laatst online: 22-08 20:14
Een multi threaded app was ik idd al opgekomen. Het is alleen iets waar ik geen ervaring mee heb (afgezien van een linux practicum tijdens de studie).
OnPaint is idd niet echt een optie, of ik moet weer eerst gaan checken of het al een keer is uitgevoerd.

  • BezurK
  • Registratie: Juni 2001
  • Laatst online: 14-06 09:12
mjax schreef op 09 May 2003 @ 14:59:
Je zou een timertje kunnen zetten, die na een paar milliseconden (eenmalig) afgaat en die dan de pollcode uitvoert. Dat zou net genoeg tijd moeten zijn om het form op te bouwen.
Dat is wel een beetje een ranzige oplossing hoor, op de ene computer zal dit langer duren als op de ander. Tuurlijk kan elke computer wel een simpel form tekenen in minder als 1 a 2 ms maar stel dat je app om de een of andere reden heel traag loopt (gebruiker is een divxje aant encoden bijvoorbeeld), dan gebeurd dit wellicht dus niet snel genoeg en zit je alsnog met hetzelfde probleem. Je moet niet het gevolg aanpakken maar de oorzaak ;)

Rookworst zonder R is ook worst.


  • Peetman
  • Registratie: Oktober 2001
  • Laatst online: 22-08 20:14
BezurK schreef op 09 May 2003 @ 15:05:
[...]

Dat is wel een beetje een ranzige oplossing hoor, op de ene computer zal dit langer duren als op de ander. Tuurlijk kan elke computer wel een simpel form tekenen in minder als 1 a 2 ms maar stel dat je app om de een of andere reden heel traag loopt (gebruiker is een divxje aant encoden bijvoorbeeld), dan gebeurd dit wellicht dus niet snel genoeg en zit je alsnog met hetzelfde probleem. Je moet niet het gevolg aanpakken maar de oorzaak ;)
Ben ik het helemaal mee eens. Het wordt een app die bij een aantal grote bedrijven op heel veel clients uitgevoerd gaat worden. Het moet dus een behoorlijk foutloze en stabiele app zijn.

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 22-08 17:28

alienfruit

the alien you never expected

Kuch zoiets ;)

Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public
   { Public declarations }
   bLotusNotesLoaded: boolean;
   procedure VerifyLotusNotesIsRunning;
end;

procedure formcreate();
begin
  bLotusNotesLoaded := false; { bij form creatie, lotusnotes std. false }
end;

procedure formshow();
begin
  if not bLotusNotesLoaded  then VerifyLotusNotesIsRunning;
end;

procedure VerifyLotusNotesIsRunning;
var thread: tlotusnotesthread;
begin
  { lotus check script }
  if ( bLotusNotesLoaded = true ) then exit;

  try
     lotusnotesthread := tlotusnotesthread.Create();
  finally
     lotusnotesthread.DoWork( nil );
     if ( lotusnotesthread.loaded = true ) then bLotusNotesLoaded := true;
        else bLotusNotesLoaded := false;
  end;
end;   

[ Voor 7% gewijzigd door alienfruit op 09-05-2003 15:18 ]

Pagina: 1