Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2014, 19:48   #21
DarkSmile
Пользователь
 
Регистрация: 14.03.2013
Сообщений: 24
По умолчанию

Потому что вы создаете класс SelectComp := TSelectComp.Create; и проверяете у SelectComp, тут ясен пень что все будет nil
DarkSmile вне форума Ответить с цитированием
Старый 06.04.2014, 20:00   #22
DarkSmile
Пользователь
 
Регистрация: 14.03.2013
Сообщений: 24
По умолчанию

Ну вод собственно и весь код:

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Menus;

type

  TEeventParam = class(TStringList)
    public
      ProcName: string;
      vars: TStringList;
      constructor Create; virtual;
  end;

  TCodeEvent = class
      _OnShanage:   TEeventParam;
      _OnClick:     TEeventParam;
      _On2xClick:   TEeventParam;
      _OnClose:     TEeventParam;
      _OnCloseQuery:TEeventParam;
      _OnCreate:    TEeventParam;
      _OnAktivate:  TEeventParam;
      _OnDeaktivate:TEeventParam;
      _OnShow:      TEeventParam;
      _OnHide:      TEeventParam;
      _OnResize:    TEeventParam;
      _OnPaint:     TEeventParam;
      _OnKeyUp:     TEeventParam;
      _OnKeyDown:   TEeventParam;
      _OnDownMause: TEeventParam;
      _OnUpMause:   TEeventParam;
      _OnMoveMouse: TEeventParam;
      _OnLeaveMouse:TEeventParam;
      _OnSelect:    TEeventParam;
  end;

  TCompEvents = class
    public
      _OnShanage:   TMenuItem;
      _OnClick:     TMenuItem;
      _On2xClick:   TMenuItem;
      _OnClose:     TMenuItem;
      _OnCloseQuery:TMenuItem;
      _OnCreate:    TMenuItem;
      _OnAktivate:  TMenuItem;
      _OnDeaktivate:TMenuItem;
      _OnShow:      TMenuItem;
      _OnHide:      TMenuItem;
      _OnResize:    TMenuItem;
      _OnPaint:     TMenuItem;
      _OnKeyUp:     TMenuItem;
      _OnKeyDown:   TMenuItem;
      _OnDownMause: TMenuItem;
      _OnUpMause:   TMenuItem;
      _OnMoveMouse: TMenuItem;
      _OnLeaveMouse:TMenuItem;
      _OnSelect:    TMenuItem;
  end;

  TSelectComp = class
    public
      NumEvent: Integer;
      CodeEvent: TCodeEvent;
      CompEvents: TCompEvents;
      constructor Create;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    PopupMenu1: TPopupMenu;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

constructor TEeventParam.Create;
begin
    inherited Create;
    vars := TStringList.Create;
end;

constructor TSelectComp.Create;
begin
   inherited Create;
   CompEvents := TCompEvents.Create;
   CodeEvent  := TCodeEvent.Create;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   if TSelectComp(Button2).CodeEvent._OnCreate = nil then begin
     TSelectComp(Button2).CodeEvent._OnCreate := TEeventParam.Create;
     TSelectComp(Button2).CodeEvent._OnCreate.AddStrings(Memo1.Lines);
     ShowMessage('is nil');
   end else begin
     Memo1.Lines.Text := TSelectComp(Button2).CodeEvent._OnCreate.Text;
     ShowMessage('not nil');
   end;
end;

end.
DarkSmile вне форума Ответить с цитированием
Старый 06.04.2014, 20:33   #23
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

А это что ещё за чудо такое TSelectComp(Button2)? С каких это пор класс TButton(Button2) стал вдруг другим классом?
ReportCube вне форума Ответить с цитированием
Старый 06.04.2014, 20:46   #24
DarkSmile
Пользователь
 
Регистрация: 14.03.2013
Сообщений: 24
По умолчанию

А че так нельзя чтоле? Мне просто нужно что бы TSelectComp был у каждого компонента, что бы можно было записать для каждого свои параметры. Но ведь это работает, если в TCodeEvent = class вместо class использовать record, только вот он блин не все параметры обнуляет

Последний раз редактировалось DarkSmile; 06.04.2014 в 20:52.
DarkSmile вне форума Ответить с цитированием
Старый 06.04.2014, 20:59   #25
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

Не может ничего так работать. Если хотите создавать свой класс и привязать его к кнопке - создавайте класс, а ссылку на созданный класс преобразуйте в Integer и присваивайте его свойству Tag вашей кнопке. Тогда, если класс нормально создан, то к нему можно будет обращаться простым преобразованием TSelectComp(Button2.Tag).CodeEvent. _OnCreate. Это - как один из возможных вариантов. Только не забывайте освобождать класс, когда в нём надобность отпадёт.
ReportCube вне форума Ответить с цитированием
Старый 06.04.2014, 21:14   #26
DarkSmile
Пользователь
 
Регистрация: 14.03.2013
Сообщений: 24
По умолчанию

Не совсем понял, например как ссылку преобразовать в Integer?
DarkSmile вне форума Ответить с цитированием
Старый 06.04.2014, 21:18   #27
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

Button2.Tag := Integer(TSelectComp.Create);
ReportCube вне форума Ответить с цитированием
Старый 06.04.2014, 21:38   #28
DarkSmile
Пользователь
 
Регистрация: 14.03.2013
Сообщений: 24
По умолчанию

Вон оно как, ща попробуем

То что надо, спасибо!

Последний раз редактировалось DarkSmile; 06.04.2014 в 22:15.
DarkSmile вне форума Ответить с цитированием
Старый 06.04.2014, 22:02   #29
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

а как все начиналось ... аж дух захватывало и интриговало, а закончилось простым незнанием основ.
eval вне форума Ответить с цитированием
Старый 06.04.2014, 22:22   #30
DarkSmile
Пользователь
 
Регистрация: 14.03.2013
Сообщений: 24
По умолчанию

Да я прост с классами недавно начал работать. Делаю дизайнер форм, и вот для каждого компонента формы нужно загружать соответствующие события
DarkSmile вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Организация программ с использованием процедур .использованием параметров-значений и параметров переменных Фрейтор 40-500 Помощь студентам 0 02.11.2012 21:58
Организация программ с использованием процедур .использованием параметров-значений и параметров переменных Фрейтор 40-500 Помощь студентам 6 02.11.2012 21:46
Обнуление переменных Dmitry1983 PHP 8 25.06.2011 19:13
обнуление kuzjaca Microsoft Office Access 7 24.02.2011 10:03
обнуление счетчика в бд Tanuska___:) БД в Delphi 2 22.01.2009 23:10