Form2 öffnet sich nicht

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
l0lhaxx
Beiträge: 89
Registriert: Di 8. Dez 2015, 09:20

Form2 öffnet sich nicht

Beitrag von l0lhaxx »

Hallo zusammen,

habe wieder einmal ein Problem das ich einfach nicht in den Griff bekomme.
Ich habe ein neues Projekt erstellt, mit zwei Formen.
Beide Fenster sollen sich öffnen wenn ich die exe starte. Auf meinem PC (auf dem ich auch programmiert habe) funktioniert das wunderbar, auf allen anderen PC´s leider nicht. Es öffnet sich immer nur Form1 beim starten des Programms. Alle PC´s laufen mit gleichem Betriebssystem und Servicepack.

Hat jemand eine Idee wo der Fehler sein könnte?

Code: Alles auswählen

 
 
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
 Classes, SysUtils, FileUtil, RTTICtrls, Forms, Controls, Graphics, Dialogs,
 ExtCtrls, StdCtrls, MMSystem;
 
type
 
 { TForm1 }
 
 TForm1 = class(TForm)
   GroupBox1: TGroupBox;
   Label1: TLabel;
   Label2: TLabel;
   Label3: TLabel;
   Label4: TLabel;
   ScrollBox1: TScrollBox;
   Timer1: TTimer;
 
 
 
   procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
   procedure FormCreate(Sender: TObject);
   procedure Timer1Timer(Sender: TObject);
 
 
 
 private
   { private declarations }
 public
   { public declarations }
 end;
 
var
 Form1: TForm1;
 counter1:integer;
 
implementation
 
uses
Unit2;
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
Timer1.Enabled:=False;
 
end;
 
 
 
procedure TForm1.FormCreate(Sender: TObject);
begin
 
Form1.Height:=63;
Form1.Width:=282;
 
Timer1.Enabled:=False;
 
 
Label1.Caption:='00:';
Label2.Caption:='00:';
Label3.Caption:='00';
Label4.Color:=clScrollBar;
 
 
procedure TForm1.Timer1Timer(Sender: TObject);
var
 SS,MM,HH:String;
 intSS, intMM, intHH:Integer ;
 
begin
 //Integer-Variable Counter um 1 herunterzählen
 dec(Counter1);
 //Stunden, Minuten und Sekunden für die Anzeige berechnen
 intHH:=Trunc(Counter1/60/60);
 intMM:=Trunc((Counter1-intHH*60*60)/60);
 intSS:=Trunc(Counter1- intMM*60 -intHH*60*60);
 
 SS:=IntToStr(intSS);
 MM:=IntToStr(intMM);
 HH:=IntToStr(intHH);
 
 //Aus optischen Gründen wird hier bei Bedarf eine "0"
 //vor die Zeitangabe gesetzt
If Length(SS)=1 Then SS:='0' + SS ;
If Length(MM)=1 Then MM:='0' + MM ;
If Length(HH)=1 Then HH:='0' + HH ;
 
 //Doppelpunkt nach Stunden und Minuten anzeigen
HH:= HH + ':';
MM:= MM + ':';
 
 //Hier wird den Labels die Beschriftung zugewiesen
Label3.Caption:=SS;
Label2.Caption:=MM;
Label1.Caption:=HH;
 
 //Anzeigefeld Farbe zuordnen bei bestimmter Laufzeit
 //Wenn Zeit zwischen 24h und 15min dann Farbe grün
if (Counter1 <= 86400) and (Counter1 >= 900) then
begin
Label4.Color:=clgreen;
end;
 //Wenn Zeit zwischen 15min und 1sek dann Farbe orange
if (Counter1 <= 899) and (Counter1 >= 1) then
begin
Label4.Color:=clyellow;
end;
 
 //Wenn der Counter auf "0" steht, ist die Zeit abgelaufen
 //Der Timer wird abgeschaltet und der OnStopTimer-Event ausgelöst
 //Außerdem wird das akustische Signal ausgegeben
If Counter1=0 Then
begin
 Timer1.Enabled:=False;
 Label4.Color:=clred;
 PlaySOUND(PChar('.\sound.wav'),hInstance,snd_ASync );
end;
end;
 
 end;
 
 
end.
 

Code: Alles auswählen

 
unit Unit2;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  ExtCtrls, Unit1;
 
type
 
  { TForm2 }
 
  TForm2 = class(TForm)
    btnStart1: TButton;
    btnStop1: TButton;
    GroupBox1: TGroupBox;
    Label1: TLabel;
 
 
   procedure btnStart1Click(Sender: TObject);
   procedure btnStop1Click(Sender: TObject);
   procedure FormActivate(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure FormResize(Sender: TObject);
 
 
 
 
 
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form2: TForm2;
 
implementation
 
{$R *.lfm}
 
{ TForm2 }
 
 
 
 // Wenn "Abkühlen" gedrückt wird, wird der Timer gestoppt falls er noch
 // läuft. Der Counter wird auf 3600 Sekunden gesetzt (60min) und anschließend
 // der Timer wieder gestartet
procedure TForm2.btnStart1Click(Sender: TObject);
begin
Form1.Timer1.Enabled:=False;
Counter1:= 86400;
Form1.Timer1.Interval:=1000;
Form1.Timer1.Enabled:=True;
Form1.Label4.Caption:='   Aushärten   ';
end;
 
 
procedure TForm2.FormActivate(Sender: TObject);
begin
  Form2.Width:=422;
  Form2.Height:=896;
end;
 
procedure TForm2.FormCreate(Sender: TObject);
begin
  Form2.Visible:=True;
end;
 
procedure TForm2.FormResize(Sender: TObject);
begin
 
  Form2.Width:=422;
  Form2.Height:=896;
 
end;
 
procedure TForm2.btnStop1Click(Sender: TObject);
begin
Form1.Timer1.Enabled:=False;
Form1.Label4.Caption:='               ';
Form1.Label4.Color:=clScrollBar;
Form1.Label3.Caption:='00';
Form1.Label2.Caption:='00:';
Form1.Label1.Caption:='00:';
 
end;
 
end.
 
 

Benutzeravatar
theo
Beiträge: 10875
Registriert: Mo 11. Sep 2006, 19:01

Re: Form2 öffnet sich nicht

Beitrag von theo »

Compiliert das überhaupt? Du hast bei Form1 bei "FormCreate" kein "end;" vor "Timer1Timer".

Man sagt übrigens "Formulare" nicht "Formen". :wink:

baumina
Beiträge: 152
Registriert: Mo 3. Feb 2014, 14:07
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Form2 öffnet sich nicht

Beitrag von baumina »

Noch ein kleiner Hinweis zur Programmierung. Verwende niemals die Variable Form2 innerhalb von TForm2 proceduren.

Beispiel:

FALSCH:

Code: Alles auswählen

 
procedure TForm1.FormCreate(Sender: TObject);
begin 
  Form1.Height:=63;
  Form1.Width:=282;
end;
 
RICHTIG:

Code: Alles auswählen

 
procedure TForm1.FormCreate(Sender: TObject);
begin 
  Height:=63;
  Width:=282;
end;
 
Auch RICHTIG:

Code: Alles auswählen

 
procedure TForm1.FormCreate(Sender: TObject);
begin 
  self.Height:=63;
  self.Width:=282;
end;
 
.

l0lhaxx
Beiträge: 89
Registriert: Di 8. Dez 2015, 09:20

Re: Form2 öffnet sich nicht

Beitrag von l0lhaxx »

theo hat geschrieben:Compiliert das überhaupt? Du hast bei Form1 bei "FormCreate" kein "end;" vor "Timer1Timer".

Man sagt übrigens "Formulare" nicht "Formen". :wink:
Doch eigentlich schon. Ist nur beim kopieren verschwunden :)

Wie gesagt. Durch den Compiler wird es gejagt. Funktioniert an meinen PC auch alles wie es soll. Wenn ich es aber auf einen anderen PC übertrage (auch wenn ich alle Lazarus Files im Ordner lasse), öffnet sich die Form2 einfach nicht mehr....

Ist es möglich das die Form2 außerhalb des Bildbereichs angezeigt wird?
Gibt es eine Möglichkeit Form1 und Form2 zentriert zu öffnen?
baumina hat geschrieben:Noch ein kleiner Hinweis zur Programmierung. Verwende niemals die Variable Form2 innerhalb von TForm2 proceduren.

Beispiel:

FALSCH:

Code: Alles auswählen

 
procedure TForm1.FormCreate(Sender: TObject);
begin 
  Form1.Height:=63;
  Form1.Width:=282;
end;
 
RICHTIG:

Code: Alles auswählen

 
procedure TForm1.FormCreate(Sender: TObject);
begin 
  Height:=63;
  Width:=282;
end;
 
Auch RICHTIG:

Code: Alles auswählen

 
procedure TForm1.FormCreate(Sender: TObject);
begin 
  self.Height:=63;
  self.Width:=282;
end;
 
Hat bei mir trotzdem super funktioniert. Daran liegt es nicht. Aber danke für den Tipp!

baumina
Beiträge: 152
Registriert: Mo 3. Feb 2014, 14:07
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Form2 öffnet sich nicht

Beitrag von baumina »

Klar funktioniert das erstmal (bis halt die Probleme kommen). Mein Hinweis kam aber nicht nur "einfach so", der kam genau wegen dieser Stelle:

Code: Alles auswählen

 
procedure TForm2.FormCreate(Sender: TObject);
begin  
  Form2.Visible:=True;
end;
 
Wozu ist das gut? Bzw. wolltest du da nicht zufällig Form1 sichtbar machen?

Da wären wir auch schon beim nächsten Programmier-Hinweis. Gib deinen Formularen und sonstigen Komponenten vernünftige Namen, denn bei Form1-99 verliert man doch schnell den Überblick.
.

l0lhaxx
Beiträge: 89
Registriert: Di 8. Dez 2015, 09:20

Re: Form2 öffnet sich nicht

Beitrag von l0lhaxx »

GELÖST.

War anscheinend wie vermutet der Fall....
Position = poScreenCenter

und das Programm läuft. Danke für eure Hilfe!

Gruß l0lhaxx

Antworten