Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Bitmap zu groß ? (https://www.delphipraxis.net/192776-bitmap-zu-gross.html)

sko1 18. Mai 2017 12:35

Bitmap zu groß ?
 
Hallo,

ich habe bisher funktionierenden Code in einen Thread ausgelagert, was unter Windows problemlos funktioniert.

Beim Start unter Android laufe ich in eine Fehlermeldung "Bitmap zu groß" mit folgendem Code:

Delphi-Quellcode:
    Memo := TMemo.Create(Nil);
    Memo.Lines.LoadFromFile(filename, TEncoding.UTF8);
    xmlString := Memo.Lines.Text;
Es knallt beim LoadFromFile, es handelt sich dabei definitiv um eine XML-Datei und warum da die genannte Fehlermeldung kommt ist mir völlig unerklärlich weil was hat das mit Bitmap zu tun?

Hat jemand eine Idee?

Ciao
Stefan

Neutral General 18. Mai 2017 12:37

AW: Bitmap zu groß ?
 
Benutz dafür lieber eine TStringlist:
Delphi-Quellcode:
StrList := TStringList.Create;
StrList.LoadFromFile(filename, TEncoding.UTF8);
xmlString := StrList.Text;

Sherlock 18. Mai 2017 12:43

AW: Bitmap zu groß ?
 
Ich gehe davon aus, daß XML soll angezeigt werden, weshalb ein Memo verwendet wurde.
Wie groß ist die XML-Datei? Genauer: Wie viele Zeilen hat sie?

Sherlock

AndyDF 18. Mai 2017 12:51

AW: Bitmap zu groß ?
 
In deinem Zusammenhang kann ich mir zwar nicht erklären wo da ein TBitmap verwendet wird. Aber ich habe diese Meldung auch schon öfter erhalten.

Grund: TBitmap war nicht wirklich Thread-Safe unter Delphi 10.1 Berlin.
In 10.2 Tokyo sollte das funktionieren. Konnte ich aber noch nicht testen, da meine funktionierende App (Berlin) auf Android mit Tokyo aktuell überhaupt nicht mehr startet. :wall:

Vielleicht behebt das dein Problem ja dann auch. Oder verwendet du bereits Tokyo?

Neutral General 18. Mai 2017 12:59

AW: Bitmap zu groß ?
 
Zitat:

Zitat von Sherlock (Beitrag 1371893)
Ich gehe davon aus, daß XML soll angezeigt werden, weshalb ein Memo verwendet wurde.
Wie groß ist die XML-Datei? Genauer: Wie viele Zeilen hat sie?

Die letzte Zeile seines Codes sieht eher aus als würde er ein Memo zu Laden von Text missbrauchen.
Und Memo.Lines hat Events für den Fall, dass etwas geändert. In diesen Events wird die Darstellung des Textes im Memo aktualisiert.
Mein Verdacht war, dass TMemo unter Android nicht klar kommt ohne Parent.

Bernhard Geyer 18. Mai 2017 13:50

AW: Bitmap zu groß ?
 
Zitat:

Zitat von sko1 (Beitrag 1371890)
ich habe bisher funktionierenden Code in einen Thread ausgelagert, was unter Windows problemlos funktioniert.

Nein. Es funktioniert nur zufälligerweise bei dir immer unter Windows.
Zugriff auf GUI-Control in einem Thread ist ein NoGo. Da hat Windows was dagegen. GUI-Controls sind nur im erzeugenden Thread gültig!

sko1 18. Mai 2017 13:59

AW: Bitmap zu groß ?
 
Ihr seid Klasse ! :thumb:

Das TMemo scheint wirklich ein Problem zu haben, ich habe es verwendet weil ich da das Encoding beim LoadFromFile hatte.

Dass TStringList das auch kann, war mir nicht bewusst, dass die Delphi Codevervollständigung bei mir die überladene Varianten mit anderen Parametern anzeigt und es bei TStringList auch Encoding gibt ist mir immer wieder irgendwie entgangen!

Problem gelöst!

Ciao
Stefan

sko1 18. Mai 2017 14:02

AW: Bitmap zu groß ?
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1371916)
Zitat:

Zitat von sko1 (Beitrag 1371890)
ich habe bisher funktionierenden Code in einen Thread ausgelagert, was unter Windows problemlos funktioniert.

Nein. Es funktioniert nur zufälligerweise bei dir immer unter Windows.
Zugriff auf GUI-Control in einem Thread ist ein NoGo. Da hat Windows was dagegen. GUI-Controls sind nur im erzeugenden Thread gültig!

Im Prinzip hast Du Recht, wie sollte man dann aber z.B. vorgehen, wenn man einen Thread erzeugt (damit Android nicht meckert dass das Programm bei langen Operationen nicht mehr reagiert) und von diesem Thread auf eine TProgressBar zugreifen möchte um deren Value zu ändern?

Ciao
Stefan

Neutral General 18. Mai 2017 14:06

AW: Bitmap zu groß ?
 
Zitat:

Zitat von sko1 (Beitrag 1371921)
Im Prinzip hast Du Recht, wie sollte man dann aber z.B. vorgehen, wenn man einen Thread erzeugt (damit Android nicht meckert dass das Programm bei langen Operationen nicht mehr reagiert) und von diesem Thread auf eine TProgressBar zugreifen möchte um deren Value zu ändern?

thread.Synchronize(SetProgressbarProc)

In SetProgressbarProc kannst du dann ohne Bedenken auf die GUI-Elemente zugreifen.

himitsu 18. Mai 2017 14:33

AW: Bitmap zu groß ?
 
FMX ... da malt Delphi vieles selber (außer man versucht Plattformkomponenten zu nutzen)
Und damit das malen schneller geht, wird intern manchmal ein Bitmap verwendet.

Aber es war natürlich eh komisch, für sowas ein unsichtbares Memo verwenden zu wollen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:49 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