Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру / 25 сообщений из 44, страница 1 из 2
24.12.2019, 12:40
    #39907445
Леон4ik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
как каждому объекту класса в списке назначить свою процедуру при заполнении списка объектами, со свойствами я разобрался, а вот с методами не допер пока.
Допустим вот кусок кода. как для каждого элемента списка определить свою функцию(где прописать, что для такого то элемента списка такая вот процедура), допустим есть процедуры MOV A,A, MOV A,B, ну и так далее.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
procedure ListOfComand;
var List: TObjectList;
    i: Integer;
begin
  List := TObjectList.Create;
  List.Add(TComand.Create('MOV A,A', '7F', 1));
  List.Add(TComand.Create('MOV A,B', '78', 1));
  List.Add(TComand.Create('MOV A,C', '79', 1));
...
Рейтинг: 0 / 0
24.12.2019, 12:48
    #39907450
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
Обязательно текстом? Типом procedure не подойдет?

http://docwiki.embarcadero.com/RADStudio/Rio/en/Procedural_Types_(Delphi)
...
Рейтинг: 0 / 0
24.12.2019, 12:54
    #39907454
Леон4ik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
нужно обязательно, чтоб был список всех этих обьектов(по сути говоря команд), чтоб потом можно было цикл организовать и при совпадении введенного FCode, с значением из списка, можно было вызвать процедуру ему соответствующую, только вот где обозначить ее
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
TComand = class
    private
      FMnemoCode:string;
      FCode:string;
      FRowCount:integer;
    public
      constructor Create(AMnemoCode: String; ACode: string; ARowCount: integer);
 
      property MnemoCode: string read FMnemoCode write FMnemoCode;
      property Code: string read FCode write FCode;
      property RowCount: integer read FRowCount write FRowCount;
      procedure MOV(Aname,Bname:string);//на счет этого не уверен
  end;
implementation
 
constructor TComand.Create(AMnemoCode: String; ACode: string; ARowCount: integer);
begin
 
  FMnemoCode:=AMnemoCode;
  FCode:=ACode;
  FRowCount:=ARowCount;
end;
...
Рейтинг: 0 / 0
24.12.2019, 13:16
    #39907464
Квейд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
кстати
Леон4ik
нужно обязательно, чтоб был список всех этих обьектов(по сути говоря команд), чтоб потом можно было цикл организовать и при совпадении введенного FCode, с значением из списка, можно было вызвать процедуру ему соответствующую, только вот где обозначить ее
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
TComand = class
    private
      FMnemoCode:string;
      FCode:string;
      FRowCount:integer;
    public
      constructor Create(const AMnemoCode: String; const ACode: string; ARowCount: integer);
 
      property MnemoCode: string read FMnemoCode write FMnemoCode;
      property Code: string read FCode write FCode;
      property RowCount: integer read FRowCount write FRowCount;
      procedure MOV(const Aname,Bname:string);//на счет этого не уверен
  end;
implementation
 
constructor TComand.Create(const AMnemoCode: String; const ACode: string; ARowCount: integer);
begin
 
  FMnemoCode:=AMnemoCode;
  FCode:=ACode;
  FRowCount:=ARowCount;
end;

...
Рейтинг: 0 / 0
24.12.2019, 13:48
    #39907479
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
type
TMyProc = procedure(const A,B: string);

constructor TComand.Create(AMnemoCode: String; ACode: string; ARowCount: integer;AProc: TMyProc);
begin
  FMnemoCode:=AMnemoCode;
  FCode:=ACode;
  FRowCount:=ARowCount;
  FProc: AProc;
end;

begin
  List.Add(TComand.Create('MOV A,A', '7F', 1,DoProc));
...
Рейтинг: 0 / 0
24.12.2019, 13:55
    #39907481
Леон4ik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
DimaBr, спасибо большое, но есть проблемка: create просит обьявить FProc: AProc

Код: pascal
1.
2.
3.
4.
5.
6.
7.
constructor TComand.Create(AMnemoCode: String; ACode: string; ARowCount: integer;AProc: TMyProc);
begin
  FMnemoCode:=AMnemoCode;
  FCode:=ACode;
  FRowCount:=ARowCount;
  FProc: AProc;
end;
...
Рейтинг: 0 / 0
24.12.2019, 14:01
    #39907485
Polesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
Леон4ik
DimaBr, спасибо большое, но есть проблемка: create просит обьявить FProc: AProc

Там присвоение
Код: pascal
1.
  FProc := AProc;
...
Рейтинг: 0 / 0
24.12.2019, 14:01
    #39907486
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
Леон4ikcreate просит обьявить FProc: AProc

А догадаться, что там опечатка в операторе присваивания - за пределами твоих способностей?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.12.2019, 14:03
    #39907487
Леон4ik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
Dimitry Sibiryakov, логично что я сразу попробовал, но не катит, подчеркивает всю строку
Код: pascal
1.
FProc:= AProc;
...
Рейтинг: 0 / 0
24.12.2019, 14:06
    #39907489
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
Леон4ikлогично что я сразу попробовал

Теперь попробуй быть логичным чуть-чуть больше и подумать что именно эта строка делает.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.12.2019, 14:20
    #39907499
Леон4ik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
Dimitry Sibiryakov, не вышло, придется вам обьяснять
...
Рейтинг: 0 / 0
24.12.2019, 14:27
    #39907504
Polesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
Леон4ik
Dimitry Sibiryakov, не вышло, придется вам обьяснять

В класс TComand надо добавить свойство/поле FProc, имеющее тип TMyProc
...
Рейтинг: 0 / 0
24.12.2019, 14:37
    #39907509
Леон4ik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
Polesov, большое спасибо
...
Рейтинг: 0 / 0
24.12.2019, 14:38
    #39907510
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
Леон4ikне вышло

Посмотри насколько эта строка похода на предыдущие. Нет ощущения, что и делает она то же
самое, что и предыдущие?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.12.2019, 15:14
    #39907526
x1ca4064
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
Леон4ik
как каждому объекту класса в списке назначить свою процедуру при заполнении списка объектами, со свойствами я разобрался, а вот с методами не допер пока.
Допустим вот кусок кода. как для каждого элемента списка определить свою функцию(где прописать, что для такого то элемента списка такая вот процедура), допустим есть процедуры MOV A,A, MOV A,B, ну и так далее.



Лучше используйте потомков TCommand, а уже у потомков определите метод Exec, например:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
  TCmdMemory=array[0..$FFFF] of byte;
  TDataMemory=array[0..$FFFF] of byte;

  TProcessor=class
  ...
    CmdMemory:TCmdMemory;
    DataMemory:TDataMemory;
    ProcFlags:TProcFlags;
    ProcRegisters:TProcRegisters;
  end;

  TCommand=class
    constructor Create(AProcessor:TProcessor); virtual;
  ...
    property Code:TCode...;
    property MnemoCode:string...;
    procedure Exec; virtual; abstract;
  end;

  TCmdMovAA=class(TCommad)
    procedure Exec; override;
  end;
...
Рейтинг: 0 / 0
24.12.2019, 21:27
    #39907662
defecator
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
Леон4ik
как каждому объекту класса в списке назначить свою процедуру при заполнении списка объектами, со свойствами я разобрался, а вот с методами не допер пока.
Допустим вот кусок кода. как для каждого элемента списка определить свою функцию(где прописать, что для такого то элемента списка такая вот процедура), допустим есть процедуры MOV A,A, MOV A,B, ну и так далее.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
procedure ListOfComand;
var List: TObjectList;
    i: Integer;
begin
  List := TObjectList.Create;
  List.Add(TComand.Create('MOV A,A', '7F', 1));
  List.Add(TComand.Create('MOV A,B', '78', 1));
  List.Add(TComand.Create('MOV A,C', '79', 1));



просматривается ассемблер 8080/Z80
...
Рейтинг: 0 / 0
24.12.2019, 21:37
    #39907666
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
defecator

просматривается ассемблер 8080/Z80

КР580ВМ80 же
...
Рейтинг: 0 / 0
24.12.2019, 21:59
    #39907671
defecator
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
alekcvp
defecator

просматривается ассемблер 8080/Z80

КР580ВМ80 же

система команд 8080 и КР/ВМ80 одинакова
...
Рейтинг: 0 / 0
26.12.2019, 11:56
    #39908364
Леон4ik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
Как вызвать в другом юните уже созданный экземпляр, и получить доступ к его полям.(Юниты связаны) Вот код Юнита, где создан класс. При таких действиях вылезает Error, но он и должен вылезать,т.к. я делаю неверно.Подскажите, как правильно.
Код:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
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;


Вот юнит с формой
Код:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
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.


Вот создание класса;
Код:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
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;
...
Рейтинг: 0 / 0
26.12.2019, 12:16
    #39908373
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
Леон4ik
Код: pascal
1.
2.
3.
  procedure CreateReg;
  procedure AddReg();
  procedure DelReg();


Либо class procedure, либо вынести эти процедуры за класс и инициализировать/убивать глобальные переменные в секциях модуля initialization/finalization.
...
Рейтинг: 0 / 0
26.12.2019, 12:17
    #39908374
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
Леон4ik
вылезает Error

И да, компилятор никогда не выдает такой ошибки.
...
Рейтинг: 0 / 0
26.12.2019, 12:23
    #39908378
Леон4ik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
wadman, я имел ввиду такую this form of method call only allowed for class methods
...
Рейтинг: 0 / 0
26.12.2019, 13:06
    #39908401
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
Леон4ik
При таких действиях вылезает Error, но он и должен вылезать,т.к. я делаю неверно.Подскажите, как правильно.

Правильно будет сформулировать задачу, а не "угадайте что мне нужно и покажите как правильно"
...
Рейтинг: 0 / 0
26.12.2019, 13:20
    #39908412
Леон4ik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
DimaBr, В одном юните у меня располагаются классы. В этом юните(без формы) мне нужно создать несколько экземпляров классов(3 класса, см.выше). Т.е несколько экземпляров одного класса, потом другого, потом третьего, повторюсь сделать это нужно мне не в интерфейсной части. В интерфейсной части(где форма) мне нужно будет использовать уже созданные экземпляры. Присваивать им занчения, читать, вносить новые. Поэтому я спрашиваю, как правильно это можно сделать, т.к. я пока не понял. Надеюсь, так вам понятно?
...
Рейтинг: 0 / 0
26.12.2019, 14:42
    #39908480
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру
Код: pascal
1.
2.
3.
4.
5.
6.
7.
var A1,A2,A3: TRegister;
begin
// В этом юните(без формы) мне нужно создать несколько экземпляров классов
  A1 := TRegister.Create;
  A2 := TRegister.Create;
  A3 := TRegister.Create;
end;
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Подскажите пожалуйста, как каждому объекту класса из списка назначить свою процедуру / 25 сообщений из 44, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]