Als ik die regel gebruik, dan krijg ik de melding dat Form3 niet bestaat (dat klopt, ik weet nog niet hoe ik er een form bij kan plaatsen).
En als ik die regel wijzig in Form1, dan krijg ik weer dezelfde melding als hierboven (zie post #25).
Als ik die regel gebruik, dan krijg ik de melding dat Form3 niet bestaat (dat klopt, ik weet nog niet hoe ik er een form bij kan plaatsen).
En als ik die regel wijzig in Form1, dan krijg ik weer dezelfde melding als hierboven (zie post #25).
Maak eens gewoon een nieuw project met één leeg form en zet deze regel (incl. de 2 uses-units) dan eens onder de application.initialize... En verder niets.
Werkt het dan wel?
Ik lees hier iets dat ik niet ken, namelijk "application.initialize"
Ik ken diverse Events van het Form, zoals FormActivate etc.
Maar "application.initialize" zegt mij niets, dus mogelijk gaat het daar fout.
Dat begrijp ik nou weer niet. Je schrijft zelf dit in jouw post (waar ik ook zei dat je hem mist plaatsen)...
Die application.initialize staat in je dpr (project) source. Maar je had die al gevonden want je geeft hier zelf al aan daar regels gewijzigd te hebben.
Of had je dit in je form-unit gezet?? Ja... dan gaat het goed mis
Ik was bezig in: unit Unit1; //Het Form-unit dus.
Ik ben aan het zoeken hoe ik op de juiste plaats kom...
Edit:
Gevonden: Project -> View Source
Het werkt !!!!
Last edited by MMSoft; 27-Oct-16 at 19:59.
Ik leer dagelijks bij, het is voor mij maar een hele leuke hobby zoals je weet.
Daarom ben dan ook heel erg blij met je hulp !
Het werkt perfect, maar is het ook mogelijk om dit met code weer 'uit' te schakelen ?
"FLAG_KEEP_SCREEN_OFF" bestaat namelijk niet, en ook
"FLAG_KEEP_SCREEN_CLEAR" niet. Dus is het wel mogelijk om deze Flag weer uit te zetten ?
Er bestaat een clearFlags() als tegenhanger van de addFlags().
Die moet je dan ook met FLAG_KEEP_SCREEN_ON aanroepen.
Ik heb er dit van gemaakt:
Dit geeft geen fout melding tijdens het compileren, maar wel als ik op deze Button druk (fout melding zie post #25)Code:procedure TForm1.Button6Click(Sender: TObject); begin SharedActivity.getWindow.clearFlags(TJWindowManager_LayoutParams.JavaClass.FLAG_KEEP_SCREEN_ON); end;
Dus mogelijk gaat dat niet vanuit een Form Unit ?
Ja. Of die thread-melding nou is omdat het echt een fout is weet ik niet maar alle oplossing doen het zo. (werken er nou werkelijk zo weinig mensen met Delphi/Android dat dit zo weinig voorkomt?)
Je kunt eens spelen met onderstaand (gewoon de exception negeren).
Ik kreeg het wel voor elkaar om het scherm aan te laten bij twee keer drukken maar de exception blijft ie geven.
Raar.
Delphi Code:
procedure TForm4.btnSchermLockAanClick(Sender: TObject); begin try SharedActivity.getWindow.addFlags(TJWindowManager_LayoutParams.JavaClass.FLAG_KEEP_SCREEN_ON); Label1.Text := TimeToStr(Now) + 'Gelukt'; except Label1.Text := TimeToStr(Now) + 'Exception'; end; end; procedure TForm4.btnSchermLockUitClick(Sender: TObject); begin try SharedActivity.getWindow.clearFlags(TJWindowManager_LayoutParams.JavaClass.FLAG_KEEP_SCREEN_ON); Label1.Text := TimeToStr(Now) + 'Gelukt'; except Label1.Text := TimeToStr(Now) + ' Exception'; end; end;
Als het scherm eenmaal aanblijft, dan kan ik zo vaak als ik wil op "SchermLockUit" drukken, maar het scherm blijft dan Aan (als ik een tijdje niets op het scherm gedaan heb), en telkens als ik druk krijg ik de foutmelding.
FLAG_KEEP_SCREEN_ON, werkt prima in de "application.initialize", maar als je de scherm beveiliging met code Aan en Uit wilt schakelen, kan je in mijn ogen mogelijk beter "Wake Lock" gebruiken (dat werkt bij mij perfect).
OPGELOST !!!!!
Dat is natuurlijk de "makkelijk" weg kiezen. Het moet mogelijk zijn in Android, dus zeggen dat je "dan maar beter" Wake Lock kunt gebruiken is "opgeven"
Maar ik heb eindelijk de oplossing gevonden. Blijkbaar draait de code van een Form in Android toch in een andere Thread (of dat denkt Delphi in ieder geval) dus er is een redelijk simpele oplossing om dit op te lossen. Gebruik CallInUIThreadAndWaitFinishing(procedure) om de addFlags/clearFlags uit te voeren vanuit de main-thread.
Dit werkt voor mij perfect (zonder exceptions):
Delphi Code:
uses FMX.Helpers.Android, Androidapi.Helpers, Androidapi.JNI.GraphicsContentViewText; procedure TForm1.btnKeepScreenOnAddClick(Sender: TObject); begin CallInUIThreadAndWaitFinishing( procedure begin SharedActivity.getWindow.addFlags( TJWindowManager_LayoutParams.JavaClass.FLAG_KEEP_SCREEN_ON); end); end; procedure TForm1.btnKeepScreenOnClearClick(Sender: TObject); begin CallInUIThreadAndWaitFinishing( procedure begin SharedActivity.getWindow.clearFlags( TJWindowManager_LayoutParams.JavaClass.FLAG_KEEP_SCREEN_ON); end); end;
Het werkt perfect !
Bedankt voor je hulp !!!
There are currently 1 users browsing this thread. (0 members and 1 guests)
Bookmarks