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/)
-   -   Exception-Klasse >>External:SIGSEGV<< bei Timer (https://www.delphipraxis.net/191514-exception-klasse-external-sigsegv-bei-timer.html)

heel213 23. Jan 2017 13:44


Exception-Klasse >>External:SIGSEGV<< bei Timer
 
Moin,
ich will einen Timer in meinem "Programm" einfügen, bekomme nach dem Kompilieren allerdings immer eine Fehlermeldung, wenn das Programm starten will.
Ich bitte um Hilfe, vielen Dank.
An der fett markierten Stelle wird der Fehler angezeigt.



Delphi-Quellcode:
unit Unit1;

{$mode objfpc}{$H+}

interface

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

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    Label1: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    Label17: TLabel;
    Label18: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    ScrollBar1: TScrollBar;
    ScrollBar2: TScrollBar;
    ScrollBar3: TScrollBar;
    ScrollBar4: TScrollBar;
    ScrollBar5: TScrollBar;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ScrollBar1Change(Sender: TObject);

    procedure ScrollBar2Change(Sender: TObject);

    procedure ScrollBar3Change(Sender: TObject);

    procedure ScrollBar4Change(Sender: TObject);

    procedure ScrollBar5Change(Sender: TObject);

  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;
  timer1: ttimer;
  Einwohner : UInt64;
  Zusammenrechnung, i: Integer;
  Stein,Nahrung,Luxusgueter,Gold,Goldproduktion, Nahrungproduktion, Steinproduktion, Holzproduktion, Luxusgueterproduktion : real;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
   Label8.caption:=inttostr(Scrollbar1.position);
end;

procedure TForm1.ScrollBar2Change(Sender: TObject);
begin
    Label9.caption:=inttostr(scrollbar2.position);
end;

procedure TForm1.ScrollBar3Change(Sender: TObject);
begin
   label10.caption:=inttostr(scrollbar3.position);
end;


procedure TForm1.ScrollBar4Change(Sender: TObject);
begin
   label11.caption:=inttostr(scrollbar4.position);
end;

procedure TForm1.ScrollBar5Change(Sender: TObject);
begin
    label12.caption:=inttostr(scrollbar5.position);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Zusammenrechnung:=Scrollbar1.position+Scrollbar2.position+Scrollbar3.position+
  scrollbar4.position+scrollbar5.position;
   If Zusammenrechnung=100 then
  begin
    label6.Visible:=false;
    label7.visible:=false;
    Goldproduktion:=(scrollbar1.position/100)*Einwohner;
    Nahrungproduktion:=(scrollbar2.position/100)*Einwohner;
    Steinproduktion:=(scrollbar3.position/100)*Einwohner;
    Holzproduktion:=(scrollbar4.position/100)*Einwohner;
    Luxusgueterproduktion:=(scrollbar5.position/100)*Einwohner;
  end
  else
  begin
    if Zusammenrechnung<100 then
    begin
      label7.visible:=true;
      label6.visible:=false;
      end
    else
    begin
      label6.visible:=true;
      label7.visible:=false;
      end;
end;
  label18.caption:='Momentane Produktion: Stein='+floattostr(Steinproduktion)+'/s Luxusgüter='+floattostr(Luxusgueterproduktion)+'/s Nahrung='+floattostr(Nahrungproduktion)+'/s Gold='+floattostr(Goldproduktion)+'/s';
  repeat
      begin
      timer1.enabled:=true;
      Luxusgueter:=Luxusgueter+Luxusgueterproduktion;
      Stein:=Stein+Steinproduktion;
      Nahrung:=Nahrung+Nahrungproduktion;
      Gold:=Gold+Goldproduktion;
      i:=i+1;
      end;
  until i=100;

end;

procedure TForm1.FormCreate(Sender: TObject);
begin[B]
  timer1.Interval:=100;[/B]
  i:=1;
  label6.visible:=false;
  label7.visible:=false;
  Einwohner:=5000;
  end;
end.

end.

http://www.fotos-hochladen.net/uploa...c784gbp5lo.png

DeddyH 23. Jan 2017 14:02

AW: Exception-Klasse >>External:SIGSEGV<< bei Timer
 
timer1 ist nicht als Feld Deines Formulars deklariert, sondern als globale Variable und wird somit nicht automatisch erzeugt. Hat das einen Grund, dass Du den Timer nicht einfach aufs Formular packst?

a.def 23. Jan 2017 14:06

AW: Exception-Klasse >>External:SIGSEGV<< bei Timer
 
Zitat:

Zitat von DeddyH (Beitrag 1359722)
timer1 ist nicht als Feld Deines Formulars deklariert, sondern als globale Variable und wird somit nicht automatisch erzeugt. Hat das einen Grund, dass Du den Timer nicht einfach aufs Formular packst?

Genau so einen Fehler hat wohl auch dein Kollege gemacht. Der hat auch einfach eine PaintBox global deklariert. Zusätzlich aber noch das Control auf das Formular gepackt.
http://www.delphipraxis.net/191492-f...l-sigsegv.html

heel213 23. Jan 2017 17:23

AW: Exception-Klasse >>External:SIGSEGV<< bei Timer
 
Zitat:

Zitat von DeddyH (Beitrag 1359722)
timer1 ist nicht als Feld Deines Formulars deklariert, sondern als globale Variable und wird somit nicht automatisch erzeugt. Hat das einen Grund, dass Du den Timer nicht einfach aufs Formular packst?

Vielen Dank erstmal!
Entschuldige bitte, aber ich bin ein totaler Anfänger und verwende Lazarus im Rahmen eines Schulprojekts. Meine Frage ist, was du mit dem Feld des Formulares meinst, wie genau soll ich die Variable also deklarieren? Meinst du mit Feld ein Array oder meinst du, dass ich es nicht Global sondern in der implementation deklarieren soll?
Entschuldige bitte, wenn die Antwort offensichtlich ist. :)

a.def 23. Jan 2017 17:30

AW: Exception-Klasse >>External:SIGSEGV<< bei Timer
 
Hat Lazurus nicht eine Komponentenpalette? Wenn ja schnapp dir den TTimer und zieh ihn auf dein Formular. Dann ist alles erledigt.

Luckie 23. Jan 2017 18:04

AW: Exception-Klasse >>External:SIGSEGV<< bei Timer
 
Bitte benutze beim nächsten mal Code-Tags. Und Bilder kannst du auch hier anhängen, dann besteht nicht die Gefahr, dass der Link ungültig wird und der Beitrag eventuell nutzlos.

DeddyH 23. Jan 2017 18:49

AW: Exception-Klasse >>External:SIGSEGV<< bei Timer
 
Oder besser noch Delphi-Tags (dieser "Griechen-Helm" im Beitragseditor), wenn es sich um Pascal-Code handelt ;)

heel213 23. Jan 2017 18:54

AW: Exception-Klasse >>External:SIGSEGV<< bei Timer
 
Ayy, wird gemacht :)
DeddyH, könntest du bitte noch kurz auf meine erste Antwort eingehen? Ich probiere es mal mit der Komponentenpalette, würde aber gerne trotzdem verstehen, wie ich das richtig deklariere, wenn ich es mal wieder brauche.
mfg der heelischste

hoika 23. Jan 2017 19:55

AW: Exception-Klasse >>External:SIGSEGV<< bei Timer
 
Hallo,
ziehst du den Timer aus der Palette auf das Formular,
wird der Timer beim Erzeugen des Forms automatisch erzeugt
und später auch wieder freigegeben.

a.def 23. Jan 2017 21:26

AW: Exception-Klasse >>External:SIGSEGV<< bei Timer
 
Zitat:

Zitat von heel213 (Beitrag 1359765)
Ayy, wird gemacht :)
DeddyH, könntest du bitte noch kurz auf meine erste Antwort eingehen? Ich probiere es mal mit der Komponentenpalette, würde aber gerne trotzdem verstehen, wie ich das richtig deklariere, wenn ich es mal wieder brauche.
mfg der heelischste

Ich bin zwar nicht gefragt aber...
richtig "deklariert" hast du es ja. Aber man muss das Objekt (den Timer in diesem Falle) dann auch erzeugen und später wieder freigeben.

Delphi-Quellcode:
// irgendwo deklarieren (z.B. da wo du es getan hast [sollte man aber nicht sondern besser oben im private-Bereich])
Timer1: TTimer;

// Timer "erzeugen" (z.B. FormCreate)
Timer1 := TTimer.Create;

// Timer freigeben (z.B. FormDestroy)
Timer1.Free;
Wenn du den Timer aus der Komponentenpalette ziehst brauchst du dich um keines der drei oben genannten Dinge zu kümmern.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:43 Uhr.
Seite 1 von 2  1 2      

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