Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Firemonkey Segmentation fault (11) mit TEdit (https://www.delphipraxis.net/201268-firemonkey-segmentation-fault-11-mit-tedit.html)

juelin 6. Jul 2019 09:16

Firemonkey Segmentation fault (11) mit TEdit
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo Delphi Gemeinde,
muss Euch leider nochmal nerven. Ansonsten muss ich bis zum Forenday 21.9.2019 in Mannheim warten.
Habe das Programm vereinfacht. Nur noch 2 Edit (ohne Datenbank und sonstigen Schnick-Schnack).
Es sind nur 3 Routinen wichtig.
OnFormActivate (Edit1 wird frei gegeben)
Edit1OnKeyUp (Edit1 wird gesperrt und Edit2 wird frei gegeben)
Edot2OnKeyUp (edit2 wird gesperrt), aber da kommt das Programm ja nie hin.

Mein erstes Firmemonkey-Programm.
Im Emulator läuft alles prima.
Der Fehler tritt nur im Handy auf.
In Unit1 habe ich zwei Eingabefelder (Edit1 und Edit2).
Nach dem Start des Programmes hat Edit1 den Focus und die Handytastatur ist sichtbar.
Nun kann ich Text eingeben und mit ENTER abschliessen.
Danach hat Edit2 den Focus und die Handytastatur ist sichtbar.
Wenn ich jetzt auf der Handytastatur irgend ein Zeichen eingebe ritt der Fehler auf.
Aegmentation fault (11) (siehe Anhang).
Habe hier auch nichts gefunden wo weiter hilft.

Ich habe:
Windows 10
Delphi Rad-Studio XE5
Handy Sony Xperia 10

Code:

Delphi-Quellcode:
unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
  FMX.Edit, DBAccess, MyAccess, Data.DB, MemDS, System.DateUtils;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    procedure FormActivate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure Edit1KeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;
      Shift: TShiftState);
    procedure Edit2KeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;
      Shift: TShiftState);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  var JaNein: word;
  var Closestat: integer;
  var abbruch: Boolean;
  var mtasts: integer;
  var mlauf: integer;
  var mver: integer;
  var mart: integer;
  var Tag: integer;
  var Monat: integer;
  var Jahr: integer;
  var BUser: string;
  var anzrec: Integer;
  var FSatz: string;
  var sta: integer;
  var sperr: integer;
  var dcon: integer;
  var user: String;
  var passwd: String;
  var benutzer: string;
  var superu: string;
  var name: string;
  var anzp: integer;
  var SqlRet: Boolean;
  var vorname: string;
  var nachname: string;
  var ialpha: string;
  var inummer: integer;
  var inumkom: double;
  var iart: integer;
  var ilanmax: integer;

implementation

{$R *.fmx}

procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;
  Shift: TShiftState);
begin
  if mlauf = 1 then
  begin
    if ord(Key) = 13 then
    begin
      ialpha:=Edit1.Text;
      Edit1.ReadOnly:=True;
      if ialpha <> '' then
      begin
        name:=ialpha;
        anzp:=0;
        mlauf:=2;
        Edit2.ReadOnly:=False;
        Edit2.Text:='';
        Edit2.SetFocus;
      end else begin
        mlauf:=1;
        Edit1.ReadOnly:=False;
        Edit1.Text:='';
        Edit1.SetFocus;
      end;
    end;
  end;
end;

procedure TForm1.Edit2KeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;
  Shift: TShiftState);
begin
  if mlauf = 2 then
  begin
    if ord(Key) = 13 then
    begin
      ialpha:=Edit2.Text;
      Edit2.ReadOnly:=True;
      if ialpha <> '' then
      begin
        mlauf:=0;
      end else begin
        mlauf:=2;
        Edit2.ReadOnly:=False;
        Edit2.Text:='';
        Edit2.SetFocus;
      end;
    end;
  end;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
  if sta = 1 then
  begin
    Form1.Caption:='                  BVS Fahrdienst       Version '+'                  <'+BUser+'>';
    Closestat:=0;
    mtasts:=1;
    ialpha:='';
    inummer:=0;
    inumkom:=0;
    iart:=1;
    mlauf:=0;
    mver:=0;
    sta:=2;
    sperr:=1;
    benutzer:='';
    Edit1.ReadOnly:=True;
    Edit2.ReadOnly:=True;
    mlauf:=1;
    Edit1.ReadOnly:=False;
    Edit1.Text:='';
    Edit1.SetFocus;
  end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Form1.Cursor:=crDefault;
  Action:=TCloseAction.caFree;
  Form1.Free;
end;

procedure TForm1.FormCreate(Sender: TObject);
  var heute: string;
  var h1: integer;
  var h3: string;
begin
  Closestat:=0;
  mtasts:=1;
  ialpha:='';
  inummer:=0;
  inumkom:=0;
  iart:=1;
  mlauf:=0;
  BUser:='unknown';
  heute:=FormatDateTime('DD.MM.YYYY',now);
  h1:=StrLen(PChar(heute));
  if (h1 = 10) then
  begin
    h3:=Copy(heute, 1, 2);
    Tag:=StrToInt(h3);
    h3:=Copy(heute, 4, 2);
    Monat:=StrToInt(h3);
    h3:=Copy(heute, 7, 4);
    Jahr:=StrToInt(h3);
  end;
  abbruch:=false;
  sta:=1;
  dcon:=0;
  Form1.Caption:='                  BVS Fahrdienst       Version '+'                  <'+BUser+'>';
end;

end.
Danke und Gruß
Jürgen

PS: Wenn jemand mir wirklich helfen kann bin ich bereit zu zahlen (mindestens 100€).

jaenicke 6. Jul 2019 09:23

AW: Firemonkey Segmentation fault (11) mit TEdit
 
Und wie sieht dazu der Stacktrace aus? Wo landest du denn im Quelltext im Debugger?

mensch72 6. Jul 2019 09:39

AW: Firemonkey Segmentation fault (11) mit TEdit
 
Wenn etwas auf dem PC funktioniert und auf dem Smartfone nicht, liegt es bei FMX sehr oft daran, das auf Strings wie in "C" dort von 0..Length-1
und nicht wie in Delphi früher von 1..Length zu gegriffen wird!

1. daher bekomme ich bei sowas Bauchschmerzen:
..."h1:=StrLen(PChar(heute));"...

2. Wenn man Tag, Monat, Jahr haben will, geht besser man nicht über String&Positions Gewurschtel... "DecodeDate" wäre hier das Stichwort

3. die ganzen eigenen "var" Globalvariablen gehören wenn es schon damit sein soll unter "public" in die Formularklasse

juelin 6. Jul 2019 09:55

AW: Firemonkey Segmentation fault (11) mit TEdit
 
Liste der Anhänge anzeigen (Anzahl: 3)
Der Stacktrace und Haltepunkt siehe Anhang


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