Предположим, что есть три формы в проекте (Form1, Form2, Form3). Form1 имеет кнопку на нем с событием OnClick, установленным на Form2.Show
. Этот код выполняет отлично, однако если код Form2 в пытается вызвать Form3.Show
, то проект поднимает ВНЕШНИЙ: SIGSEGV указывает на Customform.incПаскаль: сборка проекта Внешняя: SIGSEGV при взаимодействии с формой
project1 Проект поднял класс исключения «Внешний: SIGSEGV»
В файле ' . \ include \ customform.inc 'по строке 2196:
Видимый: = True;
Это как раз то, что происходит с моим проектом. Все формы были надлежащим образом созданы и объявлены, а единицы связаны отлично. Компиляция прекрасна, без каких-либо ошибок или предупреждений.
Таким образом, невозможно сделать третью форму видимой. Но я обнаружил, что всякое взаимодействие приведет к ошибке External: SIGSEGV, указывающей на случайные фрагменты кода, которые компилируются и выполняются просто отлично. Я просто не могу понять происхождение ошибки.
Если я пытаюсь выполнить свой проект без отладчика, я получаю ошибку нарушения прав доступа. В противном случае код:
procedure TWarForm.FormCreate(Sender: TObject);
Begin
Form3.Show;
end;
из
unit work;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
StdCtrls, BGRAFlashProgressBar, AuthUnit;
type
{ TWarForm }
TWarForm = class(TForm)
ArcaneDustIMG: TImage;
ProgressBar: TBGRAFlashProgressBar;
ArcaneEDT: TEdit;
GoldEDT: TEdit;
GoldIMG: TImage;
Label1: TLabel;
Wallpaper: TImage;
procedure FormCreate(Sender: TObject);
procedure WallpaperMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure WallpaperMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure WallpaperMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ private declarations }
public
{ public declarations }
end;
var
WarForm: TWarForm;
MouseIsDown: Boolean;
PX, PY: Integer;
implementation
{$R *.lfm}
{ TWarForm }
procedure TWarForm.WallpaperMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then begin
MouseIsDown := True;
PX := X;
PY := Y;
end;
end;
procedure TWarForm.FormCreate(Sender: TObject);
Begin
Form3.Show;
end;
procedure TWarForm.WallpaperMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if MouseIsDown then begin
SetBounds(WarForm.Left + (X - PX), WarForm.Top + (Y - PY), WarForm.Width, WarForm.Height);
end;
end;
procedure TWarForm.WallpaperMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
MouseIsDown:=False;
end;
end.
Вы уверены, что 'Form3' был инициализирован до создания' TWarForm'? В вашем описании говорится, что вы получаете сообщение об ошибке при попытке сделать показ формы одним нажатием кнопки, но ваш код пытается показать форму во время создания другой формы (основной формы?). – lurker
Delphi не поднимает SIGSEGV, поэтому это не связано с Delphi, и у Pascal нет форм или обработчиков событий. Я удалил неподходящие теги. Не используйте случайные теги, которые не относятся к вашему вопросу, чтобы привлечь внимание; используйте теги, которые действительно применимы к вашему сообщению. Кроме того, ваш код является неполным. У вас нет единицы в предложении uses для Form3, которое я вижу. Где вы создаете 'Form3'? Если вы установите разбивку на строке 'Form3.Show', что скажет отладчик, когда вы оцениваете' Form3'? –