![]() |
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; |
AW: Exception-Klasse >>External:SIGSEGV<< bei Timer
Delphi-Quellcode:
So ist Timer1 ein Feld der Klasse TDeinForm. Zieht man ihn aus der Komponentenpalette auf das Formular, wird er automatisch erzeugt und seine Ereignishandler gemäß den Einstellungen im Objektinspektor zugewiesen.
type
TDeinForm = class(TForm) Timer1: TTimer; (* weitere Felder und Methoden *) end;
Delphi-Quellcode:
So ist es eine selbst deklarierte Variable. Das geht auch, allerdings muss man sich um alles selbst kümmern: Erzeugen, Konfigurieren, Freigeben und Zuweisen der Ereignishandler.
var
Timer1: TTimer; |
AW: Exception-Klasse >>External:SIGSEGV<< bei Timer
Alles klar, jetzt gehts.
Vielen Dank an alle! :) |
AW: Exception-Klasse >>External:SIGSEGV<< bei Timer
"Variable global nochmal deklariert"
Das hatten wir vor Kurzem schonmal. Da könnte man sich langsam fragen: * Kennen die sich, bzw. haben die den selben Lehrer * Und wer bringt ihnen sowas immer wieder bei? |
AW: Exception-Klasse >>External:SIGSEGV<< bei Timer
Vielleicht denkt der Lehrer (:idea:), dass das "Drauf-pappen" einer Komponente auf das Formular "deklarieren" genannt wird und sagt daher "deklariert einen Timer".
Was machen die Schüler? Sie deklarieren einen Timer alá Timer: TTimer; was dann ja korrekt wäre. |
AW: Exception-Klasse >>External:SIGSEGV<< bei Timer
Also wir haben das als Deklarieren kennengelernt.
|
AW: Exception-Klasse >>External:SIGSEGV<< bei Timer
Nenn es "Drauf-pappen", das wäre richtig-er :P
Deklarieren ist meiner Meinung nach was vollkommen anderes. |
AW: Exception-Klasse >>External:SIGSEGV<< bei Timer
Diese Felder in der Form wurden ja beim "Draufpappen" deklariert ... nur halt automatisch vom Form-Designer.
|
AW: Exception-Klasse >>External:SIGSEGV<< bei Timer
Da hast du recht. Nur darf man das "Draufpappen" => "deklarieren" nennen? Damit sorgt man ja ganz offensichtlich bei gleich mehreren Personen für Probleme.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:40 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