Fehlermeldung bei Klick auf PopUpMenu

Rund um die LCL und andere Komponenten
Antworten
Techno
Beiträge: 18
Registriert: Mo 14. Okt 2019, 10:24
OS, Lazarus, FPC: Windows 10 (L 2.0.8 FPC 3.0.4)
CPU-Target: 32Bit

Fehlermeldung bei Klick auf PopUpMenu

Beitrag von Techno »

Guten Tag,

mein Programm stürzt jedes Mal ab, wenn ich auf ein bestimmtes MenuItem klicke. Dieses MenuItem gehört zu einem PopUpMenu, das einem Memo-Feld zugeordnet ist. So kann ich, wenn ich mit der rechten Maustaste auf das Memofeld klicke, diesen Menü-Punkt aufrufen und damit ein weiteres Fenster (Form13) öffnen. In den Code für diesen Klick habe ich Folgendes geschrieben:

Code: Alles auswählen

procedure TForm1.MenuItem2Click(Sender: TObject);
begin
  Form13.Show;
end;

Außerdem habe ich unter "uses" die Unit angegeben, die Form13 benutzt.
Wenn ich aber im gestarteten Programm auf diesen Menüpunkt klicke, erscheint diese Fehlermeldung: "Exception-Klasse "EXTERNAL: SIGSEGV" In Datei '.\include\customform.inc' in Zeile 2330: Visible:=True;". Damit bezieht sich die Fehlermeldung auf den folgenden Code:

Code: Alles auswählen

procedure TCustomForm.Show;
begin
  if Application.Scaled and Scaled and (Monitor.PixelsPerInch<>PixelsPerInch) then
    AutoAdjustLayout(lapAutoAdjustForDPI, PixelsPerInch, Monitor.PixelsPerInch,
      Width, MulDiv(Width, Monitor.PixelsPerInch, PixelsPerInch));
 
  Visible:=True;
  BringToFront;
end;


Ich danke schon im Voraus für Antworten und mögliche Problemlösungen!
Grüße,

Techno

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

Re: Fehlermeldung bei Klick auf PopUpMenu

Beitrag von wp_xyz »

Techno hat geschrieben:Guten Tag,

mein Programm stürzt jedes Mal ab, wenn ich auf ein bestimmtes MenuItem klicke. Dieses MenuItem gehört zu einem PopUpMenu, das einem Memo-Feld zugeordnet ist. So kann ich, wenn ich mit der rechten Maustaste auf das Memofeld klicke, diesen Menü-Punkt aufrufen und damit ein weiteres Fenster (Form13) öffnen. In den Code für diesen Klick habe ich Folgendes geschrieben:

Code: Alles auswählen

procedure TForm1.MenuItem2Click(Sender: TObject);
begin
  Form13.Show;
end;

Außerdem habe ich unter "uses" die Unit angegeben, die Form13 benutzt.

Das sieht so aus, als ob Form13 noch nicht erzeugt worden ist. Die zugehörige Unit nur in die "uses"-Liste aufzunehmen, reicht nicht. Setze einen Breakpoint auf der Zeile mit "Form13.Show". Wenn das Programm an dieser Stelle anhält, fahre mit der Maus über "Form13". Wenn das erscheinende Popup-Fenster "nil" anzeigt, existiert das Formular noch nicht. Du kannst in den Projekt-Optionen unter "Formulare" das zugehörige Formular in der rechten Liste der "Verfügbaren Formulare" anklicken und mit dem Pfeil nach links in die linke Liste der "Automatisch erzeugten Formulare" verfrachten. Oder du baust in der abstürzenden Routine noch Code ein, der das Formular erzeugt:

Code: Alles auswählen

procedure TForm1.MenuItem2Click(Sender: TObject);
begin
  if Form13 = nil then
    Application.CreateForm(TForm13, Form13);
  Form13.Show;
end;

Techno
Beiträge: 18
Registriert: Mo 14. Okt 2019, 10:24
OS, Lazarus, FPC: Windows 10 (L 2.0.8 FPC 3.0.4)
CPU-Target: 32Bit

Re: Fehlermeldung bei Klick auf PopUpMenu

Beitrag von Techno »

Hallo wp_xyz,

nun funktioniert alles so wie es soll.
Vielen Dank für deine ausführliche Antwort!
Grüße,

Techno

Antworten