![]() |
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. ![]() |
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?
|
AW: Exception-Klasse >>External:SIGSEGV<< bei Timer
Zitat:
![]() |
AW: Exception-Klasse >>External:SIGSEGV<< bei Timer
Zitat:
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. :) |
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.
|
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.
|
AW: Exception-Klasse >>External:SIGSEGV<< bei Timer
Oder besser noch Delphi-Tags (dieser "Griechen-Helm" im Beitragseditor), wenn es sich um Pascal-Code handelt ;)
|
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 |
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. |
AW: Exception-Klasse >>External:SIGSEGV<< bei Timer
Zitat:
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:
Wenn du den Timer aus der Komponentenpalette ziehst brauchst du dich um keines der drei oben genannten Dinge zu kümmern.
// 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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:45 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