[gelöst] Anzeigen eines Fensters funktioniert nicht (mehr)

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 1196
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Manjaro Linux, Mint und Windows 10 ,Lazarus 3.99, FPC-Version: 3.3.1
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

[gelöst] Anzeigen eines Fensters funktioniert nicht (mehr)

Beitrag von kralle »

OS: Linux Mint 17.3 64-Bit
FPC: 3.0.0
Laz: 1.6

Moin,

ein Menüpunkt aus einem TMainMenü soll ein neues Formular erzeugen, anzeigen und löschen.

Der Ausruf beinhaltet :

Code: Alles auswählen

procedure TMainForm.MainMenu_InfoClick(Sender: TObject);
procedure TMainForm.MainMenu_InfoClick(Sender: TObject);
begin
   Copyright_Window:=TCopyright_Window.Create(Nil);
    Copyright_Window.show;
  FreeAndNil(Copyright_Window);
end;        
Die Unit die aufgerufen wird enthält das hier:

Code: Alles auswählen

unit copyright;
 
{$mode delphi}
 
interface
 
uses
  Classes, SysUtils, FileUtil,
 
  LCLIntf, LCLType, LMessages, Messages, Variants, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ComCtrls, Buttons,
  // Um die Versionsinformation auszulesen
  // Quelle: http://www.lazarusforum.de/viewtopic.php?f=10&t=4085
  vinfo, versiontypes;
 
type
 
  { TCopyright_Window }
 
  TCopyright_Window = class(TForm)
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    Bt_Close: TButton;
    Memo1: TMemo;
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure Bt_CloseClick(Sender: TObject);
    // procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Copyright_Window: TCopyright_Window;
 
implementation
 
{$R *.lfm}
 
{ TCopyright_Window }
 
function ProductVersionToString(PV: TFileProductVersion): String;
  begin
    Result := Format('%d.%d.%d.%d', [PV[0],PV[1],PV[2],PV[3]])
  end;
 
procedure TCopyright_Window.FormCreate(Sender: TObject);
var
   Info: TVersionInfo;
begin
   Info := TVersionInfo.Create;
   Info.Load(HINSTANCE);
   //ShowMessage(ProductVersionToString(Info.FixedInfo.FileVersion));
 
  Memo1.Text :=Application.title+'  '+ProductVersionToString(Info.FixedInfo.FileVersion); //+#13+#10+produktversion+#13+#10+dateiversion;
  Memo1.Text := Memo1.Text+#13+#10+#13+#10+'Softwarenutzungs-und Überlassungsvertrag';
  Memo1.Text := Memo1.Text+#13+#10+#13+#10+'- Diese Software darf kostenlos und unverändert weitergeben werden'
                                          +#13+#10+'und auf beliebig vielen Computern (auch gleichzeitig) genutzt werden.';
  Memo1.Text := Memo1.Text+#13+#10+#13+#10+'- Die Software bleibt Eigentum von Heiko Rompel.';
  Memo1.Text := Memo1.Text+#13+#10+#13+#10+'- Auf Grund der unbekannten Anzahl der verschiedenen Computersysteme'
                                          +#13+#10+'kann ich nur garantieren, das die Software auf einem Speichermedium Platz belegt. ';
  Memo1.Text := Memo1.Text+#13+#10+#13+#10+'- Ich kann nicht garantieren, das die Software auf jedem Computer läuft'
                                          +#13+#10+'und dort auch keine Schäden verursacht.';
  Memo1.Text := Memo1.Text+#13+#10+#13+#10+'Wenn Sie mit obigen Punkten nicht einverstanden sind,'
                                          +#13+#10+'so löschen Sie dieses Programm auf Ihrem Computer.';
  Memo1.Text := Memo1.Text+#13+#10+#13+#10+'Homepage: http://www.rompelsoft.de';
  Memo1.Text := Memo1.Text+#13+#10+'Kontakt : info@rompelsoft.de';
 
end;
 
{
procedure TCopyright_Window.Button1Click(Sender: TObject);
// Um die Versionsinformation auszulesen
// Quelle: http://www.lazarusforum.de/viewtopic.php?f=10&t=4085
 
 function ProductVersionToString(PV: TFileProductVersion): String;
   begin
     Result := Format('%d.%d.%d.%d', [PV[0],PV[1],PV[2],PV[3]])
   end;
 
var
   Info: TVersionInfo;
begin
   Info := TVersionInfo.Create;
   Info.Load(HINSTANCE);
   ShowMessage(ProductVersionToString(Info.FixedInfo.FileVersion));
   ShowMessage(ProductVersionToString(Info.FixedInfo.ProductVersion));
   Info.Free;
end;
 }
procedure TCopyright_Window.Bt_CloseClick(Sender: TObject);
begin
  close
end;
 
procedure TCopyright_Window.BitBtn2Click(Sender: TObject);
// Internetseite aufrufen
begin
  OpenUrl('http://www.rompelsoft.de');
end;
 
procedure TCopyright_Window.BitBtn3Click(Sender: TObject);
// E-Mail versenden
var
   Info: TVersionInfo;
begin
   Info := TVersionInfo.Create;
   Info.Load(HINSTANCE);
  OpenURL('mailto:info@rompelsoft.de?subject=Nutzeranfrage '+Application.title+'  '+ProductVersionToString(Info.FixedInfo.FileVersion));    //&body=Hello World');
end;
 
 
end.
Und wenn ich den Menüpunkz anwähle, dann löst die erste Zeile diese Meldung aus:
Projekt project1 hat Exception-Klasse >>EResNotFound<< ausgelöst mit der Meldung:
Resource "1" not found

Bei Adress 472032
Danach bekomme ich dann noch ein Assembler-Fenster.

Warum funktioniert das nicht (mehr)?

Gruß Heiko
Zuletzt geändert von kralle am Di 8. Mär 2016, 08:39, insgesamt 1-mal geändert.
OS: Manjaro Linux, Linux Mint und Windows 10
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: Anzeigen eines Fensters funktioniert nicht (mehr)

Beitrag von MacWomble »

Code: Alles auswählen

procedure TMainForm.MainMenu_InfoClick(Sender: TObject);
procedure TMainForm.MainMenu_InfoClick(Sender: TObject);
???


Bei mir habe ich das so:

Code: Alles auswählen

procedure TfrmBoss.MenuItem4Click ( Sender: TObject );
var
   F: Tfrmabout;
begin
   F := Tfrmabout.Create ( nil );
   try
      F.ShowModal;
   finally
      FreeAndNil ( F );
   end;
end;       
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

wp_xyz
Beiträge: 5152
Registriert: Fr 8. Apr 2011, 09:01

Re: Anzeigen eines Fensters funktioniert nicht (mehr)

Beitrag von wp_xyz »

kralle hat geschrieben:

Code: Alles auswählen

procedure TMainForm.MainMenu_InfoClick(Sender: TObject);
begin
   Copyright_Window:=TCopyright_Window.Create(Nil);
    Copyright_Window.show;
  FreeAndNil(Copyright_Window);
end;        
Wenn du das Fenster mit "Show" anzeigst, läuft das Programm sofort weiter und gibt es anschließend gleich wieder frei. Du meinst wahrscheinlich "Copyright_Window.ShowModal"

Weitere Bemerkungen:
  • in FormCreate und BitBtn3Click wird eine lokale Instanz von TVersionInfo erzeugt, die nicht freigegeben wird. --> Speicherleck
  • Text würde ich an das Memo eher per Memo.Lines.Add() anhängen. Und wenn schon an Text, dann die Zeilenumbrüche mit "LineEnding" statt mit #13+#10, damit es auch auf Linux und Mac läuft (ich meine - bin aber nicht 100% sicher - dass im Memo einiges an unnötigem Code abläuft, wenn der Text erzeugt werden soll).

Mathias
Beiträge: 6918
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Anzeigen eines Fensters funktioniert nicht (mehr)

Beitrag von Mathias »

Text würde ich an das Memo eher per Memo.Lines.Add() anhängen.
Vor allem würde ich den ganzen Text am Stück übergeben.

Code: Alles auswählen

  Memo1.Text := 'blal bla' + LineEnding +
    'blal bla' + LineEnding +
    'blal bla' + LineEnding +
    'blal bla' + LineEnding +
    'blal bla' + LineEnding +
    'blal bla'; 
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 1196
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Manjaro Linux, Mint und Windows 10 ,Lazarus 3.99, FPC-Version: 3.3.1
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: Anzeigen eines Fensters funktioniert nicht (mehr)

Beitrag von kralle »

Moin,
MacWomble hat geschrieben:

Code: Alles auswählen

procedure TMainForm.MainMenu_InfoClick(Sender: TObject);
procedure TMainForm.MainMenu_InfoClick(Sender: TObject);
???
Kopierfehler :)
MacWomble hat geschrieben: Bei mir habe ich das so:

Code: Alles auswählen

procedure TfrmBoss.MenuItem4Click ( Sender: TObject );
var
   F: Tfrmabout;
begin
   F := Tfrmabout.Create ( nil );
   try
      F.ShowModal;
   finally
      FreeAndNil ( F );
   end;
end;       
Habe ich jetzt so stilistisch übernommen.

Das Problem bleibt. :(

Gruß Heiko
OS: Manjaro Linux, Linux Mint und Windows 10
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 1196
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Manjaro Linux, Mint und Windows 10 ,Lazarus 3.99, FPC-Version: 3.3.1
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: Anzeigen eines Fensters funktioniert nicht (mehr)

Beitrag von kralle »

Moin,
wp_xyz hat geschrieben: Wenn du das Fenster mit "Show" anzeigst, läuft das Programm sofort weiter und gibt es anschließend gleich wieder frei. Du meinst wahrscheinlich "Copyright_Window.ShowModal"
Ja, Ist nur eine Folge des Probierens bei der Fehlersuche.
wp_xyz hat geschrieben: Weitere Bemerkungen:
in FormCreate und BitBtn3Click wird eine lokale Instanz von TVersionInfo erzeugt, die nicht freigegeben wird. --> Speicherleck
Soll natürlich nicht sein. Ich habe das jetzt beseitigt.
wp_xyz hat geschrieben: Text würde ich an das Memo eher per Memo.Lines.Add() anhängen. Und wenn schon an Text, dann die Zeilenumbrüche mit "LineEnding" statt mit #13+#10, damit es auch auf Linux und Mac läuft (ich meine - bin aber nicht 100% sicher - dass im Memo einiges an unnötigem Code abläuft, wenn der Text erzeugt werden soll).
Okay, das mit dem "LineEnding" ist eine gute Idee und werde es umsetzen.

Aber, alle die Maßnahmen bewirken keine Veränderung des ursprünglichen Problems.

Gruß Heiko
Zuletzt geändert von kralle am Di 8. Mär 2016, 08:37, insgesamt 1-mal geändert.
OS: Manjaro Linux, Linux Mint und Windows 10
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Anzeigen eines Fensters funktioniert nicht (mehr)

Beitrag von Michl »

Keine Ahnung, ob es das Problem von dir ist, aber in der 1.6.0 hatte sich ein Fehler eingeschlichen, der im Trunk behoben ist. Dabei werden neue Formulare mitunter hinter dem aufrufenden Formular geöffnet. Du kannst das einfach testen, indem du einmal das anzuzeigende Formular etwas größer als das Mainformular machst.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 1196
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Manjaro Linux, Mint und Windows 10 ,Lazarus 3.99, FPC-Version: 3.3.1
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: Anzeigen eines Fensters funktioniert nicht (mehr)

Beitrag von kralle »

Moin,
Michl hat geschrieben:Keine Ahnung, ob es das Problem von dir ist, aber in der 1.6.0 hatte sich ein Fehler eingeschlichen, der im Trunk behoben ist. Dabei werden neue Formulare mitunter hinter dem aufrufenden Formular geöffnet. Du kannst das einfach testen, indem du einmal das anzuzeigende Formular etwas größer als das Mainformular machst.
also, das Fenster wird ja gar nicht angezeigt, weil es vorher zu diesem blöden Fehler kommt und ich nicht die Ursache finde.

In einem Musterprojekt läuft alles.

Gruß Heiko
Zuletzt geändert von kralle am Mo 29. Feb 2016, 20:05, insgesamt 1-mal geändert.
OS: Manjaro Linux, Linux Mint und Windows 10
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 1196
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Manjaro Linux, Mint und Windows 10 ,Lazarus 3.99, FPC-Version: 3.3.1
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: Anzeigen eines Fensters funktioniert nicht (mehr)

Beitrag von kralle »

Hallo Michi,
Michl hat geschrieben:... , aber in der 1.6.0 hatte sich ein Fehler eingeschlichen, der im Trunk behoben ist.
Ich bin froh das ich die 1.6.0 unter Linux incl. Crosscompiling eingerichtet bekommen habe. Wenn ich jetzt die Trunk lade, dann muss ich wieder alles neu einrichten, alle Makes erneut durchlaufen zu lassen usw. oder?
Gruß
Heiko
OS: Manjaro Linux, Linux Mint und Windows 10
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 1196
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Manjaro Linux, Mint und Windows 10 ,Lazarus 3.99, FPC-Version: 3.3.1
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: Anzeigen eines Fensters funktioniert nicht (mehr)

Beitrag von kralle »

Moin,

ich habe die Trunk jetzt installiert aber das ändert jetzt nichts am Verhalten des Fensters.

Gruß Heiko
OS: Manjaro Linux, Linux Mint und Windows 10
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1

wp_xyz
Beiträge: 5152
Registriert: Fr 8. Apr 2011, 09:01

Re: Anzeigen eines Fensters funktioniert nicht (mehr)

Beitrag von wp_xyz »

kralle hat geschrieben:Und wenn ich den Menüpunkz anwähle, dann löst die erste Zeile diese Meldung aus:
Projekt project1 hat Exception-Klasse >>EResNotFound<< ausgelöst mit der Meldung:
Resource "1" not found
Ist das Häkchen zum Übernehmen der Versionsinformationen in den Projekt-Optionen gesetzt? Wenn das nicht der Fall ist, sehe ich deinen Fehler mit EResNotFound Resource 1.

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 1196
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Manjaro Linux, Mint und Windows 10 ,Lazarus 3.99, FPC-Version: 3.3.1
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: Anzeigen eines Fensters funktioniert nicht (mehr)

Beitrag von kralle »

Moin,
wp_xyz hat geschrieben: Ist das Häkchen zum Übernehmen der Versionsinformationen in den Projekt-Optionen gesetzt? Wenn das nicht der Fall ist, sehe ich deinen Fehler mit EResNotFound Resource 1.
Danke das war genau der Fehler (wieder einmal. 2011 bin ich schonmal darauf reingefallen).
Und ich war fest der Überzeugung die Funktion aktiviert zu haben.
Kann man abfragen ob die Funktion aktiv ist?

Gruß Heiko
OS: Manjaro Linux, Linux Mint und Windows 10
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1

wp_xyz
Beiträge: 5152
Registriert: Fr 8. Apr 2011, 09:01

Re: Anzeigen eines Fensters funktioniert nicht (mehr)

Beitrag von wp_xyz »

Naja, auf die Seite gehen und nachsehen, ob das Häkchen gesetzt ist. Eine weitere Nachfrage-Funktion kann man auch wieder vergessen zu prüfen.

Antworten