[Delphi] OnShow handelingen maar niet zichtbaar

Pagina: 1
Acties:

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 10-09 14:04
Ik heb een aantal handelingen in de OnShow van een Form gezet.

Als ik dan zeg Form3.Show; dan gaat hij eerst die handelingen uitvoeren en daarna krijg ik pas WERKELIJK het form te zien. De handelingen in de OnShow zijn afhankelijk van de verbinding wat tijdrovend, en ik laat een soort Progress zien van wat er allemaal gebeurd, maar dat zie je dus niet als het form nog niet voor het oog zichtbaar is.

Handelingen zoals
Form3.Visible := True
Form3.Update;
Form3.Show;

heb ik allemaal al geprobeerd.
Ik heb Application.CreateForm(TForm3, Form3);
als handeling in de button gezet. Form wordt dus niet gemaakt tijdens het maken van bijvoorbeeld form1.

Wat kan ik nou hier aan doen?

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Volgens mij zijn Form.Visible := True en Form.Show gelijk, maar dat weet ik niet precies.

Misschien helpt het als je Application.ProcessMessages in de OnShow zet van dat form.

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 10-09 14:04
ik krijg niets te zien bij jou commando. ik heb ze op vele plekken erin gepleurt, maar geen meldingen ofzo

Of moet ik er een alertje eraan vast plakken?

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Je hebt idd gelijk, het probleem is dat hij pas het form laat zien NA de OnShow event.

"The shell stopped unexpectedly and Explorer.exe was restarted."


Verwijderd

Delphi zal eerst alle code in de OnShow event uitvoeren.

Daarna zal het form pas getoond worden.

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Wat een oplossing is:

Je stopt die code in die OnShow in een aparte procedure in die form. Vervolgens doe je in je eerste form:
code:
1
2
3
4
begin
  Form2.Show;
  Form2.DoSomeStuff;
end;

Hij laat nu dus eerst je form zien, en dan gaat hij die functie uitvoeren die zoveel tijd kost.

"The shell stopped unexpectedly and Explorer.exe was restarted."


Verwijderd

probeer onactivate..
eerst komt onshow
daarna onactivate

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Op zondag 24 maart 2002 18:39 schreef TimD het volgende:
probeer onactivate..
eerst komt onshow
daarna onactivate
OnActivate doet meer volgens de help:
Description

Use OnActivate to perform special processing when the form receives focus. A form becomes active when focus is transferred to it (when the user clicks on the form, for example).

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 10-09 14:04
Op zondag 24 maart 2002 18:39 schreef jelmervos het volgende:
Wat een oplossing is:

Je stopt die code in die OnShow in een aparte procedure in die form. Vervolgens doe je in je eerste form:
code:
1
2
3
4
begin
  Form2.Show;
  Form2.DoSomeStuff;
end;

Hij laat nu dus eerst je form zien, en dan gaat hij die functie uitvoeren die zoveel tijd kost.
Kun je dit iets nader uitleggen? Bij de OnActivate werkt het nu wel, maar Bij elk proces wat hij heeft voltooid krijg je een 'x' achter het proces. Maar hij voert nu alle processen uit en daarna de 'x' terwijl ik had gezegd
label1.Caption := 'x'; TUSSEN de processen door.

Dat van Form2.DoSomeStuff; snap ik nog niet zo

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

nou, je zet gewoon de code die in OnShow (nu onderhand in OnActivate) staat in een aparte PUBLIC procedure in dat 2de formulier.

Vervolgens doe je in je eerste formulier, als je dus het tweede formulier wilt tonen:

Form2.OnShow;

En vervolgens doe je direct daarna (dus nog in dezelfde procedure in je eerste formulier):

Form2.NetNieuweTrageProcedure;

Zo toont hij eerste het tweede formulier en daarna gaat hij die procedure die zoveel tijd kost uitvoeren.

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 10-09 14:04
Hoe kan ik in het geheel

Form2.opdracht;

uitvoeren?
Hoe zorg ik dat BOVENSTAANDE commando werkt?

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Form2 in de uses gooien van Form1, doe maar es File | Use Unit (of ALT+F11) als je Form1 open hebt staan.

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 10-09 14:04
Op maandag 25 maart 2002 17:40 schreef Cheater het volgende:
Hoe kan ik in het geheel

Form2.opdracht;

uitvoeren?
Hoe zorg ik dat BOVENSTAANDE commando werkt?
Hmmm, ik legde het verkeerd uit. Ik bedoel , als er ergens een procedure staat,
bijvoorbeeld:
code:
1
2
3
procedure TForm3.blabla(Sender: TObject);
begin
end;

Kan ik dan zeggen Form3.blabla;
en dattie dat dan uitvoert?
Pagina: 1