Проблема с Callback функциями

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
Nexmean
незнакомец
Сообщения: 3
Зарегистрирован: 12.11.2012 06:31:57

Проблема с Callback функциями

Сообщение Nexmean »

Есть проблема. При запуске программы написанной под FPC 2.6.2 вылазит ошибка
Проект вызвал класс исключения 'External: SIGSEGV'.

В файле 'pallete.pas' на строке 52:
MethodColorChange := ColorChange
.

Вот в чем собственно суть: есть класс TFormMain который устанавливает значение переменной процедурного типа в объекте класса TPalleteForm.

Код: Выделить всё

unit Main;

interface

uses
    Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics,
    Menus, ExtCtrls, StdCtrls, Buttons, ActnList, Spin, ComCtrls,
    Pallete;

type
    TFormMain = class(TForm)
        procedure FormCreate(Sender: TObject);
    private
        procedure ColorChange(Sender: TObject);
    public
  end;

var
    FormMain: TFormMain;

implementation
    procedure TForm1.FormCreate(Sender: TObject);
        begin
            PalleteForm.SetColorChange(@ColorChange);
        end;

    procedure TForm1.ColorChange(Sender: TObject);
        begin
           
        end;
 
end.


Код: Выделить всё

unit Pallete;

{$mode objfpc}{$H+}

interface

uses
    Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Grids,
    ExtCtrls;

type
   TMethodColorChange = procedure(Sender: TObject) of object;

   TPalleteForm = class(TForm)
      private
         MethodColorChange: TMethodColorChange;
      public
         procedure SetColorChange(ColorChange: TMethodColorChange);
   end;

var
   PalleteForm: TPalleteForm;

implementation

   procedure TPalleteForm.SetColorChange(ColorChange: TMethodColorChange);
      begin
         MethodColorChange := ColorChange;
      end;

end.


P.S. Тут не весь код, но только тот который имеет значение в данное проблеме.
Аватара пользователя
runewalsh
энтузиаст
Сообщения: 579
Зарегистрирован: 27.04.2010 00:15:25

Сообщение runewalsh »

Код: Выделить всё

PalleteForm.SetColorChange(@ColorChange);

Воткни перед этой строкой Assert(Assigned(PaletteForm)), узнаешь нечно интересное.
Ответить