Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   iOS AniIndicator Problem (https://www.delphipraxis.net/174858-ios-aniindicator-problem.html)

Crocotronic 14. Mai 2013 17:00

iOS AniIndicator Problem
 
Hallo,
mich beschäfftigt gerade das Objekt "TAniIndicator". Dieser Kreisel soll starten, wenn ein Thread gestartet, und stoppen, wenn ein Event vom Thread aufgerufen wird.
Delphi-Quellcode:
procedure TF_Main.OnThreadFinished(Sender: TObject),
begin
 SetState(false);
 {...}
end;

procedure TF_Main.OnThreadError(Sender: TObject; Error: Exception);
begin
 {Fehlerbehandlung}
end;

procedure TF_Main.SetState(State: Boolean);
begin
 o_status.Visible:= State;
 o_status.Enabled:= State;
end;

procedure TF_Main.Timer1Timer(Sender: TObject);
begin
 if FMyThread.Finished then
 begin
  SetState(true);
  FMyThread:= TMyThread.Create(OnThreadFinished, OnThreadError);
 end;
end;
Was ich nun überhaupt nicht verstehe: Der Kreisel hört nicht auf zu kreiseln! Erst wenn ich nach dem SetState(false) ein Event auslöse (z.B. ButtonClick), dann wird das Objekt angehalten und versteckt. Sowas wie Application.ProcessMessage oder o_status.Repaint bringt nichts. Per Button ein/ausschalten funktioniert.
Komischerweise funktioniert auch folgendes:
Delphi-Quellcode:
procedure TF_Main.Timer1Timer(Sender: TObject);
begin
 SetState(not o_status.Enabled);
end;
Wer kann mir helfen? Ich versteh die Logik einfach nicht...

Viele Grüße
Croco

Darlo 14. Mai 2013 17:21

AW: iOS AniIndicator Problem
 
Ich habe es aufgegeben das Ding sauber zum Laufen zu bekommen, nutze jetzt nurnoch
Delphi-Quellcode:
  try
    Platform.SetCursor(nil, crHourGlass);
    [...]
  finally
    Platform.SetCursor(nil, crDefault);
  end;
Wobei ein
Delphi-Quellcode:
Application.ProcessMessages;
im try-Part den Cursor wieder auf crDefault setzt.


Gruß

Crocotronic 14. Mai 2013 20:42

AW: iOS AniIndicator Problem
 
An allen Ecken gibt es Probleme... da ist noch viel Arbeit für die Embarcadero-Leute!

Zu deinem Lösungsvorschlag: Unter iOS gibt es ja keinen Cursor, also bringt mir das nicht sonderlich viel

Mavarik 15. Mai 2013 07:52

AW: iOS AniIndicator Problem
 
Warum nimmst Du nicht den Beispielcode aus den Demos?

Mavarik

Crocotronic 15. Mai 2013 10:19

AW: iOS AniIndicator Problem
 
Zitat:

Zitat von Crocotronic (Beitrag 1215329)
Per Button ein/ausschalten funktioniert.
Komischerweise funktioniert auch folgendes:
Delphi-Quellcode:
procedure TF_Main.Timer1Timer(Sender: TObject);
begin
 SetState(not o_status.Enabled);
end;

So bekomme ich ihn ja zum laufen

Darlo 15. Mai 2013 10:56

AW: iOS AniIndicator Problem
 
Hast du mal versucht nach dem Ausschalten mit
Delphi-Quellcode:
form.invalidate;
drauf zu kloppen?

Crocotronic 15. Mai 2013 19:32

AW: iOS AniIndicator Problem
 
funktioniert leider auch nicht :(

Crocotronic 5. Jun 2013 20:04

AW: iOS AniIndicator Problem
 
Ich bin immer noch dabei zu versuchen, den AniIndicator zum laufen zu bringen, da ich für meine Live-Ticker-App einfach ein Objekt brauche, an dem ich zeigen kann, dass gerade aktualisiert wird.

Zumindest funktioniert der NetworkIndicator auf der iOS-Eigenen Statusbar. Das Teil setzt ich vor dem Thread-Beginn auf True und im OnTerminate auf False.

Delphi-Quellcode:
procedure TXMLReader.SetNetworkProgress(Value: boolean);
begin
 {$IFDEF IOS}
 TUIApplication.Wrap(TUIApplication.OCClass.sharedApplication).setNetworkActivityIndicatorVisible(Value);
 {$ENDIF}
end;
Wenn ich jetzt einfach noch unter die Zeile den AniIndicator auf Value setze, dann geschieht das Übliche, aber mit beiden Indikatoren. Beide hören einfach nicht mehr auf zu drehen, bis irgendeine Display-Eingabe erfolgt. Es reicht aus, einfach mit dem Finger nach unten zu wischen, wobei ich auf diese Geste im Programm überhaupt icht reagiere.

Delphi-Quellcode:
procedure TXMLReader.SetNetworkProgress(Value: boolean);
begin
 {$IFDEF IOS}
 TUIApplication.Wrap(TUIApplication.OCClass.sharedApplication).setNetworkActivityIndicatorVisible(Value);
 {$ENDIF}
 AniIndicator1.Enabled:= Value;
end;
Was zur Hölle kann man dagegen unternehmen?

Crocotronic 24. Jun 2013 21:24

AW: iOS AniIndicator Problem
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe dem Teil den Krieg erklärt :twisted::twisted::twisted:
Und ich würde auch behaupten, dass ich nach 2 Stunden intensivem rumprobieren den Fehler am Kragen habe. Ich brauche lediglich nur noch jemand, der den Fehler interpretiert :lol:
Ich habe mein Programm (LiveTicker) einfach soweit reduziert, bis nur noch ein paar Zeilen Code übrig geblieben sind. Jetzt sollte es einfach sein, den Fehler zu finden. Daraus hab ich dann ein kleines Testprogramm gemacht. Das häng ich mal als ZIP hier an.
Die uses clause hab ich einfach mal so gelassen.
Wie ihr sehen könnt, macht die Klasse MyThreadClass in diesem Context eher keinen Sinn. Aber wie gesagt, ist eben alles reduziert.
Wäre euch sehr dankbar, wenn sich das mal jemand angucken könnte!

Noch mal das Problem zusammen gefasst: Alle 10 Sekunden wird ein Thread gestartet, der etwas runterläd. Vor dem Start wird ein AniIndicator aktiviert. Im OnFinished-Event wird er wieder deaktiviert. Die Zeit, wann er ihn deaktiviert ist total willkürlich. Um ihn "manuell" zu stoppen, einfach nach unten wischen (keine Ahnung warum).
Unter Windoof funktionierts....

Viele Grüße
Croco

Mavarik 26. Jun 2013 14:52

AW: iOS AniIndicator Problem
 
Also...

Welchen Einfluss FreeOnTerminate:= true; auf Deine FMyThread variable hat... (bei ARC)... Keine Ahnung, nutze das NIE!

Kann man den isFinnished noch abfragen?

Delphi-Quellcode:
 if (FMyThread = nil)
   then FMyThread:= TMyThread.Create(OnThreadFinished)
   else begin
          FMyThread := NIL;
          FMyThread:= TMyThread.Create(OnThreadFinished);
        end;
So geht es... Ohne Berücksichtigung ob der Thread noch läuft...

Der Thread läuft bei mir aber nicht immer 2 Sekunden... Das dauert ggf. länger!

Mavarik


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:53 Uhr.
Seite 1 von 2  1 2      

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