AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Firemonkey Segmentation fault (11) mit TEdit
Thema durchsuchen
Ansicht
Themen-Optionen

Firemonkey Segmentation fault (11) mit TEdit

Ein Thema von juelin · begonnen am 6. Jul 2019 · letzter Beitrag vom 6. Jul 2019
Antwort Antwort
juelin

Registriert seit: 9. Mai 2006
Ort: Mannheim
142 Beiträge
 
Delphi XE5 Professional
 
#1

Firemonkey Segmentation fault (11) mit TEdit

  Alt 6. Jul 2019, 10:16
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€).
Miniaturansicht angehängter Grafiken
bild1.jpg   bild2.jpg  
Jürgen Linder

Geändert von juelin ( 6. Jul 2019 um 10:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Firemonkey Segmentation fault (11) mit TEdit

  Alt 6. Jul 2019, 10:23
Und wie sieht dazu der Stacktrace aus? Wo landest du denn im Quelltext im Debugger?
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#3

AW: Firemonkey Segmentation fault (11) mit TEdit

  Alt 6. Jul 2019, 10:39
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
  Mit Zitat antworten Zitat
juelin

Registriert seit: 9. Mai 2006
Ort: Mannheim
142 Beiträge
 
Delphi XE5 Professional
 
#4

AW: Firemonkey Segmentation fault (11) mit TEdit

  Alt 6. Jul 2019, 10:55
Der Stacktrace und Haltepunkt siehe Anhang
Miniaturansicht angehängter Grafiken
bild3.jpg   bild4.jpg  
Angehängte Dateien
Dateityp: txt Ereignis.txt (20,8 KB, 7x aufgerufen)
Jürgen Linder

Geändert von juelin ( 6. Jul 2019 um 11:06 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:10 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