Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Error


Автор: Vex 14.2.2003, 22:45
Код

type
  TMyMemo=class(TMemo);

  end;

 TForm1 = class(TForm)
 [B]  Memo1: TMyMemo; [/B]
 private
   { Private declarations }
   procedure WMCopy(var a:TWMCopy); message WM_COPY;
 public
   { Public declarations }
 end;


Почему так нельзя сделать? (Выдает ошибку).

Автор: 78125 14.2.2003, 22:56
type
TMyMemo=class(TMemo);

end;

TForm1 = class(TForm)
Memo1: TMyMemo;
private
{ Private declarations }
procedure WMCopy(var a:TWMCopy); message WM_COPY;
public
{ Public declarations }
end;

по моим соображениям то ли вместо двоеточия надо =
то ли это дело в разделе var написать
то ли ... на этом мысль заканчивается

Автор: SmaLL 14.2.2003, 23:05
Цитата(Vex @ 14.2.2003, 14:45)
Код

type
  TMyMemo=class(TMemo);

 TForm1 = class(TForm)
 private
   { Private declarations }
   procedure WMCopy(var a:TWMCopy); message WM_COPY;
 public
    Memo1: TMyMemo;
   { Public declarations }
 end;


Почему так нельзя сделать? (Выдает ошибку).


Сразу после TForm1 = class(TForm) в описании формы пишутся поля и методы описанные в *.dfm.

Если хочешь получить наследника от TMemo, то сделай свой компонент и используй его.
Это делается так:
Меню Component/New Component, как родителя (ancestor type) выбираешь TMemo, а дальше думаю сам разберЁшься.

Автор: Song 15.2.2003, 17:16
Непонятно, где ты хочешь перехватить WM_COPY на форме или в мемо? Как у тебя написано перехватит в форме.

Автор: Vex 15.2.2003, 22:53
Цитата(Song @ 15.2.2003, 08:16)
Непонятно, где ты хочешь перехватить WM_COPY на форме или в мемо? Как у тебя написано перехватит в форме.

В OleContainer, но для простоты возьмем Мемо. Я так понимаю, надо создать свой компонент потомок от мемо и добавить туда процедуру перехвата сообщения. Я на правильном пути?

Автор: Vit 15.2.2003, 23:09
Ага, так не получится, чтобы вставить компонент в этот раздел:

TForm1 = class(TForm)
Memo1: TMyMemo;
private

надо чтобы он был зарегистрирован в палитре компонентов., иначе ты можешь вставить его только в секции Private, Protected, Public или Published и создавать его вручную. А если компонент прописывается между объявлением класса и private, то это значит, что визуальная оболочка Дельфи "знает" этот компонент и будет использовать его в Object Inspector. Кстати все компоненты, описанные в этой секции прописаны так же и в DFM файле

Автор: Vex 15.2.2003, 23:14
Спасибо, буду пробовать. smile.gif

Автор: Vex 21.2.2003, 03:30
Попробовал и ... ничего не вышло sad.gif

С Edit, например, такое проходит, а вот с OleContainer нет, может надо ловить какое-то другое сообщение?

Автор: Leonx 26.12.2019, 12:52
Как вызвать в другом юните уже созданный экземпляр, и получить доступ к его полям.(Юниты связаны) Вот код Юнита, где создан класс. При таких действиях вылезает Error:this form of method call only allowed for class methods, но он и должен вылезать,т.к. я делаю неверно.Подскажите, как правильно. smile  smile 
Код

procedure TRegister.CreateReg;
begin
regA:=Tregister.create;
end;

procedure TRegister.AddReg;
begin
regA.Rname:='A';
regA.value:='00';
regA.AIndex:=0;
end;

procedure TRegister.DelReg;
begin
regA.Free;
end;



Вот юнит с формой
Код

procedure TEm.BitBtn1Click(Sender: TObject);
begin
TRegister.Addreg;
label1.Caption:=regA.RName;
end;

procedure TEm.FormCreate(Sender: TObject);
begin
Tregister.CreateReg;
end;

procedure TEm.FormDestroy(Sender: TObject);
begin
Tregister.delReg;
end.


Вот создание класса;
Код

TRegister = class(TProcessor)
  protected
  fvalue:string;
  fRName:string;
  fIndex:integer;
  //procedure SetRegister( Value:string);
  //function GetRegister:string;
  public
  property value:string read fvalue write fvalue;
  property RName:string read fRName write fRName;
  property AIndex:integer read fIndex write fIndex;
  procedure CreateReg;
  procedure AddReg();
  procedure DelReg();
  end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)