Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Lazarus (IDE) (https://www.delphipraxis.net/81-lazarus-ide/)
-   -   Fehlermeldung "external SIGSEGV" (https://www.delphipraxis.net/191492-fehlermeldung-external-sigsegv.html)

StolenURBike 21. Jan 2017 16:28

Fehlermeldung "external SIGSEGV"
 
Servus Leute,
ich versuche mich momentan an Snake in Delphi für ein Schulprojekt und habe momentan ein nervigen Fehler.
Unzwar kommt immer wenn ich meinen BitBtn1 klicke folgende Fehlermeldung:
"Projekt project1 hat Exception-Klasse >External:SIGSEGV< ausgelöst. In Datei `unit1.pas` in Zeile 58: Paintbox1.Canvas.Pen.Width=10;"

Ich habe auch schon probiert diesen Befehl auszuklammern doch dann bezieht sich der Fehler auf den Befehl in Zeile 59.

Code:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  Buttons;

type

  { TForm1 }

  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    Image1: TImage;
    PaintBox1: TPaintBox;
    procedure BitBtn1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

  //Schlange
  type
      TPunkt = class
      private
      public
         procedure paint(xWert, yWert:integer);
  end;

var
  Form1: TForm1;
  xWert: integer;
  yWert: integer;
  punkt: TPunkt;
  Paintbox1 : TPaintbox;
implementation

{$R *.lfm}


{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  //Logo
  Image1.Picture.LoadFromFile('Logo.jpg');

end;

procedure TPunkt.paint(xWert, yWert: integer);
begin
Paintbox1.Canvas.Pen.Width:= 10;
Paintbox1.Canvas.Pen.Color:=clLime;
Paintbox1.Canvas.MoveTo(xWert,yWert);
Paintbox1.Canvas.LineTo(xWert,yWert);
end;


procedure TForm1.BitBtn1Click(Sender: TObject);
var xWert, yWert: integer;
begin
punkt:=TPunkt.create;
xWert:=10;
yWert:=10;
punkt.paint(xWert, yWert);
end;

end.

a.def 21. Jan 2017 16:32

AW: Fehlermeldung "external SIGSEGV"
 
Du hast zwei Mal Paintbox1 deklariert.
Das obere ist eine automatische Deklaration, nachdem du die PaintBox auf dein Formular gepackt hast.

Die untere ist von dir. Entferne mal das untere und teste dann.

Die beiden globalen Variablen xWert und yWert kannst du auch entfernen.
Genau wie Punkt. Deklariere Punkt direkt im BitBtn.

Ich würde das alles generell anders machen und die Klasse TPunkt komplett weglassen.

himitsu 21. Jan 2017 16:45

AW: Fehlermeldung "external SIGSEGV"
 
Zitat:

Delphi-Quellcode:
Image1.Picture.LoadFromFile('Logo.jpg');

Und dieser "relative" Pfad wird früher oder später auch knallen.

Geh mal auf Menü > Start > Parameter > Arbeitsverzeichnis (ich hoffe das ist in Lazarus an der selten Stelle, aber glaub schon),
schreib dort
Delphi-Quellcode:
C:\
rein und drück beherzt auf F9.

StolenURBike 21. Jan 2017 16:53

AW: Fehlermeldung "external SIGSEGV"
 
Zitat:

Zitat von a.def (Beitrag 1359479)
Du hast zwei Mal Paintbox1 deklariert.
Das obere ist eine automatische Deklaration, nachdem du die PaintBox auf dein Formular gepackt hast.

Die untere ist von dir. Entferne mal das untere und teste dann.

Problem ist, dass jetzt folgende Fehlermeldung kommt: "Error: Identifier not found "Paintbox1""

StolenURBike 21. Jan 2017 17:00

AW: Fehlermeldung "external SIGSEGV"
 
Zitat:

Zitat von himitsu (Beitrag 1359481)
Und dieser "relative" Pfad wird früher oder später auch knallen.

Geh mal auf Menü > Start > Parameter > Arbeitsverzeichnis (ich hoffe das ist in Lazarus an der selten Stelle, aber glaub schon),
schreib dort
Delphi-Quellcode:
C:\
rein und drück beherzt auf F9.

Habe das jetzt mal reingeschrieben. Weiß nicht was du wirklich mit Knallen meinst, aber ich hoffe, dass es für dieses Schulprojekt ausreicht. :D

nahpets 21. Jan 2017 17:12

AW: Fehlermeldung "external SIGSEGV"
 
Habe mal den Quelltext ein bisserl verändert:
Delphi-Quellcode:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  Buttons;

type

  { TForm1 }

  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    Image1: TImage;
    PaintBox1: TPaintBox;
    procedure BitBtn1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
    procedure MyPaint(xWert, yWert:integer);
  public
    { public declarations }
  end;

  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  //Logo
  Image1.Picture.LoadFromFile('Logo.jpg');
end;

procedure TForm1.MyPaint(xWert, yWert: integer);
begin
  Paintbox1.Canvas.Pen.Width := 10;
  Paintbox1.Canvas.Pen.Color := clLime;
  Paintbox1.Canvas.MoveTo(xWert,yWert);
  Paintbox1.Canvas.LineTo(xWert,yWert);
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  MyPaint(10, 10);
end;

end.
Schau mal bitte, ob es so funktioniert und wenn ja, erkläre uns bitte warum.

StolenURBike 21. Jan 2017 17:39

AW: Fehlermeldung "external SIGSEGV"
 
Ich habe deinen Quelltext 1:1 übernommen und nun funktioniert es auch, dass ich den besagten Punkt zeichen kann. DU HAST MIR DAMIT SEHR GEHOLFEN!

StolenURBike 21. Jan 2017 17:40

AW: Fehlermeldung "external SIGSEGV"
 
Komisch ist nur warum es bei mir die ganze Zeit gesponnen hat. Aber das kann ein kleiner Denkfehler gewesen sein. :)

nahpets 21. Jan 2017 18:05

AW: Fehlermeldung "external SIGSEGV"
 
Schau Dir bitte die Unterschiede an und versuche sie zu verstehen, sonst machst Du den Fehler in Zukunft vermutlich regelmäßig wieder.

Dashier
Zitat:

Schau mal bitte, ob es so funktioniert und wenn ja, erkläre uns bitte warum.
meinte ich durchaus ernst.

himitsu 21. Jan 2017 18:10

AW: Fehlermeldung "external SIGSEGV"
 
Du hattest Variablen doppelt.
Das ist grundsätzlich nicht schlimm, wenn man auch Alle Versionen richtig initialisiert und übergibt/überträgt.


Wenn es nicht knallt, dann wird FormCreate nicht ausgeführt oder Lazarus hat einen Bug. (Letzteres glaub ich fast nicht)
Ansonsten müsste bei dir die Datei C:\Logo.jpg existieren, was sie vermutlich nicht tut.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:52 Uhr.
Seite 1 von 2  1 2   

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf