Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   FreePascal (https://www.delphipraxis.net/74-freepascal/)
-   -   Neues Form öffnen in WINCE-Programm fehlerhaft (https://www.delphipraxis.net/123665-neues-form-oeffnen-wince-programm-fehlerhaft.html)

Poelser 6. Nov 2008 09:51


Neues Form öffnen in WINCE-Programm fehlerhaft
 
Moin zusammen,

zuerst einmal die grobe Konfiguation:
Client-Server-DB auf dem Desktop mit ZEOS 6.6.3 benutzt als DB-System Sybase ASA9. Diese Applikation ist mit D7 geschrieben. Nun haben wir eine uraltes WINCE-Programm, welches dateibasiert Daten austauscht. dieses will komplett neu schreiben. Ich mache das mit Lazarus und SQLite. Die DB-Komponenten (TSQLite3Connection etc.) sind nur in einem Datenmodul, nicht auf Formularen. Das Erzeugen einer SQLite-DB auf dem PC und rüberschieben auf den PDA funktioniert auch tadellos, die DB kann auch auf dem PDA benutzt werden. :-D

Doch jetzt kommen die Probleme auf dem PDA:
Das Erzeugen und Öffnen von weiteren Formularen führt manchmal(!) zu seltsamen Fehlermeldungen.

So sieht der Aufruf eines Formulares (Lazarus, nicht Delphi!) aus:

Delphi-Quellcode:
    FormPatBemerkung:=TFormPatBemerkung.Create(nil);
    try
      FormPatBemerkung.patid:=StrToInt(SG.Cells[0, aRow]);
      FormPatBemerkung.Caption := SG.Cells[SpalteName, aRow];
      Ergebnis:=FormPatBemerkung.ShowModal;
      if Ergebnis=mrOK then
      begin
        SG.Cells[SpalteName+3, aRow]:=FormPatBemerkung.Speichern;
      end;
    finally
      FreeAndNil(FormPatBemerkung);
    end;
Jetzt kann dieses Formular mehrfach geöffnet und geschlossen werden, dann gibt es irgendwann plötzlich beim Öffnen eine Access Violation, manchmal auch eine Meldung "Window Title cannot be set" oder so ähnlich. Das kann man dann wegklicken, und ein neuer Versuch funktioniert wieder. Oder aber das Programm verabschiedet sich sang- und klanglos. Ein ShowMessage hinter dem TFormPatBemerkung.Create zeigt, dass eben dieses Create den Fehler produziert. Wenn es knallt, dann bevor die Testmeldung angezeigt wird. :cry:

Ich habe schon experimentiert mit allen möglichen Fenstereinstellungen (bsDialog etc.). Ich benutze Lazarus 0.9.26, habe aber auch schon den Snapshot 0.9.27 vom 04.10.2008 probiert - dieselben Probleme. Lazarus 0.9.27 vom 04.11.2008 führte leider dazu, dass der Programmstart auf dem PDA mit einer Fehlermeldung abgebrochen wird. :wall:

[edit] Für Win32/i386 compiliert läuft auf dem PC einwandfrei! [/edit]

Irgendwelche Ideen, Anregungen, kann das jemand reproduzieren?

CU, Eddi

inherited 6. Nov 2008 19:50

Re: Neues Form öffnen in WINCE-Programm fehlerhaft
 
Warum übergibst du als Owner nil und nicht die Mainform? Oder gibt es keine?

Poelser 6. Nov 2008 20:31

Re: Neues Form öffnen in WINCE-Programm fehlerhaft
 
Hi,
Zitat:

Zitat von inherited
Warum übergibst du als Owner nil und nicht die Mainform? Oder gibt es keine?

Könnte ich mal ausprobieren, glaube aber nicht, dass das einen Einfluss hat.

Ich bin bei der Fehlersuche auch schon einen (kleinen) Schritt weiter: Der Start der Applikation auf einem echten Gerät (hatte bisher immer den Emulator von MS benutzt) scheitert mit 0.9.27er Snapshot mit der Meldung "Bus error or misaligned data access". Die 0.9.26er hat dieses Problem nicht, da ist ja das Form-Problem. Und hier gibt es auf dem echten Gerät entweder eine Schutzverletzung - oder eben den Fehler im Alignment!

CU, Eddi

[edit] Hab's getestet, hat keinen Einfluss :cry: [/edit]

inherited 6. Nov 2008 20:41

Re: Neues Form öffnen in WINCE-Programm fehlerhaft
 
http://wiki.lazarus.freepascal.org/W...data_access.3F

Poelser 7. Nov 2008 07:17

Re: Neues Form öffnen in WINCE-Programm fehlerhaft
 
Zitat:

Zitat von inherited
http://wiki.lazarus.freepascal.org/Windows_CE_Development_Notes#What_is_misaligned_da ta_access.3F

Danke, kannte ich schon. Hilft mir leider nicht, weil ich für's FormCreate keinen OnCreate-Handler benutze. Daher kommt kein eigener Code in Frage.

Es könnte höchstens noch an den aufgepappten Komponenten liegen, aber ein Zusammenhang mit 5 TEdit und 5 TLabel? Ich habe noch eine zweite Form, die hat 1 TLabel, 1 TComboBox und 1 TMemo. Die rauscht vergleichsweise fast nie ab!

CU, Eddi

Poelser 13. Nov 2008 08:51

Re: Neues Form öffnen in WINCE-Programm fehlerhaft
 
Moin,

ich bin nun schon einen wesentlichen Schritt weiter. Verantwortlich scheint tatsächlich TEdit zu sein. Nehme ich diese Komponenten vom Formular runter und kommentiere den entsprechenden Code aus, dann sind die Probleme weg.

Ich habe habe nun statt der TEdits einfach TMemos draufgepappt und im OnKeyPress alles rausgefiltert, was eine neue Zeile erzeugen würde. Der User merkt den Unterschied natürlich nicht, und nun gibt's auch keine Schutzverletzungen mehr :thumb:

Also, TEdit für WINCE ist wohl leider noch buggy :gruebel:

inherited 13. Nov 2008 11:43

Re: Neues Form öffnen in WINCE-Programm fehlerhaft
 
Sicher, dass es an den TEdits liegt? Hast du irgendwlechen Code, die die Edits betreffen?

Poelser 13. Nov 2008 12:45

Re: Neues Form öffnen in WINCE-Programm fehlerhaft
 
Zitat:

Zitat von inherited
Sicher, dass es an den TEdits liegt? Hast du irgendwlechen Code, die die Edits betreffen?

Ziemlich sicher. Nehme ich die TEdits vom Formular herunter und kommentiere den betreffenden Code aus, ist die Anwendung stabil.

In einem anderen Testfall hatte ich ein Formular mit je 1 TLabel und TListbox. Das war stabil, bis ich einfach mal ein TEdit auf's Form gepappt hatte. TEdit wieder beseitigt, und schon kann man das Form wieder etliche Male öffnen/schließen ohne Schutzverletzung.


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