Toon posts:

Delphi: vreemd gedrag venster bij startup

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb dus een form en als ik de executable normaal opstart is er een probleem. Maar nu: als ik via de command line (of via explorer) een bestandsnaam opgeef om hem helemaal uit te lezen en dan laat ik een progress form zien, dan reageert het hoofdform bijvoorbeeld niet op deze code:

Delphi:
1
2
3
4
5
6
7
8
9
procedure OnMainFormMove(var Msg: TWMMove); message WM_MOVE;

// ...

procedure TMainForm.OnMainFormMove(var Msg: TWMMove);
begin
 if Assigned(ProgressForm) then
  ProgressForm.Position := poMainFormCenter;
end;


ik wil dus het progress form centeren binnen het mainform. dat doet hij dus niet als ik via de commandline het programma oproep. Als ik via het menu in mijn programma het doe (bestand selecteren) dan doet ie het gewoon goed.

Weet iemand hoe je dit op kunt lossen?

Met Application.ProcessMessages lukt het niet.

WC.Bril

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:36
Kun je niet beter at designtime de positionering van dat form gaan bepalen, door de property:
Postion op poOwnerFormCenter of op poMainFormCenter te zetten?

Bij het maken van die ProgressForm geef je dan de instance van TMainForm mee aan de constructor als Owner, en je maakt die ProgressForm dan best ook Modaal, dan kan je je mainform niet moven zolang dat het ProgressForm zichtbaar is.

https://fgheysels.github.io/


Verwijderd

Topicstarter
ik moet juist wel dat het hoofdform verplaatsen kan terwijl het progress form actief is. er staat namelijk een lijst waar de gebruiker mee moet kunnen scrollen.

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:36
Heb je al eens een breakpoint in die OnMainWindowMove gezet? Wordt die dan wel uitgevoerd?

https://fgheysels.github.io/


Verwijderd

Topicstarter
hij wordt wel uitgevoerd, maar hij positioneert het progress form niet. Het is trouwens wel een vrij intensieve operatie, het scannen van het bestand, maar volgens mij hoeft dat geen problemen op te leveren zolang je Application.ProcessMessages er in hebt.

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:36
Je zet dat scannen van dat bestand waarschijnlijk best in een aparte thread.

https://fgheysels.github.io/


Verwijderd

Topicstarter
ik heb hem gewoon in de hoofdthread.

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Ik zou zeggen, bereken de positie van het form handmatig, en stel het gewoon in met SetBounds.

日本!🎌


  • whoami
  • Registratie: December 2000
  • Laatst online: 21:36
Volgens mij heeft de applicatie gewoon geen tijd om die form te verplaatsen omdat hij te druk bezig is met het verwerken van dat bestand.
Dus, gewoon de verwerking van dat bestand in een andere thread zetten, zodanig dat de mainthread van het programma ook uitgevoerd wordt;

https://fgheysels.github.io/


Verwijderd

Topicstarter
als ik geen parameters meegeef aan het programma, maar via het menu een bestand selecteer, krijg ik ook een progress form. Via deze manier is het wel mogelijk om het hoofdform te verplaatsen terwijl het progressform actief is (bij dezelfde intensiteit). Ik denk dat het te maken heeft met de startup van het programma.

  • tfk__66
  • Registratie: September 2002
  • Laatst online: 29-10-2025

tfk__66

OS1: Fedora Linux, OS2: W10

Je kan ook parameterinfo via Delphi opgeven, dan kun je er ook op de tweede manier dooheenlopen. Zo kun je kijken of er verschillen in de volgorde van de aanroep van de code zijn.

Want dat is volgens mij het probleem. Ik denk dat het progressvenster te vroeg wordt aangeroepen waardoor deze modaal boven de mainform komt te liggen (dit is toch zo?).

Nu kan het zo zijn dat het mainform bepaalde messages niet meer uitvoerd als de status van het form veranderd is.

Kijk maar eens onder Run-> Parameters.

Suc7

GA-Z170XP-SLI - i7 6700K 4.0GHz - 16GB DDR3 - Corsair 300R Wnd - Corsair CX750M - AMD 7950 3GB

Pagina: 1