AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Wie render ich auf iOS direkt ohne ProcessMessages aufzurufen?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie render ich auf iOS direkt ohne ProcessMessages aufzurufen?

Ein Thema von Belphinator · begonnen am 15. Mär 2021 · letzter Beitrag vom 15. Mär 2021
Antwort Antwort
Belphinator

Registriert seit: 16. Feb 2021
2 Beiträge
 
#1

Wie render ich auf iOS direkt ohne ProcessMessages aufzurufen?

  Alt 15. Mär 2021, 07:48
Hallo,

ich würde gerne wissen ob es möglich ist auf iOS während eines blockierenden Aufrufes zu rendern ohne ProcessMessages aufzurufen.
Also auf Windows geht das ja mit

Code:
   if Supports(aForm, IPaintControl, PaintControl) then
      PaintControl.PaintRects( UpdateRects );
und auf Android mit

Code:
   if Assigned(aForm) then
   begin
      FormHandle := TAndroidWindowHandle(aForm.Handle);
      if Assigned(FormHandle) then
      begin
         r := TFormRender.create(FormHandle);
         if Assigned(r) then
         begin
            r.Render;
            r.DisposeOf;
            r := nil;
         end;
      end;
   end;
Für iOS sollte es theoretisch auch mit PaintControl.PaintRects gehn wenn ich es mir im Debugger anschaue, aber es passiert dann einfach gar nichts. Hat jemand eine Idee?
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Wie render ich auf iOS direkt ohne ProcessMessages aufzurufen?

  Alt 15. Mär 2021, 12:48
Eigentlich bin ich kein Freund von Antworten, die die Frage nicht beantworten, aber...

Ein blockierender Aufruf sollte (auf den mobilen Plattformen) NIE im UI-Thread ausgeführt werden.
Aus einem Thread kann man dann mit ForceQueue ein Routine aufrufen, die dann den Redraw-Code ausführt.
Oder - was ich noch lieber mache - im nächsten OnIdle-Event.

Mavarik
  Mit Zitat antworten Zitat
Belphinator

Registriert seit: 16. Feb 2021
2 Beiträge
 
#3

AW: Wie render ich auf iOS direkt ohne ProcessMessages aufzurufen?

  Alt 15. Mär 2021, 13:16
Ich weiß das es nicht Best Practice ist aber abgesehen davon das es Monate dauern würde alles umzuschreiben, sehe ich keinen Grund meinen Code mit Threads zu verkomplizieren wenn das genauso geht.

Ich hab jetzt schon ein paar Tage gesucht und jetzt nachdem ich die Frage gestellt habe finde ich die Antwort

Code:
   if Assigned(aForm) then begin
      if TPlatformServices.Current.SupportsPlatformService(IFMXWindowService, IInterface(WindowSvc)) then
      begin
         WindowSvc.InvalidateImmediately(aForm);
      end;
   end;
Das ruft intern die display Methode vom GLSView auf. Hier kann zugemacht werden.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#4

AW: Wie render ich auf iOS direkt ohne ProcessMessages aufzurufen?

  Alt 15. Mär 2021, 13:44
wenn das genauso geht.
Dein Code ging doch nicht

Spätestens wenn mal wieder was Größeres am FMX umgebaut wird, kann dieser Code plötzlich nicht mehr funktionieren.
Da wäre eine "ordentliche" Lösung bestimmt besser.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz