![]() |
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:
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.
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; Komischerweise funktioniert auch folgendes:
Delphi-Quellcode:
Wer kann mir helfen? Ich versteh die Logik einfach nicht...
procedure TF_Main.Timer1Timer(Sender: TObject);
begin SetState(not o_status.Enabled); end; Viele Grüße Croco |
AW: iOS AniIndicator Problem
Ich habe es aufgegeben das Ding sauber zum Laufen zu bekommen, nutze jetzt nurnoch
Delphi-Quellcode:
Wobei ein
try
Platform.SetCursor(nil, crHourGlass); [...] finally Platform.SetCursor(nil, crDefault); end;
Delphi-Quellcode:
im try-Part den Cursor wieder auf crDefault setzt.
Application.ProcessMessages;
Gruß |
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 |
AW: iOS AniIndicator Problem
Warum nimmst Du nicht den Beispielcode aus den Demos?
Mavarik |
AW: iOS AniIndicator Problem
Zitat:
|
AW: iOS AniIndicator Problem
Hast du mal versucht nach dem Ausschalten mit
Delphi-Quellcode:
drauf zu kloppen?
form.invalidate;
|
AW: iOS AniIndicator Problem
funktioniert leider auch nicht :(
|
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:
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.
procedure TXMLReader.SetNetworkProgress(Value: boolean);
begin {$IFDEF IOS} TUIApplication.Wrap(TUIApplication.OCClass.sharedApplication).setNetworkActivityIndicatorVisible(Value); {$ENDIF} end;
Delphi-Quellcode:
Was zur Hölle kann man dagegen unternehmen?
procedure TXMLReader.SetNetworkProgress(Value: boolean);
begin {$IFDEF IOS} TUIApplication.Wrap(TUIApplication.OCClass.sharedApplication).setNetworkActivityIndicatorVisible(Value); {$ENDIF} AniIndicator1.Enabled:= Value; end; |
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 |
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:
So geht es... Ohne Berücksichtigung ob der Thread noch läuft...
if (FMyThread = nil)
then FMyThread:= TMyThread.Create(OnThreadFinished) else begin FMyThread := NIL; FMyThread:= TMyThread.Create(OnThreadFinished); end; 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 19:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz