Ik ben even een screensaver aan het maken (voor dit topic, voor wie het wil weten) en loop tegen iets heel vreemds aan.
In de project-unit moet ik uiteraard even kijken of er wordt aangeroepen met /c of met /s. De unit ziet er zo uit, let vooral op de 2 if's, want daar gaat het om:
Bovenstaande code werkt prima. Je zou alleen zeggen dat een if-else mooier is en daar komt het vreemde om de hoek kijken. Zodra ik achter de eerste CreateForm-regel de puntkomma weghaal, wordt de groene 'play'-knop van Delphi (om je app te runnen) ineens grayed-out, dus je kunt de applicatie niet meer starten. Je zou zeggen dat er ergens een error zit. Ook als ik de code verder in orde maak, dus de else toevoeg enzo, blijft de code niet runnable. Als ik Project > Syntax Check doe levert dat geen meldingen op. Dan ziet de code er dus zo uit:
of zo:
Is dit een bug in Delphi of heeft dit een reden?
Ik gebruik Delphi 7, als dat ertoe doet. Delphi even sluiten en weer openen helpt niet.
In de project-unit moet ik uiteraard even kijken of er wordt aangeroepen met /c of met /s. De unit ziet er zo uit, let vooral op de 2 if's, want daar gaat het om:
Delphi:
Voor wie vraagtekens zet bij Copy(ParamStr(1), 1, 2): ik las ooit ergens dat Windows soms meer meestuurt dan /s of /c. Daarom kun je het beste alleen de eerste 2 karakters pakken. Anyway, daar gaat het nu even niet om.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
| program Greysaver; uses Forms, ScreensaverUnit in 'ScreensaverUnit.pas' {ScreensaverForm}, ConfigurationUnit in 'ConfigurationUnit.pas' {ConfigurationForm}; {$D SCRNSAVE Greysaver} {$R *.res} var param: string; begin Application.Initialize; if ParamCount = 1 then begin param := Copy(ParamStr(1), 1, 2); if param = '/s' then Application.CreateForm(TScreensaverForm, ScreensaverForm); if param = '/c' then Application.CreateForm(TConfigurationForm, ConfigurationForm); end; Application.Run; end. |
Bovenstaande code werkt prima. Je zou alleen zeggen dat een if-else mooier is en daar komt het vreemde om de hoek kijken. Zodra ik achter de eerste CreateForm-regel de puntkomma weghaal, wordt de groene 'play'-knop van Delphi (om je app te runnen) ineens grayed-out, dus je kunt de applicatie niet meer starten. Je zou zeggen dat er ergens een error zit. Ook als ik de code verder in orde maak, dus de else toevoeg enzo, blijft de code niet runnable. Als ik Project > Syntax Check doe levert dat geen meldingen op. Dan ziet de code er dus zo uit:
Delphi:
1
2
3
4
| if param = '/s' then Application.CreateForm(TScreensaverForm, ScreensaverForm) else Application.CreateForm(TConfigurationForm, ConfigurationForm); |
of zo:
Delphi:
Als ik er dit van maak werkt het weer wel: (de CreateForm tussen begin en end)1
2
3
4
| if param = '/s' then Application.CreateForm(TScreensaverForm, ScreensaverForm) else if param = '/c' then Application.CreateForm(TConfigurationForm, ConfigurationForm); |
Delphi:
Maar ook als in binnen die begin-end de puntkomma achter die regel weglaat wordt de playknop weer grijs, terwijl je normaal gesproken voor een end altijd de puntkomma mag weglaten.1
2
3
4
5
| if param = '/s' then begin Application.CreateForm(TScreensaverForm, ScreensaverForm); end else if param = '/c' then Application.CreateForm(TConfigurationForm, ConfigurationForm); |
Is dit een bug in Delphi of heeft dit een reden?
Ik gebruik Delphi 7, als dat ertoe doet. Delphi even sluiten en weer openen helpt niet.
[ Voor 30% gewijzigd door Bergen op 21-05-2005 03:07 ]